I’m using the plug-in hosting in my application for VST2 and VST3 plugins and I’m facing plug-ins support issues in terms of IO setup / capabilities detection from some manufacturers.
I contacted one of the manufacturer to discuss the issue with his VST2 and VST3 plug-ins and had to admit that he is totally compliant with the specifications of the calling sequences of both Steinberg SDKs. But I’m afraid JUCE hosting is not…
- For VST2, the SDK describes the SpeakerArrangement negociation as follows :
- if successful: end of story
- if not: call getSpeakerArrangement(…) and call again setSpeakerArrangement(…) with the retrieved layout.
What JUCE does is:
getSpeakerArrangement(…) (pluginHasDefaultChannelLayouts call)
if unsuccessful getPinProperties() (still in pluginHasDefaultChannelLayouts call)
if still unsuccessful in retrieving a speaker arrangement, finally call setSpeakerArrangement(.) based on the cannonical audioChannelSet for the number of IO.
if unsuccessful, assumes empty IO speaker arrangement and consider that each channel is a mono bus (which is wrong)
Now think of a one bus 8 channels plug-in which return false for getSpeakerArrangement(…) (e.g. a plug-in which can deal with any layout as long in respect to the max number of I/O), this will end up with a 8 mono bus AudioProcessor, and no way to setup the plug-in to do multichannel. And yet, the plug-in follows the SDK specification.
For VST3, the SDK describes the BusArrangement negociation as follows :
so basically: setBusArrangement() call
then : getBusArrangement() call
What JUCE does is to start calling getBusArrangement() for each bus to retrieve a layout.
Now for example, if a single bus plug-in does not return OK on this call (e.g. considering that since no IO setup has been specified yet, there is nothing to return), you unfortunately end up with a zero input / zero output AudioProcessor. Again in this case, such plug-in can be still considerered compliant with the SDK specification.
Would it be possible to have this compliancy problem fixed?
On such a issue, I’m not in position to tell a manufacturer to change its code to accomodate ours as it does not do anything against the rules, and have its plug-ins running fine with Steinberg hosts.
Fred / Merging Technologies