"Host Bypass" - VST2 vs. VST3 explanation?

SDK for VST 3 audio plug-in and host development.
Nonlinear
Posts: 14
Joined: Tue Mar 05, 2019 6:37 pm

"Host Bypass" - VST2 vs. VST3 explanation?

Post by Nonlinear » Mon Apr 01, 2019 4:23 pm

Can someone point me to an overview/explanation of how "Host Bypass" works in VST3 (vs. VST2)? I can't seem to get my arms around what should be a simple, basic function.

Thank you.

BTW - a lot of name-brand plugins I own from other developers do not bypass correctly from the host - so it seems this is a common problem area in VST3

ray
Posts: 97
Joined: Fri Sep 02, 2016 9:37 am

Re: "Host Bypass" - VST2 vs. VST3 explanation?

Post by ray » Tue Apr 02, 2019 8:00 am

Nonlinear wrote:Can someone point me to an overview/explanation of how "Host Bypass" works in VST3 (vs. VST2)? I can't seem to get my arms around what should be a simple, basic function.

Thank you.

BTW - a lot of name-brand plugins I own from other developers do not bypass correctly from the host - so it seems this is a common problem area in VST3
In VST3 you can register a dedicated bypass parameter by setting the ParameterInfo::kIsBypass flag and a proper VST3 host implementation should take care of synchronizing that parameter with its internal bypass state. As a plugin programmer you can react to bypass changes, e.g. by intercepting changes to the bypass parameter in your IEditController::setParamNormalized() implementation.

In VST2 the host first asks your plugin whether it supports VST 2.4's AudioEffectX::setBypass() API by calling canDo("bypass"). If it does, a proper VST2 host implementation will set the bypass state via AudioEffectX::setBypass(), which is where you can react to changes. I think this is what some hosts (e.g. REAPER) don't get it right/don't implement at all. REAPER for example just stops calling your plugin's process function altogether and bypasses the respective audio stream internally when your insert is in bypass without ever calling setBypass(). All that is handled by Steinberg's Vst2Wrapper given that you're exposing a bypass parameter in your VST3 implementation btw..

If a specific host implementation doesn't conform to these protocols, there is not much more you can do except for supporting the outlined VST2 / VST3 APIs and hoping for the best ;-)

Best,
Ray
Last edited by ray on Wed Apr 03, 2019 7:12 pm, edited 1 time in total.

Arne Scheffler
Posts: 272
Joined: Mon Jun 20, 2016 7:53 am

Re: "Host Bypass" - VST2 vs. VST3 explanation?

Post by Arne Scheffler » Tue Apr 02, 2019 8:03 am

Hi,
from the FAQ in the documentation:
Q: How does Audio Processing Bypass work?

In order to implement audio process bypassing, the Plug-in can export a parameter which is additionally and exclusively flagged as having the attribute kIsBypass. When the user activates the Plug-in bypass in the host, like all parameter changes, this is sent as part of the parameter data passed to the Vst::Steinberg::IAudioProcessor::process method.

The implementation of the bypass feature is entirely the responsibility of the Plug-in:

The IAudioProcessor::process method will continue to be called. The Plug-in must take care of artifact-free switching (ramping, parallel processing or algorithm changes) and must also provide a delayed action if your Plug-in has a latency. Note: The Plug-in needs to save in its state the bypass parameter like any other parameters.
What is not clear ?

Cheers,
Arne

sgretscher
Posts: 14
Joined: Tue Jul 05, 2016 6:30 pm

Re: "Host Bypass" - VST2 vs. VST3 explanation?

Post by sgretscher » Tue Apr 02, 2019 9:26 am

I think some confusion here comes from the fact that in Cubase depending on where you activate bypass (mixer slot vs. plug-in window) it's either using host bypass or relying on plug-in bypass, disabling the bypass feature if the plug-in does not support plug-in side bypass. I wish it would just fall back to host-side bypass for that button if plug-ins do not support bypass - as it is now, it basically forces all plug-ins to implement bypass even if it does not make sense for the given plug-in since it doesn't do anything special while bypassed and host-side bypass would be preferable and yield better performance.

Best,
Stefan

Nonlinear
Posts: 14
Joined: Tue Mar 05, 2019 6:37 pm

Re: "Host Bypass" - VST2 vs. VST3 explanation?

Post by Nonlinear » Wed Apr 03, 2019 4:32 am

Arne Scheffler wrote:Hi,
from the FAQ in the documentation:
Q: How does Audio Processing Bypass work?

In order to implement audio process bypassing, the Plug-in can export a parameter which is additionally and exclusively flagged as having the attribute kIsBypass. When the user activates the Plug-in bypass in the host, like all parameter changes, this is sent as part of the parameter data passed to the Vst::Steinberg::IAudioProcessor::process method.

The implementation of the bypass feature is entirely the responsibility of the Plug-in:

The IAudioProcessor::process method will continue to be called. The Plug-in must take care of artifact-free switching (ramping, parallel processing or algorithm changes) and must also provide a delayed action if your Plug-in has a latency. Note: The Plug-in needs to save in its state the bypass parameter like any other parameters.
What is not clear ?

