Hello,
I’m currently tracking down a bug related to the channel config of our VST3 plugin in Acoustica 7 on Windows. Our side-chain enabled plugin is muting the track, since the VST3 wrapper reports an invalid channel layout, which results in a blank input buffer.
When I load the VST3 plugin into Acoustica on a mono track, I can see that the plugin is prepared with one mono input-bus as well as one inactive mono side-chain bus.
When processing the Steinberg::Vst::ProcessData::inputs array contains two elements.
The first element is the expected input-bus with one channel. The second element however corresponding to the disabled side-chain bus is present, but with 0 channels.
I’ve tracked the changes to the recent commit here: VST3 Client: Allow host to enable/disable buses at will · juce-framework/JUCE@0e85fec · GitHub
In the situation described above the newly introduced validateLayouts method reports an invalid configuration, since the plugin was prepared with a mono side-chain bus, while it actually received an empty one while processing.
The check is the following:
auto** busPtr = getAudioBusPointer (detail::Tag<FloatType>{}, *it);
const auto anyChannelIsNull = std::any_of (busPtr, busPtr + it->numChannels, [] (auto* ptr) { return ptr == nullptr; });
// Null channels are allowed if the bus is inactive
if ((mapIterator->isHostActive() && anyChannelIsNull) || ((int) mapIterator->size() != it->numChannels))
return false;
with a configuration of:
busPtr == nullptr
it->numChannels == 0
anyChannelIsNull == false (since the std::any_of is executed from nullptr to nullptr)
mapIterator->size() == 1
So, is it really the desired behaviour to mute the input in these situations?
