Signed-off-by: falkTX <falktx@falktx.com>pull/491/head
| @@ -553,6 +553,12 @@ START_NAMESPACE_DISTRHO | |||||
| */ | */ | ||||
| #define DISTRHO_PLUGIN_WANT_LATENCY 1 | #define DISTRHO_PLUGIN_WANT_LATENCY 1 | ||||
| /** | |||||
| Whether the plugin wants MPE for MIDI input and/or output. | |||||
| @note Only AU and CLAP formats implement this at the moment | |||||
| */ | |||||
| #define DISTRHO_PLUGIN_WANT_MIDI_AS_MPE 0 | |||||
| /** | /** | ||||
| Whether the plugin wants MIDI input.@n | Whether the plugin wants MIDI input.@n | ||||
| This is automatically enabled if @ref DISTRHO_PLUGIN_IS_SYNTH is true. | This is automatically enabled if @ref DISTRHO_PLUGIN_IS_SYNTH is true. | ||||
| @@ -565,12 +571,6 @@ START_NAMESPACE_DISTRHO | |||||
| */ | */ | ||||
| #define DISTRHO_PLUGIN_WANT_MIDI_OUTPUT 1 | #define DISTRHO_PLUGIN_WANT_MIDI_OUTPUT 1 | ||||
| /** | |||||
| Whether the plugin uses MIDI MPE for MIDI input and MIDI output. | |||||
| @note Only CLAP implements this macro at the moment | |||||
| */ | |||||
| #define DISTRHO_PLUGIN_MIDI_MPE 0 | |||||
| /** | /** | ||||
| Whether the plugin wants to change its own parameter inputs.@n | Whether the plugin wants to change its own parameter inputs.@n | ||||
| Not all hosts or plugin formats support this, | Not all hosts or plugin formats support this, | ||||
| @@ -686,6 +686,17 @@ public: | |||||
| outWritable = true; | outWritable = true; | ||||
| return noErr; | return noErr; | ||||
| case kAudioUnitProperty_SupportsMPE: | |||||
| DISTRHO_SAFE_ASSERT_UINT_RETURN(inScope == kAudioUnitScope_Global, inScope, kAudioUnitErr_InvalidScope); | |||||
| DISTRHO_SAFE_ASSERT_UINT_RETURN(inElement == 0, inElement, kAudioUnitErr_InvalidElement); | |||||
| #if DISTRHO_PLUGIN_WANT_MIDI_AS_MPE | |||||
| outDataSize = sizeof(UInt32); | |||||
| outWritable = false; | |||||
| return noErr; | |||||
| #else | |||||
| return kAudioUnitErr_InvalidProperty; | |||||
| #endif | |||||
| case kAudioUnitProperty_CocoaUI: | case kAudioUnitProperty_CocoaUI: | ||||
| DISTRHO_SAFE_ASSERT_UINT_RETURN(inScope == kAudioUnitScope_Global, inScope, kAudioUnitErr_InvalidScope); | DISTRHO_SAFE_ASSERT_UINT_RETURN(inScope == kAudioUnitScope_Global, inScope, kAudioUnitErr_InvalidScope); | ||||
| DISTRHO_SAFE_ASSERT_UINT_RETURN(inElement == 0, inElement, kAudioUnitErr_InvalidElement); | DISTRHO_SAFE_ASSERT_UINT_RETURN(inElement == 0, inElement, kAudioUnitErr_InvalidElement); | ||||
| @@ -1055,6 +1066,12 @@ public: | |||||
| } | } | ||||
| return noErr; | return noErr; | ||||
| #if DISTRHO_PLUGIN_WANT_MIDI_AS_MPE | |||||
| case kAudioUnitProperty_SupportsMPE: | |||||
| *static_cast<UInt32*>(outData) = 1; | |||||
| return noErr; | |||||
| #endif | |||||
| #if DISTRHO_PLUGIN_HAS_UI | #if DISTRHO_PLUGIN_HAS_UI | ||||
| case kAudioUnitProperty_CocoaUI: | case kAudioUnitProperty_CocoaUI: | ||||
| { | { | ||||
| @@ -67,12 +67,6 @@ | |||||
| # define DPF_CLAP_TIMER_INTERVAL 16 /* ~60 fps */ | # define DPF_CLAP_TIMER_INTERVAL 16 /* ~60 fps */ | ||||
| #endif | #endif | ||||
| #if defined(DISTRHO_PLUGIN_MIDI_MPE) && DISTRHO_PLUGIN_MIDI_MPE | |||||
| # define DPF_CLAP_NOTE_DIALECT CLAP_NOTE_DIALECT_MIDI_MPE | |||||
| #else | |||||
| # define DPF_CLAP_NOTE_DIALECT CLAP_NOTE_DIALECT_MIDI | |||||
| #endif | |||||
| START_NAMESPACE_DISTRHO | START_NAMESPACE_DISTRHO | ||||
| // -------------------------------------------------------------------------------------------------------------------- | // -------------------------------------------------------------------------------------------------------------------- | ||||
| @@ -2290,23 +2284,33 @@ static bool CLAP_ABI clap_plugin_note_ports_get(const clap_plugin_t*, uint32_t, | |||||
| { | { | ||||
| if (is_input) | if (is_input) | ||||
| { | { | ||||
| #if DISTRHO_PLUGIN_WANT_MIDI_INPUT | |||||
| #if DISTRHO_PLUGIN_WANT_MIDI_INPUT | |||||
| info->id = 0; | info->id = 0; | ||||
| info->supported_dialects = DPF_CLAP_NOTE_DIALECT; | |||||
| info->preferred_dialect = DPF_CLAP_NOTE_DIALECT; | |||||
| #if DISTRHO_PLUGIN_WANT_MIDI_AS_MPE | |||||
| info->supported_dialects = CLAP_NOTE_DIALECT_MIDI | CLAP_NOTE_DIALECT_MIDI_MPE; | |||||
| info->preferred_dialect = CLAP_NOTE_DIALECT_MIDI_MPE; | |||||
| #else | |||||
| info->supported_dialects = CLAP_NOTE_DIALECT_MIDI; | |||||
| info->preferred_dialect = CLAP_NOTE_DIALECT_MIDI; | |||||
| #endif | |||||
| std::strcpy(info->name, "Event/MIDI Input"); | std::strcpy(info->name, "Event/MIDI Input"); | ||||
| return true; | return true; | ||||
| #endif | |||||
| #endif | |||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| #if DISTRHO_PLUGIN_WANT_MIDI_OUTPUT | |||||
| #if DISTRHO_PLUGIN_WANT_MIDI_OUTPUT | |||||
| info->id = 0; | info->id = 0; | ||||
| info->supported_dialects = DPF_CLAP_NOTE_DIALECT; | |||||
| info->preferred_dialect = DPF_CLAP_NOTE_DIALECT; | |||||
| #if DISTRHO_PLUGIN_WANT_MIDI_AS_MPE | |||||
| info->supported_dialects = CLAP_NOTE_DIALECT_MIDI | CLAP_NOTE_DIALECT_MIDI_MPE; | |||||
| info->preferred_dialect = CLAP_NOTE_DIALECT_MIDI_MPE; | |||||
| #else | |||||
| info->supported_dialects = CLAP_NOTE_DIALECT_MIDI; | |||||
| info->preferred_dialect = CLAP_NOTE_DIALECT_MIDI; | |||||
| #endif | |||||
| std::strcpy(info->name, "Event/MIDI Output"); | std::strcpy(info->name, "Event/MIDI Output"); | ||||
| return true; | return true; | ||||
| #endif | |||||
| #endif | |||||
| } | } | ||||
| return false; | return false; | ||||
| @@ -65,6 +65,10 @@ | |||||
| # define DISTRHO_PLUGIN_WANT_LATENCY 0 | # define DISTRHO_PLUGIN_WANT_LATENCY 0 | ||||
| #endif | #endif | ||||
| #ifndef DISTRHO_PLUGIN_WANT_MIDI_AS_MPE | |||||
| # define DISTRHO_PLUGIN_WANT_MIDI_AS_MPE 0 | |||||
| #endif | |||||
| #ifndef DISTRHO_PLUGIN_WANT_MIDI_OUTPUT | #ifndef DISTRHO_PLUGIN_WANT_MIDI_OUTPUT | ||||
| # define DISTRHO_PLUGIN_WANT_MIDI_OUTPUT 0 | # define DISTRHO_PLUGIN_WANT_MIDI_OUTPUT 0 | ||||
| #endif | #endif | ||||
| @@ -178,6 +182,13 @@ | |||||
| # error Synths need audio output to work! | # error Synths need audio output to work! | ||||
| #endif | #endif | ||||
| // -------------------------------------------------------------------------------------------------------------------- | |||||
| // Test if MIDI as MPE enabled where it doesn't make sense | |||||
| #if DISTRHO_PLUGIN_WANT_MIDI_AS_MPE && ! (DISTRHO_PLUGIN_WANT_MIDI_INPUT || DISTRHO_PLUGIN_WANT_MIDI_OUTPUT) | |||||
| # error MIDI as MPE needs MIDI input or output to work! | |||||
| #endif | |||||
| // -------------------------------------------------------------------------------------------------------------------- | // -------------------------------------------------------------------------------------------------------------------- | ||||
| // Enable MIDI input if synth, test if midi-input disabled when synth | // Enable MIDI input if synth, test if midi-input disabled when synth | ||||