AudioProcessor::getBypassParameter() experiences

For my latest plugin I implemented a bypass system with smooth fades and a bypass parameter. The goal is to prevent clicks when bypassing with some hosts and allow users to automate bypassing without problems in all hosts that support automation.

I used the newish AudioProcessor::getBypassParameter() to declare my bypass parameter to the JUCE wrappers and hosts.

I have to say the results are quite puzzling and seem to vary widely from host to host. This is not JUCE’s fault, but the hosts seem to do very different things. This makes me wonder whether it’s worth using getBypassParameter() at all - especially for AU. I see it’s working fine for VST3 where it is part of the specs.

Currently, I see these options:

1 - use getBypassParameter() always and hope for the best. Blame the hosts when support requests come in.
2 - ignore getBypassParameter() and add a bypass button to my GUI that just uses my logic. (might still be confusing as this means it’s possible to double-bypass the plugin)
3 - Only use getBypassParameter() for vst3 and use my internal stuff for the other formats. (maybe AUv3 works as well, but I haven’t tested that).

I wonder about the best practice in this case. Does anyone use getBypassParameter() and has some experiences to share? I am worried about users getting confused by the different levels of host support.

Still working on it. It became clear it’s working nicely for VST3 and AAX and VST2 just has no means to deal with it. However the tricky part is the Audio Units standard where different hosts seem to do different things.

Is anyone using getBypassParameter() for the AU format in a released product? Have your customers reported any issues?

I see hosts that do things right - so the host bypass gets synced to my bypass and my fades are used, but others totally ignore the bypass flag (Logic…) and I even see stuff in hosts where the bypass status seems to be only communicated one way resulting in mixed bypass button states.

Just noticed your post. I posted about issues with the Bypass parameter as well, especially in AU hosts. But in addition, I have to support our old pre-JUCE versions that used the VST3 SDK’s auwrapper. So far, the best solution I have appears to be to add a Bypass parameter, after all of my other parameters, and just let the AU hosts create their own. Then I report mine via getBypassParameter(). It seems to work, but the host-provided one is a toggle while mine (even though I define it as a boolean discrete parameter) shows up as a slider in the automation lane in Studio One.

But now I see that in Logic, it does not show up as an automatable parameter. Logic’s Bypass button seems to be automatable, but that does not get tied to our own Bypass parameter, so it’s not working as desired. I don’t know how to get AU Bypass working correctly across hosts. Maybe we can’t?

Just checked in Logic, and I see that processBlockBypassed is never called, either, so I can’t use that to implement the smooth transitions. :frowning:

Logic has its own bypass system, but it isn’t working very well - at least not with Juce based plugins. The idea is that logic creates fades by itself, but something is broken. I can recreate the issue with the JUCE demo plugin. On the other hand the apple AU examples work ok, so it might be something the JUCE AU wrapper does that confuses logic. I wrote about that here:

In any case Logic Pro does not support the AU bypass parameter property, which is a shame. Maybe it does for AUv3, but I haven’t tested that.

That is why I started doing my own bypass stuff in the first place. I just want to give my customers the option to automate bypass in Logic without audio issues, but now I guess I’m steering towards another half-working mess and inconsistent behaviour between hosts. That is why I wonder how other people are dealing with the situation.

Yes. Logic Pro is notorious when it comes to shutting down plugin processing it deems unnecessary. If you have your own bypass button, you can at least “bypass” their bypass code :wink: .

I am pondering changing my own bypass button into a “power on” button. I’ve seen some other companies do that. Maybe this lowers the confusion a bit as then there’s at least only one bypass button (the host’s) visible.