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:
parent
ad2419e152
commit
81fbbdfe20
1 changed files with 14 additions and 11 deletions
|
|
@ -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…
Add table
Add a link
Reference in a new issue