Signed-off-by: falkTX <falktx@falktx.com>pull/491/head
@@ -553,6 +553,12 @@ START_NAMESPACE_DISTRHO | |||
*/ | |||
#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 | |||
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 | |||
/** | |||
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 | |||
Not all hosts or plugin formats support this, | |||
@@ -686,6 +686,17 @@ public: | |||
outWritable = true; | |||
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: | |||
DISTRHO_SAFE_ASSERT_UINT_RETURN(inScope == kAudioUnitScope_Global, inScope, kAudioUnitErr_InvalidScope); | |||
DISTRHO_SAFE_ASSERT_UINT_RETURN(inElement == 0, inElement, kAudioUnitErr_InvalidElement); | |||
@@ -1055,6 +1066,12 @@ public: | |||
} | |||
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 | |||
case kAudioUnitProperty_CocoaUI: | |||
{ | |||
@@ -67,12 +67,6 @@ | |||
# define DPF_CLAP_TIMER_INTERVAL 16 /* ~60 fps */ | |||
#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 | |||
// -------------------------------------------------------------------------------------------------------------------- | |||
@@ -2290,23 +2284,33 @@ static bool CLAP_ABI clap_plugin_note_ports_get(const clap_plugin_t*, uint32_t, | |||
{ | |||
if (is_input) | |||
{ | |||
#if DISTRHO_PLUGIN_WANT_MIDI_INPUT | |||
#if DISTRHO_PLUGIN_WANT_MIDI_INPUT | |||
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"); | |||
return true; | |||
#endif | |||
#endif | |||
} | |||
else | |||
{ | |||
#if DISTRHO_PLUGIN_WANT_MIDI_OUTPUT | |||
#if DISTRHO_PLUGIN_WANT_MIDI_OUTPUT | |||
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"); | |||
return true; | |||
#endif | |||
#endif | |||
} | |||
return false; | |||
@@ -65,6 +65,10 @@ | |||
# define DISTRHO_PLUGIN_WANT_LATENCY 0 | |||
#endif | |||
#ifndef DISTRHO_PLUGIN_WANT_MIDI_AS_MPE | |||
# define DISTRHO_PLUGIN_WANT_MIDI_AS_MPE 0 | |||
#endif | |||
#ifndef DISTRHO_PLUGIN_WANT_MIDI_OUTPUT | |||
# define DISTRHO_PLUGIN_WANT_MIDI_OUTPUT 0 | |||
#endif | |||
@@ -178,6 +182,13 @@ | |||
# error Synths need audio output to work! | |||
#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 | |||