Browse Source

Added parameter listener callbacks when a plug-in host changes a parameter

tags/2021-05-28
Tom Poole 7 years ago
parent
commit
107ba1fd69
6 changed files with 102 additions and 19 deletions
  1. +18
    -3
      modules/juce_audio_plugin_client/AAX/juce_AAX_Wrapper.cpp
  2. +13
    -2
      modules/juce_audio_plugin_client/AU/juce_AU_Wrapper.mm
  3. +17
    -6
      modules/juce_audio_plugin_client/AU/juce_AUv3_Wrapper.mm
  4. +16
    -1
      modules/juce_audio_plugin_client/RTAS/juce_RTAS_Wrapper.cpp
  5. +15
    -4
      modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp
  6. +23
    -3
      modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp

+ 18
- 3
modules/juce_audio_plugin_client/AAX/juce_AAX_Wrapper.cpp View File

@@ -780,12 +780,25 @@ namespace AAXClasses
return AAX_SUCCESS;
}
void setAudioProcessorParameter (int index, float value)
{
if (auto* param = pluginInstance->getParameters()[index])
{
param->setValue (value);
param->sendValueChangedMessageToListeners (value);
}
else
{
pluginInstance->setParameter (index, value);
}
}
AAX_Result UpdateParameterNormalizedValue (AAX_CParamID paramID, double value, AAX_EUpdateSource source) override
{
auto result = AAX_CEffectParameters::UpdateParameterNormalizedValue (paramID, value, source);
if (! isBypassParam (paramID))
pluginInstance->setParameter (getParamIndexFromID (paramID), (float) value);
setAudioProcessorParameter (getParamIndexFromID (paramID), (float) value);
return result;
}
@@ -856,7 +869,8 @@ namespace AAXClasses
if (auto* p = mParameterManager.GetParameterByID (paramID))
p->SetValueWithFloat ((float) newValue);
pluginInstance->setParameter (getParamIndexFromID (paramID), (float) newValue);
setAudioProcessorParameter (getParamIndexFromID (paramID), (float) newValue);
return AAX_SUCCESS;
}
@@ -867,7 +881,8 @@ namespace AAXClasses
auto paramIndex = getParamIndexFromID (paramID);
auto newValue = pluginInstance->getParameter (paramIndex) + (float) newDeltaValue;
pluginInstance->setParameter (paramIndex, jlimit (0.0f, 1.0f, newValue));
setAudioProcessorParameter (paramIndex, jlimit (0.0f, 1.0f, newValue));
if (auto* p = mParameterManager.GetParameterByID (paramID))
p->SetValueWithFloat (newValue);


+ 13
- 2
modules/juce_audio_plugin_client/AU/juce_AU_Wrapper.mm View File

@@ -957,8 +957,19 @@ public:
{
if (inScope == kAudioUnitScope_Global && juceFilter != nullptr)
{
const auto index = getJuceIndexForAUParameterID (inID);
juceFilter->setParameter (index, inValue / getMaximumParameterValue (index));
auto index = getJuceIndexForAUParameterID (inID);
auto value = inValue / getMaximumParameterValue (index);
if (auto* param = juceFilter->getParameters()[index])
{
param->setValue (value);
param->sendValueChangedMessageToListeners (value);
}
else
{
juceFilter->setParameter (index, value);
}
return noErr;
}


+ 17
- 6
modules/juce_audio_plugin_client/AU/juce_AUv3_Wrapper.mm View File

@@ -1251,6 +1251,19 @@ private:
}
}
void setAudioProcessorParameter (int index, float value)
{
if (auto* param = getAudioProcessor().getParameters()[index])
{
param->setValue (value);
param->sendValueChangedMessageToListeners (value);
}
else if (isPositiveAndBelow (index, getAudioProcessor().getNumParameters()))
{
getAudioProcessor().setParameter (index, value);
}
}
void addPresets()
{
factoryPresets = [[NSMutableArray<AUAudioUnitPreset*> alloc] init];
@@ -1303,8 +1316,7 @@ private:
const AUParameterEvent& paramEvent = event->parameter;
const int idx = getJuceParameterIndexForAUAddress (paramEvent.parameterAddress);
if (isPositiveAndBelow (idx, numParams))
getAudioProcessor().setParameter (idx, paramEvent.value);
setAudioProcessorParameter (idx, paramEvent.value);
}
break;
@@ -1450,11 +1462,10 @@ private:
{
if (param != nullptr)
{
const int idx = getJuceParameterIndexForAUAddress ([param address]);
auto& processor = getAudioProcessor();
int idx = getJuceParameterIndexForAUAddress ([param address]);
auto normalisedValue = value / getMaximumParameterValue (idx);
if (isPositiveAndBelow (idx, processor.getNumParameters()))
processor.setParameter (idx, value / getMaximumParameterValue (idx));
setAudioProcessorParameter (idx, normalisedValue);
}
}


