Meter values as readonly parameters in VST3 plug-ins

I’ve run into an issue with VST3 plug-ins in Tracktion / Waveform (but this looks like a JUCE framework issue). I currently pass meter values from my plug-in’s processing to the host using read-only parameters (as described in both the VST3 SDK and the example ‘Again’ in the SDK). For example - from AGain:

IParameterChanges* paramChanges = data.outputParameterChanges;
// a new value of VuMeter will be send to the host 
// (the host will send it back in sync to our controller for updating our editor)
if (paramChanges && fVuPPMOld != fVuPPM)
{
	int32 index = 0;
	IParamValueQueue* paramQueue = paramChanges->addParameterData (kVuPPMId, index);
	if (paramQueue)
	{
		int32 index2 = 0;
		paramQueue->addPoint (0, fVuPPM, index2); 
	}
}
fVuPPMOld = fVuPPM;

This works in every host I’ve tried except JUCE / Waveform. It appears that the parameter change (meter update) is passed to the host, but the host does not forward it on to the plug-in’s ‘controller’ code, therefore the new values are not passed to the plug-in UI / view. The example ‘AGain’ plug-in fails in the same way. Is there some special incantation required to make this method work in JUICE based hosts?

1 Like

Unfortunately you’ll need more than an incantation - at the moment JUCE’s hosting code doesn’t support incoming meter values. I’ll have a look at this over the next few days.

In addition to AGain, which of your plug-ins would be best to test this?

The VST3 version of my DYN500 plug-in also shows the problem (it uses the same mechanism for the meters)

https://www.overtonedsp.co.uk/download/download_dyn500/

(from a quick look at the JUCE plug-in host it appeared to me that it wasn’t reading the output parameters after calling the plug-in’s ‘process’ function - which appears to be confirmed by what you say, or at least related to the issue. There are other methods - for example I already use the VST3 IMessage interface for passing more complex data like FFT buffers etc, but I was hoping to avoid the overhead - and extra complexity - that requires, just for the sake of a gain reduction or level meter).

I’ve just made these changes, which enable JUCE-based hosts to pass the metering values correctly.

Thanks for your help - I’ll take a look.