diff --git a/Source/Processors/SpikeDetector/SpikeDetector.cpp b/Source/Processors/SpikeDetector/SpikeDetector.cpp index e4424bdafa680763ae760946b35c104cca4bb7e9..a0f5c16157d1bf26d725d1d6529b04fc790d8837 100755 --- a/Source/Processors/SpikeDetector/SpikeDetector.cpp +++ b/Source/Processors/SpikeDetector/SpikeDetector.cpp @@ -317,7 +317,13 @@ bool SpikeDetector::enable() { sampleRateForElectrode = (uint16_t) getSampleRate(); - useOverflowBuffer = false; + + + useOverflowBuffer.clear(); + + for (int i = 0; i < electrodes.size(); i++) + useOverflowBuffer.add(false); + return true; } @@ -443,8 +449,6 @@ void SpikeDetector::process(AudioSampleBuffer& buffer, SimpleElectrode* electrode; dataBuffer = &buffer; - int nSamples = 100; // SOME NUMBER - checkForEvents(events); // need to find any timestamp events before extracting spikes //std::cout << dataBuffer.getMagnitude(0,nSamples) << std::endl; @@ -557,6 +561,27 @@ void SpikeDetector::process(AudioSampleBuffer& buffer, //jassert(electrode->lastBufferIndex < 0); + if (getNumSamples(*electrode->channels) > overflowBufferSize) + { + + for (int j = 0; j < electrode->numChannels; j++) + { + + overflowBuffer.copyFrom(*electrode->channels+i, 0, + buffer, *electrode->channels+i, + nSamples-overflowBufferSize, + overflowBufferSize); + + } + + useOverflowBuffer.set(i, true); + + } + else + { + useOverflowBuffer.set(i, false); + } + } // end cycle through electrodes // copy end of this buffer into the overflow buffer @@ -569,26 +594,7 @@ void SpikeDetector::process(AudioSampleBuffer& buffer, // std::cout << "numSamples = " << overflowBufferSize << std::endl; // std::cout << "buffer size = " << buffer.getNumSamples() << std::endl; - if (nSamples > overflowBufferSize) - { - - for (int i = 0; i < overflowBuffer.getNumChannels(); i++) - { - - overflowBuffer.copyFrom(i, 0, - buffer, i, - nSamples-overflowBufferSize, - overflowBufferSize); - - useOverflowBuffer = true; - } - - } - else - { - - useOverflowBuffer = false; - } + diff --git a/Source/Processors/SpikeDetector/SpikeDetector.h b/Source/Processors/SpikeDetector/SpikeDetector.h index 046965d12845eef4b194430e3a877aa60aa8281a..829ad60302c9766f74ae6bf5414ad31e5e2d1571 100755 --- a/Source/Processors/SpikeDetector/SpikeDetector.h +++ b/Source/Processors/SpikeDetector/SpikeDetector.h @@ -171,7 +171,7 @@ private: float getCurrentSample(int& chan); bool samplesAvailable(int nSamples); - bool useOverflowBuffer; + Array<bool> useOverflowBuffer; int currentElectrode; int currentChannelIndex; diff --git a/Source/Processors/SpikeSorter/SpikeSorter.cpp b/Source/Processors/SpikeSorter/SpikeSorter.cpp index fa5ef7dcda6d2bc38e193dc2be2f52d5dbb62d80..4b0ab108940c41c10278d6b545c1e5f53f03278b 100644 --- a/Source/Processors/SpikeSorter/SpikeSorter.cpp +++ b/Source/Processors/SpikeSorter/SpikeSorter.cpp @@ -641,7 +641,12 @@ void SpikeSorter::setParameter(int parameterIndex, float newValue) bool SpikeSorter::enable() { - useOverflowBuffer = false; + useOverflowBuffer.clear(); + + for (int i = 0; i < electrodes.size(); i++) + useOverflowBuffer.add(false); + + SpikeSorterEditor* editor = (SpikeSorterEditor*) getEditor(); editor->enable(); @@ -863,9 +868,6 @@ void SpikeSorter::process(AudioSampleBuffer& buffer, checkForEvents(events); // find latest's packet timestamps - //postEventsInQueue(events); - int nSamples = 100; // SOME NUMBER - channelBuffers->update(buffer, hardware_timestamp,software_timestamp,nSamples); for (int i = 0; i < electrodes.size(); i++) @@ -880,7 +882,7 @@ void SpikeSorter::process(AudioSampleBuffer& buffer, // increment at start of getNextSample() // cycle through samples - while (samplesAvailable(getNumSamples(electrode->sourceNodeId))) + while (samplesAvailable(getNumSamples(*electrode->channels))) { sampleIndex++; @@ -1005,43 +1007,32 @@ void SpikeSorter::process(AudioSampleBuffer& buffer, } // end cycle through samples //float vv = getNextSample(currentChannel); - electrode->lastBufferIndex = sampleIndex - nSamples; // should be negative + electrode->lastBufferIndex = sampleIndex - getNumSamples(*electrode->channels); // should be negative //jassert(electrode->lastBufferIndex < 0); - } // end cycle through electrodes + if (getNumSamples(*electrode->channels) > overflowBufferSize) + { - // copy end of this buffer into the overflow buffer + for (int j = 0; j < electrode.numChannels; j++) + { - //std::cout << "Copying buffer" << std::endl; - // std::cout << "nSamples: " << nSamples; - //std::cout << "overflowBufferSize:" << overflowBufferSize; + overflowBuffer.copyFrom(*electrode->channels+i, 0, + buffer, *electrode->channels+i, + nSamples-overflowBufferSize, + overflowBufferSize); + + } - //std::cout << "sourceStartSample = " << nSamples-overflowBufferSize << std::endl; - // std::cout << "numSamples = " << overflowBufferSize << std::endl; - // std::cout << "buffer size = " << buffer.getNumSamples() << std::endl; + useOverflowBuffer.set(i, true); - if (nSamples > overflowBufferSize) - { - - for (int i = 0; i < overflowBuffer.getNumChannels(); i++) + } + else { - - overflowBuffer.copyFrom(i, 0, - buffer, i, - nSamples-overflowBufferSize, - overflowBufferSize); - - - useOverflowBuffer = true; + useOverflowBuffer.set(i, false); } - } - else - { - - useOverflowBuffer = false; - } + } // end cycle through electrodes mut.exit(); diff --git a/Source/Processors/SpikeSorter/SpikeSorter.h b/Source/Processors/SpikeSorter/SpikeSorter.h index 2f0f5a00b31f0db9f3453c41d4a2b31c12aa5d5c..077075d12b11411e46fde5eb6e64cc0403273bb7 100644 --- a/Source/Processors/SpikeSorter/SpikeSorter.h +++ b/Source/Processors/SpikeSorter/SpikeSorter.h @@ -326,7 +326,7 @@ private: float getCurrentSample(int& chan); bool samplesAvailable(int nSamples); - bool useOverflowBuffer; + Array<bool> useOverflowBuffer; int currentElectrode; int currentChannelIndex;