From 94525cf2c7c5ba1edfd98d990d60bb10bf37d0da Mon Sep 17 00:00:00 2001 From: jorshi Date: Tue, 31 Mar 2020 21:40:09 -0700 Subject: [PATCH 1/2] Update midi buffer to remove use of timestamped events --- Source/RenderEngine.cpp | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/Source/RenderEngine.cpp b/Source/RenderEngine.cpp index 706da6ec..bb894a87 100644 --- a/Source/RenderEngine.cpp +++ b/Source/RenderEngine.cpp @@ -77,9 +77,8 @@ void RenderEngine::renderPatch (const uint8 midiNote, MidiMessage onMessage = MidiMessage::noteOn (1, midiNote, midiVelocity); - onMessage.setTimeStamp(0); MidiBuffer midiNoteBuffer; - midiNoteBuffer.addEvent (onMessage, onMessage.getTimeStamp()); + midiNoteBuffer.addEvent (onMessage, 0); // Setup fft here so it is destroyed when rendering is finished and // the stack unwinds so it doesn't share frames with a new patch. @@ -108,6 +107,10 @@ void RenderEngine::renderPatch (const uint8 midiNote, for (int i = 0; i < numberOfBuffers; ++i) { + // Only trigger one midi note during first buffer + if (i > 0) + midiNoteBuffer.clear(); + // Trigger note off if in the correct audio buffer. ifTimeSetNoteOff (noteLength, sampleRate, @@ -185,18 +188,20 @@ void RenderEngine::ifTimeSetNoteOff (const double& noteLength, MidiBuffer& bufferToNoteOff) { double eventFrame = noteLength * sampleRate; - bool bufferBeginIsBeforeEvent = currentBufferIndex * bufferSize < eventFrame; - bool bufferEndIsAfterEvent = (currentBufferIndex + 1) * bufferSize >= eventFrame; + double bufferStartSample = currentBufferIndex * bufferSize; + + bool bufferBeginIsBeforeEvent = bufferStartSample < eventFrame; + bool bufferEndIsAfterEvent = bufferStartSample + bufferSize >= eventFrame; bool noteOffEvent = bufferBeginIsBeforeEvent && bufferEndIsAfterEvent; + if (noteOffEvent) { - MidiBuffer midiOffBuffer; MidiMessage offMessage = MidiMessage::noteOff (midiChannel, midiPitch, midiVelocity); - offMessage.setTimeStamp(eventFrame); - midiOffBuffer.addEvent(offMessage, offMessage.getTimeStamp()); - bufferToNoteOff = midiOffBuffer; + + double samplesUntilNoteOff = eventFrame - bufferStartSample; + bufferToNoteOff.addEvent(offMessage, samplesUntilNoteOff); } } From 7f31814719cfade143d7baa6fcaafeeba884e002 Mon Sep 17 00:00:00 2001 From: jorshi Date: Wed, 1 Apr 2020 08:45:16 -0700 Subject: [PATCH 2/2] Update midi note on comment --- Source/RenderEngine.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/RenderEngine.cpp b/Source/RenderEngine.cpp index bb894a87..9d1a6997 100644 --- a/Source/RenderEngine.cpp +++ b/Source/RenderEngine.cpp @@ -107,7 +107,7 @@ void RenderEngine::renderPatch (const uint8 midiNote, for (int i = 0; i < numberOfBuffers; ++i) { - // Only trigger one midi note during first buffer + // Only trigger one note on during first audio buffer if (i > 0) midiNoteBuffer.clear();