[RESOLVED] Waveform: Configure Plugin Channels and VST3 plugins


#1

Tracktion’s Waveform host works fine with the AudioUnits version of my plugin, but when I instantiate a VST3 instance, it does not produce any output, and the contents of Waveform’s “Configure Plugin Channels” menu is greyed out. Anyone know why that might be, and what I need to change to fix it? I’m using the standard mono-to-mono or stereo-to-stereo configurations, and it works fine in other VST3 hosts (like Cubase or Studio One). (This is with JUCE 5.3.2, by the way.)


#2

Does your plugin pass the pluginval validation for VST3?


#3

It passes validation but doesn’t have any channels open by default so has this in the pluginval log:

Starting test: pluginval / Listing available buses...
Inputs:
	Named layouts: Mono, Stereo
	Discrete layouts: Discrete #1
Outputs:
	Named layouts: Mono, Stereo
	Discrete layouts: Discrete #1
Main bus num input channels: 0
Main bus num output channels: 0
All tests completed successfully

I’m not sure exactly what’s causing this but it could be that if you specify multiple busses you need to enable one during construction to signify that it’s the “default”?

If you load the plugin in the JUCE plugin host, when a plugin is added in FilterGraph::addFilterCallback you’ll see a call to instance->enableAllBuses();. If you comment this out, the plugin won’t open with any input or output channels.
I don’t think this is desired behaviour, I think plugins should internally enable the busses they need to to be constructed in a “default” state.

I’ll have a think about adding this to Waveform as it could solve the issue but I’m wondering if it will have any unforeseen side effects. The main thing is that if plugins open with different default channel counts than in previous sessions, channel mapping will be wrong and Edits will sound different…


#4

Ah, I see the default constructor for AudioProcessor creates a default input and output bus, but they are disabled by default. So I need to modify my constructor as in the NoiseGate example, like this:

:AudioProcessor( BusesProperties().withInput(“Input”, AudioChannelSet::stereo())
.withOutput(“Output”, AudioChannelSet::stereo()) )

That should give us stereo buses, enabled by default. I’ll have to make sure that doesn’t preclude the use of mono-mono (or mono-stereo in other products that support this). Then you won’t need to be modifying Waveform just for us! :slight_smile: