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 if (numSourceSamples > numSamples)
97 const int maxBlockLengthToUse = numSamples << 5;
99 auto iter = incomingMessages.
cbegin();
101 if (numSourceSamples > maxBlockLengthToUse)
103 startSample = numSourceSamples - maxBlockLengthToUse;
104 numSourceSamples = maxBlockLengthToUse;
108 scale = (numSamples << 10) / numSourceSamples;
112 const auto pos = ((meta.samplePosition - startSample) * scale) >> 10;
113 destBuffer.addEvent (meta.data, meta.numBytes, jlimit (0, numSamples - 1, pos));
120 startSample = numSamples - numSourceSamples;
122 for (
const auto metadata : incomingMessages)
123 destBuffer.
addEvent (metadata.data, metadata.numBytes,
124 jlimit (0, numSamples - 1, metadata.samplePosition + startSample));
127 incomingMessages.
clear();