This provides the initial work for #12. We need to export this info for LV2s as well.pull/17/head
| @@ -289,6 +289,14 @@ struct Parameter { | |||||
| */ | */ | ||||
| ParameterRanges ranges; | ParameterRanges ranges; | ||||
| /** | |||||
| MIDI CC to use by default on this parameter.@n | |||||
| A value of 0 or 32 (bank change) is considered invalid.@n | |||||
| Must also be less or equal to 120. | |||||
| @note This value is only a hint! Hosts might map it automatically or completely ignore it. | |||||
| */ | |||||
| uint8_t midiCC; | |||||
| /** | /** | ||||
| Default constructor for a null parameter. | Default constructor for a null parameter. | ||||
| */ | */ | ||||
| @@ -297,7 +305,8 @@ struct Parameter { | |||||
| name(), | name(), | ||||
| symbol(), | symbol(), | ||||
| unit(), | unit(), | ||||
| ranges() {} | |||||
| ranges(), | |||||
| midiCC(0) {} | |||||
| /** | /** | ||||
| Constructor using custom values. | Constructor using custom values. | ||||
| @@ -307,7 +316,8 @@ struct Parameter { | |||||
| name(n), | name(n), | ||||
| symbol(s), | symbol(s), | ||||
| unit(u), | unit(u), | ||||
| ranges(def, min, max) {} | |||||
| ranges(def, min, max), | |||||
| midiCC(0) {} | |||||
| }; | }; | ||||
| /** | /** | ||||
| @@ -323,6 +323,13 @@ public: | |||||
| return fData->parameters[index].ranges; | return fData->parameters[index].ranges; | ||||
| } | } | ||||
| uint8_t getParameterMidiCC(const uint32_t index) const noexcept | |||||
| { | |||||
| DISTRHO_SAFE_ASSERT_RETURN(fData != nullptr && index < fData->parameterCount, 0); | |||||
| return fData->parameters[index].midiCC; | |||||
| } | |||||
| float getParameterValue(const uint32_t index) const | float getParameterValue(const uint32_t index) const | ||||
| { | { | ||||
| DISTRHO_SAFE_ASSERT_RETURN(fPlugin != nullptr, 0.0f); | DISTRHO_SAFE_ASSERT_RETURN(fPlugin != nullptr, 0.0f); | ||||
| @@ -328,6 +328,16 @@ public: | |||||
| } | } | ||||
| } | } | ||||
| # endif | # endif | ||||
| int dssi_get_midi_controller_for_port(const ulong port) noexcept | |||||
| { | |||||
| const uint8_t midiCC = fPlugin.getParameterMidiCC(port); | |||||
| if (midiCC == 0 || midiCC == 32 || midiCC >= 0x78) | |||||
| return DSSI_NONE; | |||||
| return DSSI_CC(midiCC); | |||||
| } | |||||
| #endif | #endif | ||||
| // ------------------------------------------------------------------- | // ------------------------------------------------------------------- | ||||
| @@ -434,6 +444,11 @@ static void dssi_select_program(LADSPA_Handle instance, ulong bank, ulong progra | |||||
| } | } | ||||
| # endif | # endif | ||||
| static int dssi_get_midi_controller_for_port(LADSPA_Handle instance, ulong port) | |||||
| { | |||||
| return instancePtr->dssi_get_midi_controller_for_port(port); | |||||
| } | |||||
| # if DISTRHO_PLUGIN_WANT_MIDI_INPUT | # if DISTRHO_PLUGIN_WANT_MIDI_INPUT | ||||
| static void dssi_run_synth(LADSPA_Handle instance, ulong sampleCount, snd_seq_event_t* events, ulong eventCount) | static void dssi_run_synth(LADSPA_Handle instance, ulong sampleCount, snd_seq_event_t* events, ulong eventCount) | ||||
| { | { | ||||
| @@ -488,7 +503,7 @@ static DSSI_Descriptor sDssiDescriptor = { | |||||
| /* get_program */ nullptr, | /* get_program */ nullptr, | ||||
| /* select_program */ nullptr, | /* select_program */ nullptr, | ||||
| # endif | # endif | ||||
| /* get_midi_controller_for_port */ nullptr, | |||||
| dssi_get_midi_controller_for_port, | |||||
| # if DISTRHO_PLUGIN_WANT_MIDI_INPUT | # if DISTRHO_PLUGIN_WANT_MIDI_INPUT | ||||
| dssi_run_synth, | dssi_run_synth, | ||||
| # else | # else | ||||