From 560e75da270e503e677a652f079de52832931091 Mon Sep 17 00:00:00 2001 From: reuk Date: Fri, 20 May 2022 19:14:16 +0100 Subject: [PATCH] MultiOutSynthPlugin: Avoid assertions in VST3PluginTestHost --- examples/Plugins/MultiOutSynthPluginDemo.h | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/examples/Plugins/MultiOutSynthPluginDemo.h b/examples/Plugins/MultiOutSynthPluginDemo.h index 9dbc629694..4701096670 100644 --- a/examples/Plugins/MultiOutSynthPluginDemo.h +++ b/examples/Plugins/MultiOutSynthPluginDemo.h @@ -123,6 +123,10 @@ public: auto midiChannelBuffer = filterMidiMessagesForChannel (midiBuffer, busNr + 1); auto audioBusBuffer = getBusBuffer (buffer, false, busNr); + // Voices add to the contents of the buffer. Make sure the buffer is clear before + // rendering, just in case the host left old data in the buffer. + audioBusBuffer.clear(); + synth [busNr]->renderNextBlock (audioBusBuffer, midiChannelBuffer, 0, audioBusBuffer.getNumSamples()); } } @@ -146,11 +150,15 @@ public: bool isBusesLayoutSupported (const BusesLayout& layout) const override { - for (const auto& bus : layout.outputBuses) - if (bus != AudioChannelSet::stereo()) - return false; + const auto& outputs = layout.outputBuses; - return layout.inputBuses.isEmpty() && 1 <= layout.outputBuses.size(); + return layout.inputBuses.isEmpty() + && 1 <= outputs.size() + && outputs.getFirst() != AudioChannelSet::disabled() + && std::all_of (outputs.begin(), outputs.end(), [] (const auto& bus) + { + return bus == AudioChannelSet::stereo() || bus == AudioChannelSet::disabled(); + }); } //==============================================================================