Current state of bypass management

Yep that is what I was thinking. We want to clear buffers / effect tails / meters etc. also when bypassing and then un-bypassing, not just when switching between non realtime and realtime rendering. So we implemented the timer based thing also for audio stuff. Of course that only works in realtime mode but hey - it’s something. For offline rendering we have to rely on processBlockBypassed() or the bypass parameter so there will be a known issue regarding offline rendering in Logic, Reaper and possibly other more exotic DAWs. I’m curious whether that all goes through release qualification… :sweat_smile:

As part of the implementation I did some research on which DAW does what to implement bypass that I think could be handy for others should they find themselves in the position of having to “fix” the bypass handling of their plugins.

Cubase 13

Deactivating by clicking the Activate button

Stops calling processBlock() and does not call processBlockBypassed()

Activating by clicking the Activate button

Calls perpareToPlay()

Bypassing by clicking the Bypass button

Without getBypassParameter() overridden

Calls processBlockBypassed()

With getBypassParameter() overridden

Continues to call processBlock() with bypass parameter set to 1.0

Un-Bypassing by clicking the Bypass button

Without getBypassParameter() overridden

Starts calling processBlock() again

With getBypassParameter() overridden

Continues to call processBlock() with bypass parameter set to 0.0

Differences between VST2 & 3

Could not check as Steinberg is the only DAW manufacturer not supporting VST2 on an M2 Mac

Pro Tools Ultimate 23.09

Bypassing by clicking the Bypass button in the plugin window frame

Without getBypassParameter() overridden

Calls processBlockBypassed()

With getBypassParameter() overridden

Continues to call processBlock() with bypass parameter set to 1.0

Un-Bypassing by clicking the Bypass button in the plugin window frame

Without getBypassParameter() overridden

Starts calling processBlock() again

With getBypassParameter() overridden

Continues to call processBlock() with bypass parameter set to 0.0

Logic Pro X

Bypassing and unbypassing using the on/off button in the plugin window frame or channel strip

Stops & resumes calling processBlock()

You cannot really get logs very well from Logic now that they’re sandboxing plugins in AUHostingService. So the behaviour is my best guess for the symptoms I saw.

Studio One 6

Deactivating by clicking the Activate button

Stops calling processBlock() and does not call processBlockBypassed()

Activating by clicking the Activate button

Calls perpareToPlay()

Bypassing by clicking the Bypass button

Without getBypassParameter() overridden

Calls processBlockBypassed()

With getBypassParameter() overridden

Continues to call processBlock() with bypass parameter set to 1.0

Un-Bypassing by clicking the Bypass button

Without getBypassParameter() overridden

Starts calling processBlock() again

With getBypassParameter() overridden

Continues to call processBlock() with bypass parameter set to 0.0

Differences between VST2, VST3 & AU

None

Live

Deactivating by clicking the Device Activator button

Stops calling processBlock()

VST2: Activating by clicking the Device Activator button

Calls perpareToPlay()

AU & VST3: Activating by clicking the Device Activator button

Starts calling processBlock() again

Reaper

Deactivating the plugin by unchecking the checkbox

Stops calling processBlock() and does not call processBlockBypassed()

Activating the plugin by unchecking the checkbox

Starts calling processBlock() again

Differences between VST2, VST3 & AU

None

Adding a dedicated bypass parameter and returning it to JUCE wrappers by overriding getBypassParameter()

Three of the tested DAWs change their behaviour:

Cubase 13

Pro Tools Ultimate 23.09

Studio One 6

all continue to call processBlock() with the bypass parameter set to 1 instead of 0 when bypassed.

Studio One and Cubase have the additional “Activate” button which behaves the same no matter whether there is a bypass parameter or not.

Difference between effect and instrument plugins

The difference I found is that Pro Tools and Reaper stop calling the processing callback when there is silence in the channel for longer than approximately 15 seconds or so.

10 Likes