1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-10 23:44:24 +00:00

Fixed dropped MIDI messages in AudioProcessorGraph with large buffer sizes

This commit is contained in:
ed 2019-05-17 17:00:32 +01:00
parent ad2419e152
commit 81fbbdfe20

View file

@ -47,18 +47,21 @@ struct GraphRenderSequence
if (numSamples > maxSamples)
{
// being asked to render more samples than our buffers have, so slice things up...
tempMIDI.clear();
tempMIDI.addEvents (midiMessages, maxSamples, numSamples, -maxSamples);
// Being asked to render more samples than our buffers have, so divide the buffer into chunks
int chunkStartSample = 0;
while (chunkStartSample < numSamples)
{
AudioBuffer<FloatType> startAudio (buffer.getArrayOfWritePointers(), buffer.getNumChannels(), maxSamples);
midiMessages.clear (maxSamples, numSamples);
perform (startAudio, midiMessages, audioPlayHead);
auto chunkSize = jmin (maxSamples, numSamples - chunkStartSample);
AudioBuffer<FloatType> audioChunk (buffer.getArrayOfWritePointers(), buffer.getNumChannels(), chunkStartSample, chunkSize);
midiChunk.clear();
midiChunk.addEvents (midiMessages, chunkStartSample, chunkSize, -chunkStartSample);
perform (audioChunk, midiChunk, audioPlayHead);
chunkStartSample += maxSamples;
}
AudioBuffer<FloatType> endAudio (buffer.getArrayOfWritePointers(), buffer.getNumChannels(), maxSamples, numSamples - maxSamples);
perform (endAudio, tempMIDI, audioPlayHead);
return;
}
@ -145,7 +148,7 @@ struct GraphRenderSequence
const int defaultMIDIBufferSize = 512;
tempMIDI.ensureSize (defaultMIDIBufferSize);
midiChunk.ensureSize (defaultMIDIBufferSize);
for (auto&& m : midiBuffers)
m.ensureSize (defaultMIDIBufferSize);
@ -170,7 +173,7 @@ struct GraphRenderSequence
MidiBuffer currentMidiOutputBuffer;
Array<MidiBuffer> midiBuffers;
MidiBuffer tempMIDI;
MidiBuffer midiChunk;
private:
//==============================================================================