FL Studio and VST3, no audio through plugin

I have an audio plugin that works across a wide variety of hosts and formats. I recently found that when using FL Studio and VST3 specifically, my plugin does not pass audio. getTotalNumInputChannels and getTotalNumOutputChannels are both 0, and the buffer passed to processBlock also has numChannels() as 0. With no channels, my plugin naturally does nothing with the buffer.

I looked at isBusesLayoutSupported, thinking maybe I don’t support the layout they use (?). I have:

if ((layouts.getMainInputChannelSet() == AudioChannelSet::disabled()) &&
    (layouts.getMainOutputChannelSet() == AudioChannelSet::disabled()))
    return true;
if ((layouts.getMainInputChannelSet() == AudioChannelSet::mono()) &&
    (layouts.getMainOutputChannelSet() == AudioChannelSet::mono()))
    return true;
if ((layouts.getMainInputChannelSet() == AudioChannelSet::mono()) &&
    (layouts.getMainOutputChannelSet() == AudioChannelSet::stereo()))
    return true;
if ((layouts.getMainInputChannelSet() == AudioChannelSet::stereo()) &&
    (layouts.getMainOutputChannelSet() == AudioChannelSet::stereo()))
    return true;

return false;

It seems to want the above combos, plus stereo/disabled. I added that and returned true, but it didn’t change anything.

I noticed my ::reset and ::prepareToPlay functions do not get called on playback. Not sure why.

Any ideas?

1 Like

Did you every get anywhere with this? I appear to have the same issue.

Note it’s limited to FL 64 bit version and VST3 (also 64 bit)
FL 32 bit and VST3 (64) works.
FL 64 bit and VST2 (32 OR 64) also works.

But with 64 bit + VST3 it doesn’t call prepare to play, process block, but does call the editor so perhaps it is a channel negotiation issue combined with something unusual in the 64 bit version of FL.


Make sure your AudioProcessor is setting up some helpful BusesProperties if you don’t have that already, I think it’s how I solved this in FL. Something like

MyAudioProcessor::MyAudioProcessor() : AudioProcessor(BusesProperties().withInput("Input", AudioChannelSet::stereo(), true).withOutput("Output", AudioChannelSet::stereo(), true) )

Hi, did you set the channels with the old {2,2} way in the projucer? I also had the “no audio output” issue with AUv3. It worked after switching to the new constructor based channel settings with the extra properties like @hill_matthew described.

@roli Maybe it’s time to remove this “simple” channel configuration feature. I think it’s not useful anymore.

1 Like

Thanks for the responses guys.

My issue was that FL 64 started my VST3s with zero input channels as my isBusesLayoutSupported method wasn’t well written (it didn’t check the inputs, just the outputs)
This triggered a mistake elsewhere in the plugin causing a crash, FL hid this crash, but started the plugin up without routing audio to the plugin.

I’m guessing that FL’s logic is to start a plugin, asks whether it supports a setup and then tries it to see if it crashes before it believes what it claims! But that this isn’t quite right when talking to VST3s from the 64 bit version of FL.


The following is stuff I’d already noted here in case others find it useful:
I’m using the recomended:
: AudioProcessor(BusesProperties()
.withInput("Input", AudioChannelSet::stereo(), true)
.withOutput("Output", AudioChannelSet::stereo(), true)

Intriguingly, using the legacy {2,2} made it work again!

1 Like