Seemingly paradoxical statements between assert and api (solved)

I just wanted to implement the so-called “bypass parameter”. I made a parameter to represent bypass and overrode getBypassParameter() to return that parameter in my juce::AudioProcessor subclass and made a button to toggle this parameter. I was just about to test if it gets the right values in processBlock when I ran into the assert that tells you to implement processBlockBypassed whenever you make a plugin that reports latency at some point.

(For some reason this doesn’t happen if I bypass the plugin without the bypass-parameter in bitwig, but that’s just an interesting side-note…)

What really confuses me here is that the docs say one should not call this method anymore once a bypass parameter has been defined:

What should I conclude from this? Should I now implement processBlockBypassed anyway or is something about the bypass parameter not working correctly yet, in which case, how to find out what?

My goal is to implement a proper bypass parameter
a) so that the plugin can be bypassed from the GUI
b) in a way intended by the VST3 standard if possible
c) in a way that the parameter randomizer in FL studio isn’t able to modulate it.

(If b and c can’t both be fulfilled I’d prefer c to work)

(Btw I still don’t understand why FL Studio’s parameter randomizer is able to modulate the bypass parameter before you even actively create one, but if this is not trivial to explain ignore this side-question)

We’ve recently fixed a number of issues with bypass parameters on the develop branch. Have you tried using the latest version?

oh yeah i forgot to mention that i indeed did that and that it works now. i still have processBlockBypassed be implemented though and i would also really like to continue doing that because in multiple of my projects that method surely has to do a bit more than just applying a feedforward-delay to compensate latency. is this supported, or am i getting problems for that?

You can check the status of the bypass parameter and call processBlockBypassed yourself as required.

Usually this is just a fractional delay line to maintain a constant latency.