diff --git a/dpf/distrho/src/DistrhoPluginInternal.hpp b/dpf/distrho/src/DistrhoPluginInternal.hpp index bbb1079..d9677c1 100644 --- a/dpf/distrho/src/DistrhoPluginInternal.hpp +++ b/dpf/distrho/src/DistrhoPluginInternal.hpp @@ -43,6 +43,7 @@ struct Plugin::PrivateData { #endif uint32_t parameterCount; + uint32_t parameterOffset; Parameter* parameters; #if DISTRHO_PLUGIN_WANT_PROGRAMS @@ -73,6 +74,7 @@ struct Plugin::PrivateData { audioPorts(nullptr), #endif parameterCount(0), + parameterOffset(0), parameters(nullptr), #if DISTRHO_PLUGIN_WANT_PROGRAMS programCount(0), @@ -91,6 +93,22 @@ struct Plugin::PrivateData { { DISTRHO_SAFE_ASSERT(bufferSize != 0); DISTRHO_SAFE_ASSERT(d_isNotZero(sampleRate)); + +#if defined(DISTRHO_PLUGIN_TARGET_DSSI) || defined(DISTRHO_PLUGIN_TARGET_LV2) + parameterOffset += DISTRHO_PLUGIN_NUM_INPUTS + DISTRHO_PLUGIN_NUM_OUTPUTS; +# if DISTRHO_PLUGIN_WANT_LATENCY + parameterOffset += 1; +# endif +#endif + +#ifdef DISTRHO_PLUGIN_TARGET_LV2 +# if (DISTRHO_PLUGIN_IS_SYNTH || DISTRHO_PLUGIN_WANT_TIMEPOS || DISTRHO_PLUGIN_WANT_STATE) + parameterOffset += 1; +# if DISTRHO_PLUGIN_WANT_STATE + parameterOffset += 1; +# endif +# endif +#endif } ~PrivateData() noexcept @@ -283,6 +301,13 @@ public: return fData->parameterCount; } + uint32_t getParameterOffset() const noexcept + { + DISTRHO_SAFE_ASSERT_RETURN(fData != nullptr, 0); + + return fData->parameterOffset; + } + uint32_t getParameterHints(const uint32_t index) const noexcept { DISTRHO_SAFE_ASSERT_RETURN(fData != nullptr && index < fData->parameterCount, 0x0); diff --git a/dpf/distrho/src/DistrhoPluginLADSPA+DSSI.cpp b/dpf/distrho/src/DistrhoPluginLADSPA+DSSI.cpp index 2e2091c..01bb19d 100644 --- a/dpf/distrho/src/DistrhoPluginLADSPA+DSSI.cpp +++ b/dpf/distrho/src/DistrhoPluginLADSPA+DSSI.cpp @@ -331,7 +331,12 @@ public: int dssi_get_midi_controller_for_port(const ulong port) noexcept { - const uint8_t midiCC = fPlugin.getParameterMidiCC(port); + const uint32_t parameterOffset = fPlugin.getParameterOffset(); + + if (port > parameterOffset) + return DSSI_NONE; + + const uint8_t midiCC = fPlugin.getParameterMidiCC(port-parameterOffset); if (midiCC == 0 || midiCC == 32 || midiCC >= 0x78) return DSSI_NONE; diff --git a/dpf/distrho/src/DistrhoPluginLV2export.cpp b/dpf/distrho/src/DistrhoPluginLV2export.cpp index 1ba6848..965bad7 100644 --- a/dpf/distrho/src/DistrhoPluginLV2export.cpp +++ b/dpf/distrho/src/DistrhoPluginLV2export.cpp @@ -1,6 +1,6 @@ /* * DISTRHO Plugin Framework (DPF) - * Copyright (C) 2012-2016 Filipe Coelho + * Copyright (C) 2012-2017 Filipe Coelho * * Permission to use, copy, modify, and/or distribute this software for any purpose with * or without fee is hereby granted, provided that the above copyright notice and this @@ -635,7 +635,18 @@ void lv2_generate_ttl(const char* const basename) plugin.loadProgram(i); - presetString = "<" DISTRHO_PLUGIN_URI + presetSeparator + "preset" + strBuf + ">\n"; + presetString = "<" DISTRHO_PLUGIN_URI + presetSeparator + "preset" + strBuf + ">\n"; + +# if DISTRHO_PLUGIN_WANT_FULL_STATE + if (numParameters == 0 && numStates == 0) +#else + if (numParameters == 0) +#endif + { + presetString += " ."; + presetsString += presetString; + continue; + } # if DISTRHO_PLUGIN_WANT_FULL_STATE presetString += " state:state [\n"; @@ -658,12 +669,22 @@ void lv2_generate_ttl(const char* const basename) presetString += " ] .\n\n"; # endif + bool firstParameter = true; + for (uint32_t j=0; j