diff --git a/Source/Processors/HDF5Recording.cpp b/Source/Processors/HDF5Recording.cpp index b262b4a02838cde7c6d042178793fe45500639bc..1514f4ace96550e5430fd26c4cc95d4d02c5340b 100644 --- a/Source/Processors/HDF5Recording.cpp +++ b/Source/Processors/HDF5Recording.cpp @@ -29,7 +29,6 @@ HDF5Recording::HDF5Recording() : processorIndex(-1) timestamp = 0; scaledBuffer = new float[MAX_BUFFER_SIZE]; intBuffer = new int16[MAX_BUFFER_SIZE]; - mainFile = new KWIKFile(); } HDF5Recording::~HDF5Recording() @@ -68,9 +67,9 @@ void HDF5Recording::addChannel(int index, Channel* chan) processorMap.add(processorIndex); } -void HDF5Recording::openFiles(File rootFolder, int recordingNumber) +void HDF5Recording::openFiles(File rootFolder, int experimentNumber, int recordingNumber) { - String basepath = rootFolder.getFullPathName() + rootFolder.separatorString; + String basepath = rootFolder.getFullPathName() + rootFolder.separatorString + "experiment" + String(experimentNumber); //KWIK file mainFile->initFile(basepath); mainFile->open(); @@ -151,4 +150,10 @@ void HDF5Recording::addSpikeElectrode(int index, SpikeRecordInfo* elec) void HDF5Recording::writeSpike(const SpikeObject& spike, int electrodeIndex) { //TODO -} \ No newline at end of file +} + +void HDF5Recording::startAcquisition() +{ + mainFile = new KWIKFile(); +} + diff --git a/Source/Processors/HDF5Recording.h b/Source/Processors/HDF5Recording.h index 334a8cba3b0166ed25483ce17356a40b14b7e49f..5c6169c176b8fea61faf86df5d072508c6b154cc 100644 --- a/Source/Processors/HDF5Recording.h +++ b/Source/Processors/HDF5Recording.h @@ -32,7 +32,7 @@ class HDF5Recording : public RecordEngine public: HDF5Recording(); ~HDF5Recording(); - void openFiles(File rootFolder, int recordingNumber); + void openFiles(File rootFolder, int experimentNumber, int recordingNumber); void closeFiles(); void writeData(AudioSampleBuffer& buffer, int nSamples); void writeEvent(MidiMessage& event, int samplePosition); @@ -42,6 +42,7 @@ public: void registerProcessor(GenericProcessor* processor); void resetChannels(); void updateTimeStamp(int64 timestamp); + void startAcquisition(); private: diff --git a/Source/Processors/OriginalRecording.cpp b/Source/Processors/OriginalRecording.cpp index fab1ddd313eae3c8b7ef409810740808506f15fa..65346e5cc3c271d5017dd165ab38d6204d18d82e 100644 --- a/Source/Processors/OriginalRecording.cpp +++ b/Source/Processors/OriginalRecording.cpp @@ -25,7 +25,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. #include "../Audio/AudioComponent.h" OriginalRecording::OriginalRecording() : separateFiles(true), eventFile(nullptr), - recordingNumber(0), zeroBuffer(1, 50000), blockIndex(0) + recordingNumber(0), experimentNumber(0), zeroBuffer(1, 50000), blockIndex(0) { continuousDataIntegerBuffer = new int16[10000]; continuousDataFloatBuffer = new float[10000]; @@ -73,9 +73,10 @@ void OriginalRecording::resetChannels() spikeFileArray.clear(); } -void OriginalRecording::openFiles(File rootFolder, int recordingNumber) +void OriginalRecording::openFiles(File rootFolder, int experimentNumber, int recordingNumber) { this->recordingNumber = recordingNumber; + this->experimentNumber = experimentNumber; openFile(rootFolder,nullptr); for (int i = 0; i < fileArray.size(); i++) { @@ -101,7 +102,7 @@ void OriginalRecording::openFile(File rootFolder, Channel* ch) isEvent = (ch == nullptr) ? true : false; if (isEvent) - fullPath += "all_channels.events"; + fullPath += "experiment" + String(experimentNumber) + "_all_channels.events"; else fullPath += getFileName(ch); @@ -148,6 +149,7 @@ void OriginalRecording::openSpikeFile(File rootFolder, SpikeRecordInfo* elec) FILE* spFile; String fullPath(rootFolder.getFullPathName() + rootFolder.separatorString); + fullPath += "experiment" + String(experimentNumber) + "_"; fullPath += elec->name.removeCharacters(" "); fullPath += ".spikes"; @@ -175,6 +177,7 @@ String OriginalRecording::getFileName(Channel* ch) { String filename; + filename += "experiment" + String(experimentNumber) + "_"; filename += ch->nodeId; filename += "_"; filename += ch->name; diff --git a/Source/Processors/OriginalRecording.h b/Source/Processors/OriginalRecording.h index 876278316d60a209c1493dbe9ec7df632bb497ed..5ed20aefb2a9c717af47e818c860537c0a4508d1 100644 --- a/Source/Processors/OriginalRecording.h +++ b/Source/Processors/OriginalRecording.h @@ -38,7 +38,7 @@ public: OriginalRecording(); ~OriginalRecording(); - void openFiles(File rootFolder, int recordingNumber); + void openFiles(File rootFolder, int experimentNumber, int recordingNumber); void closeFiles(); void writeData(AudioSampleBuffer& buffer, int nSamples); void writeEvent(MidiMessage& event, int samplePosition); @@ -62,6 +62,7 @@ private: bool separateFiles; int blockIndex; int recordingNumber; + int experimentNumber; /** Holds data that has been converted from float to int16 before saving. diff --git a/Source/Processors/RecordEngine.cpp b/Source/Processors/RecordEngine.cpp index 6450fb14aa6e6475e876fcc3f0ba3f63a51dcff1..9d5bc2abcc8a63be916658c7896fcc3aaf77cba2 100644 --- a/Source/Processors/RecordEngine.cpp +++ b/Source/Processors/RecordEngine.cpp @@ -50,4 +50,8 @@ SpikeRecordInfo* RecordEngine::getSpikeElectrode(int index) void RecordEngine::updateTimeStamp(int64 timestamp) {} -void RecordEngine::registerSpikeSource(GenericProcessor* processor) {} \ No newline at end of file +void RecordEngine::registerSpikeSource(GenericProcessor* processor) {} + +void RecordEngine::startAcquisition() {} + +void RecordEngine::directoryChanged() {} \ No newline at end of file diff --git a/Source/Processors/RecordEngine.h b/Source/Processors/RecordEngine.h index da5afdf15e4093550967f2e80ea3d41f7a5ee342..f76f15f1d35073035deb36f2aa54e14f39857bb5 100644 --- a/Source/Processors/RecordEngine.h +++ b/Source/Processors/RecordEngine.h @@ -46,7 +46,7 @@ public: RecordEngine(); ~RecordEngine(); - virtual void openFiles(File rootFolder, int recordingNumber) =0; + virtual void openFiles(File rootFolder, int experimentNumber, int recordingNumber) =0; virtual void closeFiles() =0; virtual void writeData(AudioSampleBuffer& buffer, int nSamples) =0; virtual void writeEvent(MidiMessage& event, int samplePosition) =0; @@ -57,6 +57,8 @@ public: virtual void registerSpikeSource(GenericProcessor* processor); virtual void resetChannels(); virtual void updateTimeStamp(int64 timestamp); + virtual void startAcquisition(); + virtual void directoryChanged(); protected: Channel* getChannel(int index); diff --git a/Source/Processors/RecordNode.cpp b/Source/Processors/RecordNode.cpp index 20e49cbe42c8edc29493a2221848ae54c283896f..483483cdaee68050a3277e44cd312ccec677d783 100755 --- a/Source/Processors/RecordNode.cpp +++ b/Source/Processors/RecordNode.cpp @@ -51,6 +51,9 @@ RecordNode::RecordNode() spikeElectrodeIndex = 0; + experimentNumber = 0; + hasRecorded = false; + // 128 inputs, 0 outputs setPlayConfigDetails(getNumInputs(),getNumOutputs(),44100.0,128); @@ -262,12 +265,15 @@ void RecordNode::setParameter(int parameterIndex, float newValue) { isRecording = true; + hasRecorded = true; // std::cout << "START RECORDING." << std::endl; if (newDirectoryNeeded) { createNewDirectory(); recordingNumber = 0; + experimentNumber = 1; + EVERY_ENGINE->directoryChanged(); } else { @@ -281,7 +287,7 @@ void RecordNode::setParameter(int parameterIndex, float newValue) getEditorViewport()->saveState(File(settingsFileName)); } - EVERY_ENGINE->openFiles(rootFolder, recordingNumber); + EVERY_ENGINE->openFiles(rootFolder, experimentNumber, recordingNumber); allFilesOpened = true; @@ -344,7 +350,15 @@ void RecordNode::closeAllFiles() bool RecordNode::enable() { + if (hasRecorded) + { + hasRecorded = false; + experimentNumber++; + } + //When starting a recording, if a new directory is needed it gets rewritten. Else is incremented by one. + recordingNumber = -1; + EVERY_ENGINE->startAcquisition(); isProcessing = true; return true; } diff --git a/Source/Processors/RecordNode.h b/Source/Processors/RecordNode.h index 2291db99ac016509610d71e7f3cbeef899290240..05124510dec0ae797ba171a583b7dc5036308cf5 100755 --- a/Source/Processors/RecordNode.h +++ b/Source/Processors/RecordNode.h @@ -170,7 +170,10 @@ private: OwnedArray<SpikeRecordInfo> spikeElectrodePointers; - int spikeElectrodeIndex;; + int spikeElectrodeIndex; + + int experimentNumber; + bool hasRecorded; /** Generates a default directory name, based on the current date and time */ String generateDirectoryName();