diff --git a/modules/juce_audio_devices/midi_io/juce_MidiDevices.h b/modules/juce_audio_devices/midi_io/juce_MidiDevices.h index 954d615d45..34727b3b26 100644 --- a/modules/juce_audio_devices/midi_io/juce_MidiDevices.h +++ b/modules/juce_audio_devices/midi_io/juce_MidiDevices.h @@ -337,6 +337,11 @@ public: */ void stopBackgroundThread(); + /** Returns true if the background thread used to send blocks of data is running. + @see startBackgroundThread, stopBackgroundThread + */ + bool isBackgroundThreadRunning() const noexcept { return isThreadRunning(); } + //============================================================================== /** Deprecated. */ static StringArray getDevices(); diff --git a/modules/juce_audio_utils/players/juce_AudioProcessorPlayer.cpp b/modules/juce_audio_utils/players/juce_AudioProcessorPlayer.cpp index f11fcbb369..ac56170ff7 100644 --- a/modules/juce_audio_utils/players/juce_AudioProcessorPlayer.cpp +++ b/modules/juce_audio_utils/players/juce_AudioProcessorPlayer.cpp @@ -165,7 +165,18 @@ void AudioProcessorPlayer::audioDeviceIOCallback (const float** const inputChann } if (midiOutput != nullptr) - midiOutput->sendBlockOfMessagesNow (incomingMidi); + { + if (midiOutput->isBackgroundThreadRunning()) + { + midiOutput->sendBlockOfMessages (incomingMidi, + Time::getMillisecondCounterHiRes(), + sampleRate); + } + else + { + midiOutput->sendBlockOfMessagesNow (incomingMidi); + } + } return; }