@@ -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<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()); | |||
} | |||
} | |||
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<AudioUnitParameterID> (juceParamID.getIntValue()); | |||
return forceUseLegacyParamIDs ? static_cast<AudioUnitParameterID> (juceParamID.getIntValue()) | |||
: paramHash; | |||
} | |||
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 | |||
@@ -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 | |||
// 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<AUParameterAddress> (paramIndex); } | |||
inline int getJuceParameterIndexForAUAddress (AUParameterAddress address) const noexcept { return static_cast<int> (address); } | |||
#else | |||
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 | |||
{ | |||
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 | |||
{ | |||
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 | |||
@@ -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<Vst::ParamID> (paramIndex); } | |||
#else | |||
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 | |||
{ | |||
@@ -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<Vst::ParamID> (juceParamID.getIntValue()); | |||
#else | |||
auto paramHash = static_cast<Vst::ParamID> (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<Vst::ParamID> (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; | |||