VST3 not working in Harrison Mixbus/Mixbus32 - SOLVED

I just discovered that VST3 versions of my plugins do not work in Harrison Mixbus/Mixbus32. The plugins receive audio but the outputs are copies of the inputs (i.e., it’s perpetually bypassed).

I reported this same issue with Ardour on the iPlug2 bug report forum here: [VST3 output pins don't connect in Ardour - VST2 works · Issue #880 · iPlug2/iPlug2 · GitHub](VST3 output pins don't connect in Ardour - VST2 works · Issue #880 · iPlug2/iPlug2 · GitHub but the suggested fix does not work in Mixbus.

VST2 versions work properly in both DAWs.

I tested the VST3 version of iPlugEffect in Mixbus - with the fix https://github.com/iPlug2/iPlug2/commit/7dc5b1f7101a7ef02b7d4afe5e048a856bbd32a7 - but it doesn’t work either. Turning the volume knob has no effect on the audio. It seems to be an I/O issue specific to Ardour/Mixbus as the plugins work properly in other DAWs.

Anyone else come across this problem in Harrison Mixbus?

Debugger shows channels I/O for iPlugEffect when loaded in Mixbus (looks correct):


Channel I/O #1 - 1-1
               - input bus count: 1, output bus count 1
               - channel count on input bus 1: 1
               - channel count on output bus 1: 1
               - input channel count across all buses: 1, output channel count across all buses 1
Channel I/O #2 - 2-2
               - input bus count: 1, output bus count 1
               - channel count on input bus 1: 2
               - channel count on output bus 1: 2
               - input channel count across all buses: 2, output channel count across all buses 2

Debugger also shows that pPlug->GetHost returns 0 (HostUnknown) so the suggested code fix below with the Mixbus/Ardour check has no effect (is skipped over):

  bool SetBusArrangements(T* pPlug, Steinberg::Vst::SpeakerArrangement* pInputBusArrangements, Steinberg::int32 numInBuses, Steinberg::Vst::SpeakerArrangement* pOutputBusArrangements, Steinberg::int32 numOutBuses)
  {
    using namespace Steinberg::Vst;

    // This would seem to be a bug in Ardour
    if ((pPlug->GetHost() == kHostMixbus32C) || (pPlug->GetHost() == kHostArdour))
    {
        return true;
    }

So, I’m not sure what the problem is here or how to fix it. The plugin is processing the audio - it’s just not being returned to the DAW for some reason.

OK, I found the problem and the solution.

The Host check added to SetBusArrangements works with Ardour because kHostArdour is already in the host lists in IPlugConstants.h and IPlugUtilities.h - but Mixbus is not.

So, it seems we need to update SetBusArrangements to include Mixbus and Mixbus32C by adding one more test as shown below to IPlugVST3_ProcessorBase.h

  bool SetBusArrangements(T* pPlug, Steinberg::Vst::SpeakerArrangement* pInputBusArrangements, Steinberg::int32 numInBuses, Steinberg::Vst::SpeakerArrangement* pOutputBusArrangements, Steinberg::int32 numOutBuses)
  {
    using namespace Steinberg::Vst;

    // This would seem to be a bug in Ardour
    if ((pPlug->GetHost() == kHostMixbus) || (pPlug->GetHost() == kHostMixbus32C) || (pPlug->GetHost() == kHostArdour))
    {
        return true;
    }

We also need to add Mixbus and Mixbus32C to the EHost list in IPlugConstants.h

enum EHost
{
  kHostUninit = -1,
...  
  kHostMixbus32C,// <<<<add
  kHostMixbus,// <<<<add

  // These hosts don't report the host name:
  // EnergyXT2
  // MiniHost
};

And we need to add the check for these host names in IPlugUtilities.h

static EHost LookUpHost(const char* inHost)
{
  char host[256];
  ToLower(host, inHost);

  // C4 is version >= 8.2
  if (strstr(host, "reaper"))               return kHostReaper;
...
  if (strstr(host, "mixbus"))               return kHostMixbus;  //  <<<<add
  if (strstr(host, "mixbus32C"))            return kHostMixbus32C;  // <<<<add

  return kHostUnknown;
}

After making these changes my VST3 plugins work properly in Mixbus.

Maybe this has already been addressed in more recent versions of the iPlug2 files? If not, the basic problem here is that Mixbus and Mixbus32C need to be in the workaround host check as well as added to iPlug2’s host lists.

1 Like

Now that we have this “fix” I am wondering if it’s wise to implement it. In other words, should we be creating workarounds for non-compliant/buggy DAWs? It solves the immediate problem but what if Ardour/Harrison decide to fix their DAWs in the future - will our plugins again appear to be broken requiring another round of tweaks?

Thoughts?