From 20ced1662e7dfb758e747210a5cae623693c52a2 Mon Sep 17 00:00:00 2001 From: Tom Poole Date: Tue, 17 Apr 2018 16:29:57 +0100 Subject: [PATCH] Fixed some issues with plug-in parameter IDs --- .../AU/juce_AU_Wrapper.mm | 37 +++++++++---------- .../AU/juce_AUv3_Wrapper.mm | 32 +++++++++------- .../VST3/juce_VST3_Wrapper.cpp | 27 +++++++++----- 3 files changed, 54 insertions(+), 42 deletions(-) diff --git a/modules/juce_audio_plugin_client/AU/juce_AU_Wrapper.mm b/modules/juce_audio_plugin_client/AU/juce_AU_Wrapper.mm index 835959cbfb..2fd362f3c2 100644 --- a/modules/juce_audio_plugin_client/AU/juce_AU_Wrapper.mm +++ b/modules/juce_audio_plugin_client/AU/juce_AU_Wrapper.mm @@ -1840,29 +1840,28 @@ private: void addParameters() { juceParameters.update (*juceFilter, forceUseLegacyParamIDs); - - // check if all parameters are managed? const int numParams = juceParameters.getNumParameters(); - for (auto* param : juceParameters.params) + if (forceUseLegacyParamIDs) { - const AudioUnitParameterID auParamID = generateAUParameterID (param); - - // Consider yourself very unlucky if you hit this assertion. The hash code of your - // parameter ids are not unique. - jassert (! paramMap.contains (static_cast (auParamID))); + Globals()->UseIndexedParameters (numParams); + } + else + { + for (auto* param : juceParameters.params) + { + const AudioUnitParameterID auParamID = generateAUParameterID (param); - auParamIDs.add (auParamID); - paramMap.set (static_cast (auParamID), param); + // Consider yourself very unlucky if you hit this assertion. The hash code of your + // parameter ids are not unique. + jassert (! paramMap.contains (static_cast (auParamID))); - if (juceParameters.isUsingManagedParameters()) + auParamIDs.add (auParamID); + paramMap.set (static_cast (auParamID), param); Globals()->SetParameter (auParamID, param->getValue()); + } } - if (! juceParameters.isUsingManagedParameters()) - Globals()->UseIndexedParameters (numParams); - - #if JUCE_DEBUG // Some hosts can't handle the huge numbers of discrete parameter values created when // using the default number of steps. @@ -1917,14 +1916,14 @@ private: paramHash &= ~(1 << (sizeof (AudioUnitParameterID) * 8 - 1)); #endif - return juceParameters.isUsingManagedParameters() ? paramHash - : static_cast (juceParamID.getIntValue()); + return forceUseLegacyParamIDs ? static_cast (juceParamID.getIntValue()) + : paramHash; } inline AudioUnitParameterID getAUParameterIDForIndex (int paramIndex) const noexcept { - return juceParameters.isUsingManagedParameters() ? auParamIDs.getReference (paramIndex) - : static_cast (paramIndex); + return forceUseLegacyParamIDs ? static_cast (paramIndex) + : auParamIDs.getReference (paramIndex); } AudioProcessorParameter* getParameterForAUParameterID (AudioUnitParameterID address) const noexcept 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 80f7a2c684..1a6e14dc56 100644 --- a/modules/juce_audio_plugin_client/AU/juce_AUv3_Wrapper.mm +++ b/modules/juce_audio_plugin_client/AU/juce_AUv3_Wrapper.mm @@ -1238,8 +1238,7 @@ private: } } - AUParameterAddress address = forceLegacyParamIDs ? static_cast (idx) - : generateAUParameterAddress (juceParam); + AUParameterAddress address = generateAUParameterAddress (juceParam); #if ! JUCE_FORCE_LEGACY_PARAMETER_AUTOMATION_TYPE // Consider yourself very unlucky if you hit this assertion. The hash codes of your @@ -1570,30 +1569,37 @@ private: } void parameterGestureChanged (int, bool) override {} + //============================================================================== - #if JUCE_FORCE_USE_LEGACY_PARAM_IDS - inline AUParameterAddress getAUParameterAddressForIndex (int paramIndex) const noexcept { return static_cast (paramIndex); } - inline int getJuceParameterIndexForAUAddress (AUParameterAddress address) const noexcept { return static_cast (address); } - #else inline AUParameterAddress getAUParameterAddressForIndex (int paramIndex) const noexcept { - return juceParameters.isUsingManagedParameters() ? paramAddresses.getReference (paramIndex) - : static_cast (paramIndex); + #if JUCE_FORCE_USE_LEGACY_PARAM_IDS + return static_cast (paramIndex); + #else + return paramAddresses.getReference (paramIndex); + #endif } inline int getJuceParameterIndexForAUAddress (AUParameterAddress address) const noexcept { - return juceParameters.isUsingManagedParameters() ? paramMap[static_cast (address)] - : static_cast (address); + #if JUCE_FORCE_USE_LEGACY_PARAM_IDS + return static_cast (address); + #else + return paramMap[static_cast (address)]; + #endif } - #endif AUParameterAddress generateAUParameterAddress (AudioProcessorParameter* param) const { const String& juceParamID = LegacyAudioParameter::getParamID (param, forceLegacyParamIDs); - return juceParameters.isUsingManagedParameters() ? static_cast (juceParamID.hashCode64()) - : static_cast (juceParamID.getIntValue()); + #if JUCE_FORCE_USE_LEGACY_PARAM_IDS + auto result = juceParamID.getIntValue(); + #else + auto result = juceParamID.hashCode64(); + #endif + + return static_cast (result); } AudioProcessorParameter* getJuceParameterForAUAddress (AUParameterAddress address) const noexcept diff --git a/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp b/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp index f2abf7b4b5..ec5f7baf1e 100644 --- a/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp +++ b/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp @@ -104,15 +104,14 @@ public: JUCE_DECLARE_VST3_COM_REF_METHODS //============================================================================== - #if JUCE_FORCE_USE_LEGACY_PARAM_IDS - inline Vst::ParamID getVSTParamIDForIndex (int paramIndex) const noexcept { return static_cast (paramIndex); } - #else inline Vst::ParamID getVSTParamIDForIndex (int paramIndex) const noexcept { - return isUsingManagedParameters() ? vstParamIDs.getReference (paramIndex) - : static_cast (paramIndex); + #if JUCE_FORCE_USE_LEGACY_PARAM_IDS + return static_cast (paramIndex); + #else + return vstParamIDs.getReference (paramIndex); + #endif } - #endif AudioProcessorParameter* getParamForVSTParamID (Vst::ParamID paramID) const noexcept { @@ -205,6 +204,10 @@ private: Vst::ParamID generateVSTParamIDForParam (AudioProcessorParameter* param) { auto juceParamID = LegacyAudioParameter::getParamID (param, false); + + #if JUCE_FORCE_USE_LEGACY_PARAM_IDS + return static_cast (juceParamID.getIntValue()); + #else auto paramHash = static_cast (juceParamID.hashCode()); #if JUCE_USE_STUDIO_ONE_COMPATIBLE_PARAMETERS @@ -212,8 +215,8 @@ private: paramHash &= ~(1 << (sizeof (Vst::ParamID) * 8 - 1)); #endif - return isUsingManagedParameters() ? paramHash - : static_cast (juceParamID.getIntValue()); + return paramHash; + #endif } //============================================================================== @@ -389,7 +392,11 @@ public: void toString (Vst::ParamValue value, Vst::String128 result) const override { - toString128 (result, param.getText ((float) value, 128)); + if (LegacyAudioParameter::isLegacy (¶m)) + // remain backward-compatible with old JUCE code + toString128 (result, param.getCurrentValueAsText()); + else + toString128 (result, param.getText ((float) value, 128)); } bool fromString (const Vst::TChar* text, Vst::ParamValue& outValueNormalized) const override @@ -718,7 +725,7 @@ private: if (parameters.getParameterCount() <= 0) { - #if JUCE_FORCE_USE_LEGACY_PARAM_IDS + #if JUCE_FORCE_USE_LEGACY_PARAM_IDS const bool forceLegacyParamIDs = true; #else const bool forceLegacyParamIDs = false;