VST3 parameter name changes don't work


#1

There is a problem in the VST3 wrapper, that prevents parameter name changes to be propagated to the host. The VST parameter table is created in setupParameters, but they are never updated. Any plugin that changes their parameter names after load will not work properly with this.


#2

I have temporarily fixed the problem by changing two files, that I should not touch:

juce_VST3_Wrapper.cpp overriding the getInfo methods in the Param class, which are defined in Vst::Parameter:

	const Steinberg::Vst::ParameterInfo& getInfo () const override
	{
		toString128 (const_cast<Param*>(this)->info.title, owner.getParameterName (paramIndex));
		toString128 (const_cast<Param*>(this)->info.shortTitle, owner.getParameterName (paramIndex, 8));
		toString128 (const_cast<Param*>(this)->info.units, owner.getParameterLabel (paramIndex));
		return info;
	}

	Steinberg::Vst::ParameterInfo& getInfo () override
	{
		toString128 (info.title, owner.getParameterName (paramIndex));
		toString128 (info.shortTitle, owner.getParameterName (paramIndex, 8));
		toString128 (info.units, owner.getParameterLabel (paramIndex));
		return info;
	}

and adding the information that parameter titles changed, when notifying the host about plugin changes.

        componentHandler->restartComponent (Vst::kLatencyChanged | Vst::kParamValuesChanged | Vst::kParamTitlesChanged);

and vstparameters.h making getInfo virtual, so I can override it

virtual const ParameterInfo& getInfo () const {return info;}
virtual ParameterInfo& getInfo () {return info;}

Steinberg might be so kind to update their SDK with this change and ROLI to consider this fix to be included in JUCE.

Thanks


#3

We’re not going to add anything that requires modifying the VST3 SDK. Whilst a copy of the SDK is now included inside the JUCE repo, JUCE users are also free to use their own. Anything that changes the interface is going to cause problems.

One way of achieving the same result without modifying the SDK would be to use ParameterInfo& getInfo() or write to the info member directly. The trouble with this is that there isn’t a mechanism in JUCE for indicating that the parameter data has changed…


#4

I discussed this Yvan Grabit and he confirmed that this change will make it into the VST3 SDK.

I am sure there are other ways to fix it, but this clearly is a problem in JUCE right now. Parameter name changes are not picked up by the JUCE VST3 Wrapper, like it does in the VST2 and AU wrappers. I consider this an issue that needs addressing, as name changes is the only way to update the parameter array exposed to the host. I could not find a way to fix it without changing JUCE and the VST3 SDK. So any fix, I did not see is more then welcome.