|
|
@@ -21,8 +21,6 @@ |
|
|
*/
|
|
|
*/
|
|
|
|
|
|
|
|
|
MidiMessageCollector::MidiMessageCollector()
|
|
|
MidiMessageCollector::MidiMessageCollector()
|
|
|
: lastCallbackTime (0),
|
|
|
|
|
|
sampleRate (44100.0001)
|
|
|
|
|
|
{
|
|
|
{
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -36,6 +34,9 @@ void MidiMessageCollector::reset (const double newSampleRate) |
|
|
jassert (newSampleRate > 0);
|
|
|
jassert (newSampleRate > 0);
|
|
|
|
|
|
|
|
|
const ScopedLock sl (midiCallbackLock);
|
|
|
const ScopedLock sl (midiCallbackLock);
|
|
|
|
|
|
#if JUCE_DEBUG
|
|
|
|
|
|
hasCalledReset = true;
|
|
|
|
|
|
#endif
|
|
|
sampleRate = newSampleRate;
|
|
|
sampleRate = newSampleRate;
|
|
|
incomingMessages.clear();
|
|
|
incomingMessages.clear();
|
|
|
lastCallbackTime = Time::getMillisecondCounterHiRes();
|
|
|
lastCallbackTime = Time::getMillisecondCounterHiRes();
|
|
|
@@ -43,8 +44,9 @@ void MidiMessageCollector::reset (const double newSampleRate) |
|
|
|
|
|
|
|
|
void MidiMessageCollector::addMessageToQueue (const MidiMessage& message)
|
|
|
void MidiMessageCollector::addMessageToQueue (const MidiMessage& message)
|
|
|
{
|
|
|
{
|
|
|
// you need to call reset() to set the correct sample rate before using this object
|
|
|
|
|
|
jassert (sampleRate != 44100.0001);
|
|
|
|
|
|
|
|
|
#if JUCE_DEBUG
|
|
|
|
|
|
jassert (hasCalledReset); // you need to call reset() to set the correct sample rate before using this object
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
// the messages that come in here need to be time-stamped correctly - see MidiInput
|
|
|
// the messages that come in here need to be time-stamped correctly - see MidiInput
|
|
|
// for details of what the number should be.
|
|
|
// for details of what the number should be.
|
|
|
@@ -52,8 +54,7 @@ void MidiMessageCollector::addMessageToQueue (const MidiMessage& message) |
|
|
|
|
|
|
|
|
const ScopedLock sl (midiCallbackLock);
|
|
|
const ScopedLock sl (midiCallbackLock);
|
|
|
|
|
|
|
|
|
const int sampleNumber
|
|
|
|
|
|
= (int) ((message.getTimeStamp() - 0.001 * lastCallbackTime) * sampleRate);
|
|
|
|
|
|
|
|
|
auto sampleNumber = (int) ((message.getTimeStamp() - 0.001 * lastCallbackTime) * sampleRate);
|
|
|
|
|
|
|
|
|
incomingMessages.addEvent (message, sampleNumber);
|
|
|
incomingMessages.addEvent (message, sampleNumber);
|
|
|
|
|
|
|
|
|
@@ -66,12 +67,14 @@ void MidiMessageCollector::addMessageToQueue (const MidiMessage& message) |
|
|
void MidiMessageCollector::removeNextBlockOfMessages (MidiBuffer& destBuffer,
|
|
|
void MidiMessageCollector::removeNextBlockOfMessages (MidiBuffer& destBuffer,
|
|
|
const int numSamples)
|
|
|
const int numSamples)
|
|
|
{
|
|
|
{
|
|
|
// you need to call reset() to set the correct sample rate before using this object
|
|
|
|
|
|
jassert (sampleRate != 44100.0001);
|
|
|
|
|
|
|
|
|
#if JUCE_DEBUG
|
|
|
|
|
|
jassert (hasCalledReset); // you need to call reset() to set the correct sample rate before using this object
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
jassert (numSamples > 0);
|
|
|
jassert (numSamples > 0);
|
|
|
|
|
|
|
|
|
const double timeNow = Time::getMillisecondCounterHiRes();
|
|
|
|
|
|
const double msElapsed = timeNow - lastCallbackTime;
|
|
|
|
|
|
|
|
|
auto timeNow = Time::getMillisecondCounterHiRes();
|
|
|
|
|
|
auto msElapsed = timeNow - lastCallbackTime;
|
|
|
|
|
|
|
|
|
const ScopedLock sl (midiCallbackLock);
|
|
|
const ScopedLock sl (midiCallbackLock);
|
|
|
lastCallbackTime = timeNow;
|
|
|
lastCallbackTime = timeNow;
|
|
|
@@ -79,7 +82,6 @@ void MidiMessageCollector::removeNextBlockOfMessages (MidiBuffer& destBuffer, |
|
|
if (! incomingMessages.isEmpty())
|
|
|
if (! incomingMessages.isEmpty())
|
|
|
{
|
|
|
{
|
|
|
int numSourceSamples = jmax (1, roundToInt (msElapsed * 0.001 * sampleRate));
|
|
|
int numSourceSamples = jmax (1, roundToInt (msElapsed * 0.001 * sampleRate));
|
|
|
|
|
|
|
|
|
int startSample = 0;
|
|
|
int startSample = 0;
|
|
|
int scale = 1 << 16;
|
|
|
int scale = 1 << 16;
|
|
|
|
|
|
|
|
|
|