Skip to content

Commit 2f3cd26

Browse files
committed
Fix timestamp error when DataBuffer is empty
DataBuffer needs to keep a copy of the last timestamp, in case it's empty when a reading occurs.
1 parent 31dd443 commit 2f3cd26

4 files changed

Lines changed: 10 additions & 5 deletions

File tree

Source/Processors/DataThreads/DataBuffer.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,8 @@ class PLUGIN_API DataBuffer
7272
HeapBlock<int64> timestampBuffer;
7373
HeapBlock<uint64> eventCodeBuffer;
7474

75+
int64 lastTimestamp;
76+
7577
int numChans;
7678

7779
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (DataBuffer);

Source/Processors/RecordNode/RecordNode.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -448,7 +448,7 @@ float RecordNode::getFreeSpace() const
448448

449449
void RecordNode::handleEvent(const EventChannel* eventInfo, const MidiMessage& event, int samplePosition)
450450
{
451-
if (isRecording)
451+
if (true)
452452
{
453453

454454
if ((*(event.getRawData()+0) & 0x80) == 0) // saving flag > 0 (i.e., event has not already been processed)
@@ -459,7 +459,8 @@ void RecordNode::handleEvent(const EventChannel* eventInfo, const MidiMessage& e
459459
eventIndex = getEventChannelIndex(Event::getSourceIndex(event), Event::getSourceID(event), Event::getSubProcessorIdx(event));
460460
else
461461
eventIndex = -1;
462-
m_eventQueue->addEvent(event, timestamp, eventIndex);
462+
if (isRecording)
463+
m_eventQueue->addEvent(event, timestamp, eventIndex);
463464
}
464465
}
465466
}

Source/Processors/RecordNode/RecordThread.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ void RecordThread::run()
8080
//1-Wait until the first block has arrived, so we can align the timestamps
8181
while (!m_receivedFirstBlock && !threadShouldExit())
8282
{
83-
wait(100);
83+
wait(1);
8484
}
8585

8686
//2-Open Files
@@ -145,7 +145,7 @@ void RecordThread::writeData(const AudioSampleBuffer& dataBuffer, int maxSamples
145145
uint16 sourceID = SystemEvent::getSourceID(event);
146146
uint16 subProcIdx = SystemEvent::getSubProcessorIdx(event);
147147
int64 timestamp = SystemEvent::getTimestamp(event);
148-
EVERY_ENGINE->writeTimestampSyncText(sourceID, subProcIdx, timestamp,
148+
EVERY_ENGINE->writeTimestampSyncText(sourceID, subProcIdx, timestamp,
149149
AccessClass::getProcessorGraph()->getRecordNode()->getSourceTimestamp(sourceID, subProcIdx),
150150
SystemEvent::getSyncText(event));
151151
}

Source/Processors/SourceNode/SourceNode.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -356,13 +356,15 @@ void SourceNode::process(AudioSampleBuffer& buffer)
356356
{
357357
int nSubs = dataThread->getNumSubProcessors();
358358
int copiedChannels = 0;
359+
359360
for (int sub = 0; sub < nSubs; sub++)
360361
{
361362
int channelsToCopy = getNumOutputs(sub);
363+
362364
int nSamples = inputBuffers[sub]->readAllFromBuffer(buffer, &timestamp, static_cast<uint64*>(eventCodeBuffers[sub]->getData()), buffer.getNumSamples(), copiedChannels, channelsToCopy);
363365
copiedChannels += channelsToCopy;
364366

365-
setTimestampAndSamples(timestamp, nSamples, sub);
367+
setTimestampAndSamples(timestamp, nSamples, sub);
366368

367369
if (ttlChannels[sub])
368370
{

0 commit comments

Comments
 (0)