Cubase 9.5.20 / 64 bit/ Windows
latest juce/develop
VST3
(double checked with JuceDemoPlugin)
once a parameter is not null, cubase will send processParameterChanges for it with every callback.
this is NOT the natural cubase behaviour
–> this is caused by a problem from the VST3 Wrapper
because in JuceVST3Component::processParameterChanges
this line will be called
param->sendValueChangedMessageToListeners (floatValue);
which calls the
l->audioProcessorParameterChanged (processor, getParameterIndex(), newValue);
and then again will result calling
JuceVST3EditController::audioProcessorParameterChanged
and then might because of rounding errors (because juce unfortunately uses the non-normalized as basis which is a design mistake), or whatever, cubase again sends a parameter change with the next callback.
This can be solved easily, by not calling the AudioProcessorListener every-time cubase sends a parameter change, only call AudioProcessorParameter::Listener inside AudioProcessorParameter::sendValueChangedMessageToListeners
Maybe add a bool parameter, to control if the AudioProcessorListener also should be called, and use false if its called from JuceVST3Component::processParameterChanges
The current behaviour causes weird bugs, restore the plugin-state will not always work (A/B compare), because of the massive pseudo parameter changes which come from the audio-callback will interact wrongly with the GUI-classes.
Please check also the other wrappers, which may have the same problem.