From 68e0e0e329a554eff1c5d9eb279e89659fedf853 Mon Sep 17 00:00:00 2001 From: ed Date: Fri, 12 Jun 2020 15:37:05 +0100 Subject: [PATCH] Use MidiOutput::sendBlockOfMessages() in AudioProcessorPlayer to send timestamped MIDI messages --- .../juce_audio_devices/midi_io/juce_MidiDevices.h | 5 +++++ .../players/juce_AudioProcessorPlayer.cpp | 13 ++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) 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; }