Hosting VST3 with JUCE: getting incorrect parameter reference from specific VST3 plugins

Hi,
we developed a host plugin for VST, AU and VST3. We are using JUCE 6.0.7.
When hosting specific VST3 plugins (and a few AU) the reference to the parameter given from JUCE when trying to a get a specific parameter is not the parameter chosen.
We get the parameter reference by clicking on the hosted plugin’s parameter.
For example, trying to link the Cutoff Freq. it links the LFO rate. Trying to link the Attack, links the Release and so on.

This happens only with all VST3 U-he plugins and a few AU. VST2 is linking correctly. Although, U-he plugins link correctly in all DAWs and other hosts.
We noticed that other hosting plugins/apps made with JUCE have the same issue.

We reached out to U-He and they were kind enough to give us some insights,
“The id you’re looking for is the first member of the Steinberg::Vst::ParameterInfo structure you get via AM_VST3_Processor::getParameterInfo.”

It seems that In VST3 the identifying index is defined by “id” field in the Steinberg::Vst::ParameterInfo structure, which can diverge from the order in which parameters are reported to the host.

Any idea of what may be causing this and any advice on how to solve it?

Thank you very much!
Em

1 Like

I fixed a similar-sounding bug about a month ago:

Could you try testing with the current JUCE develop branch and see whether the issue is resolved?

Thank much, we will try this out and post an update.

YES!!!
that fixed it. We only tested on Windows so far, but will test on Mac tomorrow.
I think some AUs were having the same issue, i am not sure if this change will fix them as well.
Will post the findings soon.
So, from our tests, this fixed the issue with U-He plugins and Fabfilter Pro-Q3 adding a second band (probably because these parameters are added as more bands are added in the plugin)
Thanks much!

Great, glad it seems to solve the issue.

The patch above won’t affect audio unit hosting. If you run into any problems with audio units on the develop branch, please create a new issue and let us know which plugins are broken, and in what way.

We tried to build on mac using the JUCE 6.0.8 4c133c2 develop but we get this error:
JUCE/modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm:1304:41: error: no matching constructor for initialization of ‘CFObjectHolder’ (aka ‘CFObjectHolder<const __CFString *>’)
CFObjectHolder contextName { properties.name.toCFString() };

Any ideas on how to fix this one?
Thanks much!

We’ve not seen that on our CI systems. Which version of Xcode are you using? Which C++ language standard are you targeting?

We are using Xcode 12.5, C++ 20 via cmake on Clion.

We added 2 constructors in juce_mac_CFHelpers.h so that we can build.
CFObjectHolder(CFStringRef pString) {

}

CFObjectHolder(CFPropertyListRef pVoid) {

}

We were able to build the plugins and tested the original issue with the wrong linked parameters and the problem is resolved.