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() 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;


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

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

Loading…
Cancel
Save