77 jassert (hasCalledReset);
80 jassert (numSamples > 0);
83 auto msElapsed = timeNow - lastCallbackTime;
85 lastCallbackTime = timeNow;
87 if (! incomingMessages.
isEmpty())
89 int numSourceSamples = jmax (1, roundToInt (msElapsed * 0.001 * sampleRate));
93 const uint8* midiData;
94 int numBytes, samplePosition;
98 if (numSourceSamples > numSamples)
102 const int maxBlockLengthToUse = numSamples << 5;
104 if (numSourceSamples > maxBlockLengthToUse)
106 startSample = numSourceSamples - maxBlockLengthToUse;
107 numSourceSamples = maxBlockLengthToUse;
111 scale = (numSamples << 10) / numSourceSamples;
113 while (iter.
getNextEvent (midiData, numBytes, samplePosition))
115 samplePosition = ((samplePosition - startSample) * scale) >> 10;
117 destBuffer.
addEvent (midiData, numBytes,
118 jlimit (0, numSamples - 1, samplePosition));
125 startSample = numSamples - numSourceSamples;
127 while (iter.
getNextEvent (midiData, numBytes, samplePosition))
129 destBuffer.
addEvent (midiData, numBytes,
130 jlimit (0, numSamples - 1, samplePosition + startSample));
134 incomingMessages.
clear();