From 6d53ed3fec07474a91f07ab7ea0c9655330044fa Mon Sep 17 00:00:00 2001 From: ed Date: Mon, 26 Jul 2021 18:24:55 +0100 Subject: [PATCH] AUv3: Handle AURenderEventMIDIEventList --- .../AU/juce_AUv3_Wrapper.mm | 36 +++++++++++++++++-- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/modules/juce_audio_plugin_client/AU/juce_AUv3_Wrapper.mm b/modules/juce_audio_plugin_client/AU/juce_AUv3_Wrapper.mm index b5899af6c9..ae818a5daa 100644 --- a/modules/juce_audio_plugin_client/AU/juce_AUv3_Wrapper.mm +++ b/modules/juce_audio_plugin_client/AU/juce_AUv3_Wrapper.mm @@ -36,6 +36,9 @@ #define JUCE_AUV3_MIDI_OUTPUT_SUPPORTED 1 #define JUCE_AUV3_VIEW_CONFIG_SUPPORTED 1 #endif + #if defined (MAC_OS_VERSION_12_0) + #define JUCE_AUV3_MIDI_EVENT_LIST_SUPPORTED 1 + #endif #endif #if JUCE_IOS @@ -43,6 +46,9 @@ #define JUCE_AUV3_MIDI_OUTPUT_SUPPORTED 1 #define JUCE_AUV3_VIEW_CONFIG_SUPPORTED 1 #endif + #if (defined __IPHONE_15_0) + #define JUCE_AUV3_MIDI_EVENT_LIST_SUPPORTED 1 + #endif #endif #ifndef __OBJC2__ @@ -63,6 +69,10 @@ #include #include +#if JUCE_AUV3_MIDI_EVENT_LIST_SUPPORTED + #include +#endif + #define JUCE_VIEWCONTROLLER_OBJC_NAME(x) JUCE_JOIN_MACRO (x, FactoryAUv3) #if JUCE_IOS @@ -1419,6 +1429,25 @@ private: } break; + #if JUCE_AUV3_MIDI_EVENT_LIST_SUPPORTED + case AURenderEventMIDIEventList: + { + const auto& list = event->MIDIEventsList.eventList; + auto* packet = &list.packet[0]; + + for (uint32_t i = 0; i < list.numPackets; ++i) + { + converter.dispatch (reinterpret_cast (packet->words), + reinterpret_cast (packet->words + packet->wordCount), + static_cast (packet->timeStamp - (MIDITimeStamp) startTime), + [this] (const MidiMessage& message) { midiMessages.addEvent (message, int (message.getTimeStamp())); }); + + packet = MIDIEventPacketNext (packet); + } + } + break; + #endif + case AURenderEventParameter: case AURenderEventParameterRamp: { @@ -1433,9 +1462,6 @@ private: break; case AURenderEventMIDISysEx: - #if defined (MAC_OS_VERSION_12_0) - case AURenderEventMIDIEventList: - #endif default: break; } @@ -1722,6 +1748,10 @@ private: OwnedArray inBusBuffers, outBusBuffers; MidiBuffer midiMessages; + #if JUCE_AUV3_MIDI_EVENT_LIST_SUPPORTED + ump::ToBytestreamDispatcher converter { 2048 }; + #endif + ObjCBlock hostMusicalContextCallback; ObjCBlock hostTransportStateCallback;