From 5dfae8b58b93e511b1e15b2287eef6054a619fb8 Mon Sep 17 00:00:00 2001 From: reuk Date: Tue, 31 Aug 2021 12:27:07 +0100 Subject: [PATCH] VST3 Host: Update parameter values after plugin requests restart with kParamValuesChanged --- .../format_types/juce_AudioUnitPluginFormat.mm | 1 - .../format_types/juce_VST3PluginFormat.cpp | 12 ++++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm b/modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm index 400f0e74ff..1c55eceb9f 100644 --- a/modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm +++ b/modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm @@ -1732,7 +1732,6 @@ private: #if JUCE_MAC void addPropertyChangeListener (AudioUnitPropertyID type) const { - AudioUnitEvent event; event.mEventType = kAudioUnitEvent_PropertyChange; event.mArgument.mProperty.mPropertyID = type; diff --git a/modules/juce_audio_processors/format_types/juce_VST3PluginFormat.cpp b/modules/juce_audio_processors/format_types/juce_VST3PluginFormat.cpp index cc5f29f053..6b16c4aea4 100644 --- a/modules/juce_audio_processors/format_types/juce_VST3PluginFormat.cpp +++ b/modules/juce_audio_processors/format_types/juce_VST3PluginFormat.cpp @@ -328,7 +328,7 @@ struct VST3HostContext : public Vst::IComponentHandler, // From VST V3.0.0 attributeList = new AttributeList (this); } - virtual ~VST3HostContext() override {} + ~VST3HostContext() override = default; JUCE_DECLARE_VST3_COM_REF_METHODS @@ -2883,11 +2883,16 @@ public: jassert (editController != nullptr); warnOnFailureIfImplemented (editController->setComponentState (&stream)); + resetParameters(); + } + void resetParameters() + { for (auto* parameter : getParameters()) { auto* vst3Param = static_cast (parameter); - vst3Param->setValueWithoutUpdatingProcessor ((float) editController->getParamNormalized (vst3Param->getParamID())); + const auto value = (float) editController->getParamNormalized (vst3Param->getParamID()); + vst3Param->setValueWithoutUpdatingProcessor (value); } } @@ -3505,6 +3510,9 @@ void VST3HostContext::restartComponentOnMessageThread (int32 flags) if (hasFlag (flags, Vst::kMidiCCAssignmentChanged)) plugin->updateMidiMappings(); + if (hasFlag (flags, Vst::kParamValuesChanged)) + plugin->resetParameters(); + plugin->updateHostDisplay (AudioProcessorListener::ChangeDetails().withProgramChanged (true) .withParameterInfoChanged (true)); }