@@ -1840,29 +1840,28 @@ private: | |||||
void addParameters() | void addParameters() | ||||
{ | { | ||||
juceParameters.update (*juceFilter, forceUseLegacyParamIDs); | juceParameters.update (*juceFilter, forceUseLegacyParamIDs); | ||||
// check if all parameters are managed? | |||||
const int numParams = juceParameters.getNumParameters(); | 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<int32> (auParamID))); | |||||
Globals()->UseIndexedParameters (numParams); | |||||
} | |||||
else | |||||
{ | |||||
for (auto* param : juceParameters.params) | |||||
{ | |||||
const AudioUnitParameterID auParamID = generateAUParameterID (param); | |||||
auParamIDs.add (auParamID); | |||||
paramMap.set (static_cast<int32> (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<int32> (auParamID))); | |||||
if (juceParameters.isUsingManagedParameters()) | |||||
auParamIDs.add (auParamID); | |||||
paramMap.set (static_cast<int32> (auParamID), param); | |||||
Globals()->SetParameter (auParamID, param->getValue()); | Globals()->SetParameter (auParamID, param->getValue()); | ||||
} | |||||
} | } | ||||
if (! juceParameters.isUsingManagedParameters()) | |||||
Globals()->UseIndexedParameters (numParams); | |||||
#if JUCE_DEBUG | #if JUCE_DEBUG | ||||
// Some hosts can't handle the huge numbers of discrete parameter values created when | // Some hosts can't handle the huge numbers of discrete parameter values created when | ||||
// using the default number of steps. | // using the default number of steps. | ||||
@@ -1917,14 +1916,14 @@ private: | |||||
paramHash &= ~(1 << (sizeof (AudioUnitParameterID) * 8 - 1)); | paramHash &= ~(1 << (sizeof (AudioUnitParameterID) * 8 - 1)); | ||||
#endif | #endif | ||||
return juceParameters.isUsingManagedParameters() ? paramHash | |||||
: static_cast<AudioUnitParameterID> (juceParamID.getIntValue()); | |||||
return forceUseLegacyParamIDs ? static_cast<AudioUnitParameterID> (juceParamID.getIntValue()) | |||||
: paramHash; | |||||
} | } | ||||
inline AudioUnitParameterID getAUParameterIDForIndex (int paramIndex) const noexcept | inline AudioUnitParameterID getAUParameterIDForIndex (int paramIndex) const noexcept | ||||
{ | { | ||||
return juceParameters.isUsingManagedParameters() ? auParamIDs.getReference (paramIndex) | |||||
: static_cast<AudioUnitParameterID> (paramIndex); | |||||
return forceUseLegacyParamIDs ? static_cast<AudioUnitParameterID> (paramIndex) | |||||
: auParamIDs.getReference (paramIndex); | |||||
} | } | ||||
AudioProcessorParameter* getParameterForAUParameterID (AudioUnitParameterID address) const noexcept | AudioProcessorParameter* getParameterForAUParameterID (AudioUnitParameterID address) const noexcept | ||||
@@ -1238,8 +1238,7 @@ private: | |||||
} | } | ||||
} | } | ||||
AUParameterAddress address = forceLegacyParamIDs ? static_cast<AUParameterAddress> (idx) | |||||
: generateAUParameterAddress (juceParam); | |||||
AUParameterAddress address = generateAUParameterAddress (juceParam); | |||||
#if ! JUCE_FORCE_LEGACY_PARAMETER_AUTOMATION_TYPE | #if ! JUCE_FORCE_LEGACY_PARAMETER_AUTOMATION_TYPE | ||||
// Consider yourself very unlucky if you hit this assertion. The hash codes of your | // Consider yourself very unlucky if you hit this assertion. The hash codes of your | ||||
@@ -1570,30 +1569,37 @@ private: | |||||
} | } | ||||
void parameterGestureChanged (int, bool) override {} | void parameterGestureChanged (int, bool) override {} | ||||
//============================================================================== | //============================================================================== | ||||
#if JUCE_FORCE_USE_LEGACY_PARAM_IDS | |||||
inline AUParameterAddress getAUParameterAddressForIndex (int paramIndex) const noexcept { return static_cast<AUParameterAddress> (paramIndex); } | |||||
inline int getJuceParameterIndexForAUAddress (AUParameterAddress address) const noexcept { return static_cast<int> (address); } | |||||
#else | |||||
inline AUParameterAddress getAUParameterAddressForIndex (int paramIndex) const noexcept | inline AUParameterAddress getAUParameterAddressForIndex (int paramIndex) const noexcept | ||||
{ | { | ||||
return juceParameters.isUsingManagedParameters() ? paramAddresses.getReference (paramIndex) | |||||
: static_cast<AUParameterAddress> (paramIndex); | |||||
#if JUCE_FORCE_USE_LEGACY_PARAM_IDS | |||||
return static_cast<AUParameterAddress> (paramIndex); | |||||
#else | |||||
return paramAddresses.getReference (paramIndex); | |||||
#endif | |||||
} | } | ||||
inline int getJuceParameterIndexForAUAddress (AUParameterAddress address) const noexcept | inline int getJuceParameterIndexForAUAddress (AUParameterAddress address) const noexcept | ||||
{ | { | ||||
return juceParameters.isUsingManagedParameters() ? paramMap[static_cast<int64> (address)] | |||||
: static_cast<int> (address); | |||||
#if JUCE_FORCE_USE_LEGACY_PARAM_IDS | |||||
return static_cast<int> (address); | |||||
#else | |||||
return paramMap[static_cast<int64> (address)]; | |||||
#endif | |||||
} | } | ||||
#endif | |||||
AUParameterAddress generateAUParameterAddress (AudioProcessorParameter* param) const | AUParameterAddress generateAUParameterAddress (AudioProcessorParameter* param) const | ||||
{ | { | ||||
const String& juceParamID = LegacyAudioParameter::getParamID (param, forceLegacyParamIDs); | const String& juceParamID = LegacyAudioParameter::getParamID (param, forceLegacyParamIDs); | ||||
return juceParameters.isUsingManagedParameters() ? static_cast<AUParameterAddress> (juceParamID.hashCode64()) | |||||
: static_cast<AUParameterAddress> (juceParamID.getIntValue()); | |||||
#if JUCE_FORCE_USE_LEGACY_PARAM_IDS | |||||
auto result = juceParamID.getIntValue(); | |||||
#else | |||||
auto result = juceParamID.hashCode64(); | |||||
#endif | |||||
return static_cast<AUParameterAddress> (result); | |||||
} | } | ||||
AudioProcessorParameter* getJuceParameterForAUAddress (AUParameterAddress address) const noexcept | AudioProcessorParameter* getJuceParameterForAUAddress (AUParameterAddress address) const noexcept | ||||
@@ -104,15 +104,14 @@ public: | |||||
JUCE_DECLARE_VST3_COM_REF_METHODS | JUCE_DECLARE_VST3_COM_REF_METHODS | ||||
//============================================================================== | //============================================================================== | ||||
#if JUCE_FORCE_USE_LEGACY_PARAM_IDS | |||||
inline Vst::ParamID getVSTParamIDForIndex (int paramIndex) const noexcept { return static_cast<Vst::ParamID> (paramIndex); } | |||||
#else | |||||
inline Vst::ParamID getVSTParamIDForIndex (int paramIndex) const noexcept | inline Vst::ParamID getVSTParamIDForIndex (int paramIndex) const noexcept | ||||
{ | { | ||||
return isUsingManagedParameters() ? vstParamIDs.getReference (paramIndex) | |||||
: static_cast<Vst::ParamID> (paramIndex); | |||||
#if JUCE_FORCE_USE_LEGACY_PARAM_IDS | |||||
return static_cast<Vst::ParamID> (paramIndex); | |||||
#else | |||||
return vstParamIDs.getReference (paramIndex); | |||||
#endif | |||||
} | } | ||||
#endif | |||||
AudioProcessorParameter* getParamForVSTParamID (Vst::ParamID paramID) const noexcept | AudioProcessorParameter* getParamForVSTParamID (Vst::ParamID paramID) const noexcept | ||||
{ | { | ||||
@@ -205,6 +204,10 @@ private: | |||||
Vst::ParamID generateVSTParamIDForParam (AudioProcessorParameter* param) | Vst::ParamID generateVSTParamIDForParam (AudioProcessorParameter* param) | ||||
{ | { | ||||
auto juceParamID = LegacyAudioParameter::getParamID (param, false); | auto juceParamID = LegacyAudioParameter::getParamID (param, false); | ||||
#if JUCE_FORCE_USE_LEGACY_PARAM_IDS | |||||
return static_cast<Vst::ParamID> (juceParamID.getIntValue()); | |||||
#else | |||||
auto paramHash = static_cast<Vst::ParamID> (juceParamID.hashCode()); | auto paramHash = static_cast<Vst::ParamID> (juceParamID.hashCode()); | ||||
#if JUCE_USE_STUDIO_ONE_COMPATIBLE_PARAMETERS | #if JUCE_USE_STUDIO_ONE_COMPATIBLE_PARAMETERS | ||||
@@ -212,8 +215,8 @@ private: | |||||
paramHash &= ~(1 << (sizeof (Vst::ParamID) * 8 - 1)); | paramHash &= ~(1 << (sizeof (Vst::ParamID) * 8 - 1)); | ||||
#endif | #endif | ||||
return isUsingManagedParameters() ? paramHash | |||||
: static_cast<Vst::ParamID> (juceParamID.getIntValue()); | |||||
return paramHash; | |||||
#endif | |||||
} | } | ||||
//============================================================================== | //============================================================================== | ||||
@@ -389,7 +392,11 @@ public: | |||||
void toString (Vst::ParamValue value, Vst::String128 result) const override | 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 | bool fromString (const Vst::TChar* text, Vst::ParamValue& outValueNormalized) const override | ||||
@@ -718,7 +725,7 @@ private: | |||||
if (parameters.getParameterCount() <= 0) | if (parameters.getParameterCount() <= 0) | ||||
{ | { | ||||
#if JUCE_FORCE_USE_LEGACY_PARAM_IDS | |||||
#if JUCE_FORCE_USE_LEGACY_PARAM_IDS | |||||
const bool forceLegacyParamIDs = true; | const bool forceLegacyParamIDs = true; | ||||
#else | #else | ||||
const bool forceLegacyParamIDs = false; | const bool forceLegacyParamIDs = false; | ||||