Browse Source

Fixed dropped MIDI messages in AudioProcessorGraph with large buffer sizes

tags/2021-05-28
ed 6 years ago
parent
commit
81fbbdfe20
1 changed files with 14 additions and 11 deletions
  1. +14
    -11
      modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp

+ 14
- 11
modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp 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:
//==============================================================================


Loading…
Cancel
Save