+ 16
- 1
modules/juce_audio_plugin_client/RTAS/juce_RTAS_Wrapper.cpp View File

@@ -685,9 +685,24 @@ public:
ComponentResult UpdateControlValue (long controlIndex, long value) override
{
if (controlIndex != bypassControlIndex)
juceFilter->setParameter (controlIndex - 2, longToFloat (value));
{
auto paramIndex = controlIndex - 2;
auto floatValue = longToFloat (value);
if (auto* param = owner.getParameters()[paramIndex])
{
param->setValue (floatValue);
param->sendValueChangedMessageToListeners (floatValue);
}
else
{
juceFilter->setParameter (paramIndex, floatValue);
}
}
else
{
mBypassed = (value > 0);
}
return CProcess::UpdateControlValue (controlIndex, value);
}


+ 15
- 4
modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp View File

@@ -720,8 +720,16 @@ public:
{
if (processor != nullptr)
{
jassert (isPositiveAndBelow (index, processor->getNumParameters()));
processor->setParameter (index, value);
if (auto* param = processor->getParameters()[index])
{
param->setValue (value);
param->sendValueChangedMessageToListeners (value);
}
else
{
jassert (isPositiveAndBelow (index, processor->getNumParameters()));
processor->setParameter (index, value);
}
}
}
@@ -1816,9 +1824,12 @@ private:
{
jassert (isPositiveAndBelow (args.index, processor->getNumParameters()));
if (auto* p = processor->getParameters()[args.index])
if (auto* param = processor->getParameters()[args.index])
{
processor->setParameter (args.index, p->getValueForText (String::fromUTF8 ((char*) args.ptr)));
auto value = param->getValueForText (String::fromUTF8 ((char*) args.ptr));
param->setValue (value);
param->sendValueChangedMessageToListeners (value);
return 1;
}
}


+ 23
- 3
modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp View File

@@ -246,7 +246,19 @@ public:
// otherwise we get parallel streams of parameter value updates
// during playback
if (owner.vst3IsPlaying.get() == 0)
owner.setParameter (paramIndex, static_cast<float> (v));
{
auto value = static_cast<float> (v);
if (auto* param = owner.getParameters()[paramIndex])
{
param->setValue (value);
param->sendValueChangedMessageToListeners (value);
}
else
{
owner.setParameter (paramIndex, value);
}
}
changed();
return true;
@@ -1998,9 +2010,17 @@ public:
else
{
auto index = getJuceIndexForVSTParamID (vstParamID);
auto floatValue = static_cast<float> (value);
if (isPositiveAndBelow (index, pluginInstance->getNumParameters()))
pluginInstance->setParameter (index, static_cast<float> (value));
if (auto* param = pluginInstance->getParameters()[index])
{
param->setValue (floatValue);
param->sendValueChangedMessageToListeners (floatValue);
}
else if (isPositiveAndBelow (index, pluginInstance->getNumParameters()))
{
pluginInstance->setParameter (index, floatValue);
}
}
}
}


Loading…
Cancel
Save