Cheers,
Arne
It seems from what you posted here that this is really nothing more than another control parameter passed to the plugin. So why do so many hosts and plugins get it WRONG? It seems simple, unless I'm missing something.

I already have my own "soft bypass" control in my plugins as an automatable parameter. So it seems I just need to connect it up to the kIsBypass parameter?

>>In order to implement audio process bypassing, the Plug-in can export a parameter
What happens if your plugin does NOT export this parameter?

Nonlinear
Posts: 14
Joined: Tue Mar 05, 2019 6:37 pm

Re: "Host Bypass" - VST2 vs. VST3 explanation?

Post by Nonlinear » Wed Apr 03, 2019 5:25 am

ray wrote: In VST3 you can register a dedicated bypass parameter by setting the ParameterInfo::kIsBypass flag and a proper VST3 host implementation should take care of synchronizing that parameter with its internal bypass state. As a plugin programmer you can react to bypass changes, e.g. by intercepting changes to the bypass parameter in your IEditController::setParamNormalized() implementation.

In VST2 the host first asks your plugin whether it supports VST 2.4's AudioEffectX::setBypass() API by calling canDo("bypass"). If it does, a proper VST2 host implementation will set the bypass state via AudioEffectX::setBypass(), which is where you can react to changes. I think this is what some hosts (e.g. REAPER) don't get it right/don't implement at all. REAPER for example just stops calling your plugin's process function altogether and bypasses the respective audio stream internally when your insert is in bypass without ever calling setBypass(). All that is handled by Steinberg's Vst2Wrapper given that you're exposing a bypass parameter in your VST3 implementation btw..

If a specific host implementation doesn't conform to these protocols, there is not much you more can do except for supporting the outlined VST2 / VST3 APIs and hoping for the best ;-)

Best,
Ray
Great info, thank you.

Since I didn't understand the formal way to do this - and I know it's different for VST2/VST3 - I created my own bypass parameter in my plugin. It works the same regardless of VST version (VST2 or VST3) because it's simply another "control" parameter. I thought that was a good approach but then some customers complained that "host bypass" didn't work right in Cubase - so now I'm trying to figure out how to do it per VST spec.

BTW - What's complicating my efforts is that I'm building my plugins for VST2, VST3 and AU formats on both Mac and PC using a cross platform tool called iPlug. Unfortunately that tool does not seem to have Host Bypass working properly...

Arne Scheffler
Posts: 272
Joined: Mon Jun 20, 2016 7:53 am

Re: "Host Bypass" - VST2 vs. VST3 explanation?

Post by Arne Scheffler » Wed Apr 03, 2019 1:05 pm

Nonlinear wrote: It seems from what you posted here that this is really nothing more than another control parameter passed to the plugin. So why do so many hosts and plugins get it WRONG? It seems simple, unless I'm missing something.
Maybe the developers don't read the documentation.
Nonlinear wrote: I already have my own "soft bypass" control in my plugins as an automatable parameter. So it seems I just need to connect it up to the kIsBypass parameter?
Correct. Easy, not ?
Nonlinear wrote: >>In order to implement audio process bypassing, the Plug-in can export a parameter
What happens if your plugin does NOT export this parameter?
Then the host may implement bypass of its own, or if not then it just don't allow to bypass that plug-in.

Nonlinear
Posts: 14
Joined: Tue Mar 05, 2019 6:37 pm

Re: "Host Bypass" - VST2 vs. VST3 explanation?

Post by Nonlinear » Wed Apr 03, 2019 5:01 pm

ray wrote: If a specific host implementation doesn't conform to these protocols, there is not much you more can do except for supporting the outlined VST2 / VST3 APIs and hoping for the best ;-)
This seems to be the biggest problem right here. What works in Cubase does not work in other DAWs and vice versa. It's actually a mess, IMO.

I am just going to keep using my own built-in "soft bypass" parameter and advise customers to use it instead of Host Bypass.

Arne Scheffler
Posts: 272
Joined: Mon Jun 20, 2016 7:53 am

Re: "Host Bypass" - VST2 vs. VST3 explanation?

Post by Arne Scheffler » Thu Apr 04, 2019 7:07 am

Just mark your bypass parameter as kIsBypass and you've done the correct thing. If there are hosts that don't work with this correctly, report it here and we'll try to talk with the developers to correct this.

Cheers,
Arne

Nonlinear
Posts: 14
Joined: Tue Mar 05, 2019 6:37 pm

Re: "Host Bypass" - VST2 vs. VST3 explanation?

Post by Nonlinear » Thu Apr 04, 2019 7:37 pm

Arne Scheffler wrote:Just mark your bypass parameter as kIsBypass and you've done the correct thing. If there are hosts that don't work with this correctly, report it here and we'll try to talk with the developers to correct this.
It seems kIsBypass is only for VST3? How would I "connect it up" in VST2?

Don't know about other hosts but for one kIsBypass is not called by Cakewalk by Bandlab when the Host Bypass is engaged. I actually don't know WHAT it does but Cakewalk itself must be taking care of the bypass internally. It does Bypass the plugin but it is not a seamless transition if the plugin has latency.

Post Reply