Browse Source

Fixed an assertion in MidiMessageCollector that would have failed to trigger

tags/2021-05-28
jules 8 years ago
parent
commit
a3e6c81911
2 changed files with 18 additions and 13 deletions
  1. +13
    -11
      modules/juce_audio_devices/midi_io/juce_MidiMessageCollector.cpp
  2. +5
    -2
      modules/juce_audio_devices/midi_io/juce_MidiMessageCollector.h

+ 13
- 11
modules/juce_audio_devices/midi_io/juce_MidiMessageCollector.cpp View File

@@ -21,8 +21,6 @@
*/
MidiMessageCollector::MidiMessageCollector()
: lastCallbackTime (0),
sampleRate (44100.0001)
{
}
@@ -36,6 +34,9 @@ void MidiMessageCollector::reset (const double newSampleRate)
jassert (newSampleRate > 0);
const ScopedLock sl (midiCallbackLock);
#if JUCE_DEBUG
hasCalledReset = true;
#endif
sampleRate = newSampleRate;
incomingMessages.clear();
lastCallbackTime = Time::getMillisecondCounterHiRes();
@@ -43,8 +44,9 @@ void MidiMessageCollector::reset (const double newSampleRate)
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
// for details of what the number should be.
@@ -52,8 +54,7 @@ void MidiMessageCollector::addMessageToQueue (const MidiMessage& message)
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);
@@ -66,12 +67,14 @@ void MidiMessageCollector::addMessageToQueue (const MidiMessage& message)
void MidiMessageCollector::removeNextBlockOfMessages (MidiBuffer& destBuffer,
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);
const double timeNow = Time::getMillisecondCounterHiRes();
const double msElapsed = timeNow - lastCallbackTime;
auto timeNow = Time::getMillisecondCounterHiRes();
auto msElapsed = timeNow - lastCallbackTime;
const ScopedLock sl (midiCallbackLock);
lastCallbackTime = timeNow;
@@ -79,7 +82,6 @@ void MidiMessageCollector::removeNextBlockOfMessages (MidiBuffer& destBuffer,
if (! incomingMessages.isEmpty())
{
int numSourceSamples = jmax (1, roundToInt (msElapsed * 0.001 * sampleRate));
int startSample = 0;
int scale = 1 << 16;


+ 5
- 2
modules/juce_audio_devices/midi_io/juce_MidiMessageCollector.h View File

@@ -89,10 +89,13 @@ public:
private:
//==============================================================================
double lastCallbackTime;
double lastCallbackTime = 0;
CriticalSection midiCallbackLock;
MidiBuffer incomingMessages;
double sampleRate;
double sampleRate = 44100.0;
#if JUCE_DEBUG
bool hasCalledReset = false;
#endif
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MidiMessageCollector)
};

Loading…
Cancel
Save