| @@ -47,18 +47,21 @@ struct GraphRenderSequence | |||||
| if (numSamples > maxSamples) | 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; | return; | ||||
| } | } | ||||
| @@ -145,7 +148,7 @@ struct GraphRenderSequence | |||||
| const int defaultMIDIBufferSize = 512; | const int defaultMIDIBufferSize = 512; | ||||
| tempMIDI.ensureSize (defaultMIDIBufferSize); | |||||
| midiChunk.ensureSize (defaultMIDIBufferSize); | |||||
| for (auto&& m : midiBuffers) | for (auto&& m : midiBuffers) | ||||
| m.ensureSize (defaultMIDIBufferSize); | m.ensureSize (defaultMIDIBufferSize); | ||||
| @@ -170,7 +173,7 @@ struct GraphRenderSequence | |||||
| MidiBuffer currentMidiOutputBuffer; | MidiBuffer currentMidiOutputBuffer; | ||||
| Array<MidiBuffer> midiBuffers; | Array<MidiBuffer> midiBuffers; | ||||
| MidiBuffer tempMIDI; | |||||
| MidiBuffer midiChunk; | |||||
| private: | private: | ||||
| //============================================================================== | //============================================================================== | ||||