DISTRHO / Cardinal

Virtual modular synthesizer plugin
https://cardinal.kx.studio/
GNU General Public License v3.0
2.29k stars 154 forks source link

CardinalFX.lv2: bypass in Ardour mutes the track #545

Open iv-m opened 1 year ago

iv-m commented 1 year ago

I'm using CardinalFx LV2 in Ardour 7.5. When I bypass CardinalFX, the track becomes muted completely, I don't here the original, unprocessed sound.

falkTX commented 1 year ago

that is kinda expected, there is no way to do a proper bypass of the signal that can match whatever craziness is happening inside Cardinal. there could be some signal delay, or volume attenuation or any other sort of thing. it is impossible to have a clean signal match in a dynamic way.

I thought about adding some option to configure the bypass processing, so for example we could allow plugins to keep running but just mute the input signal. Or maybe we trigger bypass of all modules inside Cardinal, but gets weird for un-bypassing as we do not want to enable modules that the user has purposefully disabled.

opinions/suggestions welcome, I couldnt figure out a way to handle this that does not break some kind of setup. it is not so much a technical challenge, but a logical one. Rack does not have a way to report cable latencies, so we can't compensate for that when bypassed

iv-m commented 1 year ago

Specifically for CardinalFX I don't see any problems with bypass that just copies inputs to outputs, without any delay. As Cardinal currently does not report any delay to host (at least for the LV2 pugin I've checked it seems to be always zero), that would not impose any new problems related to DAW's delay-compensating engine; of course, there's volume and suchlike, but that's what gain staging is about, and Cardinal FX would not be different from any other plugin in this respect.

As for the full Cardinal, that's a different story, I agree. There could be any kind of creative routing and other crazy stuff, so it's sometimes hard to decide what bypass means for a given patch. The only thing I can think of is to pass the bypass value into the patch like a host parameter (via host parameters plugin or a special system plugin), e.g. converted to a gate, for patch authors to build their own bypass if they care to do so. I think there must be a module somewhere takes a CV and enables/disables other modules.

falkTX commented 1 year ago

that would have different variants behave in different ways, that could lead to bad assumptions on the user side. it needs some more thought

I like the idea of exposing bypass as a control/cv source on the cardinal module side. sadly I do not think it is possible to connect such control/source to modules being bypassed. Rack's module bypass is not something exposed directly, we would need to create a module dedicated to this, something that would allow to selectively bypass other plugins in the patch

dromer commented 1 year ago

Isn't it the responsibility of the Host to fully bypass a plugin's processing?

falkTX commented 1 year ago

Isn't it the responsibility of the Host to fully bypass a plugin's processing?

if you mean disabling the plugin, yes. bypass is an optional plugin-side feature, needed for plugins that do any kind of delay or other non simple operations on the audio, having the host do it can easily lead to phasing and other issues.

while not all plugins need it, some do. and on cardinal it makes sense to have control over this somehow.

do we know what/if Rack Pro does anything special about bypass? I would be surprised if it did anything about it, but I have not checked

zenhunt commented 10 months ago

Hi! I just found a little work around for this in Ardour / Mixbus. You can save yourself a bypass preset. You should also save the thing that your working with as a preset and link it's parameters to host parameters and then configure the host parameters to be used from the channel overview. Then you set the plug from there and just right click to recall the preset.

That's nearly as convenient as a true bypass. ;)

bypass

whateveryourusing

params_in_channel

preset_select

falkTX commented 10 months ago

what about having the bypass/enabled state as a cv source?

iv-m commented 10 months ago

You can save yourself a bypass preset.

For me, building a bypass button is more convenient:

image

I can feed the GATE input of switch from a host parameter, and then turn it on and off from the DAW without opening the plugin interface. Turning processing on and off with a fader instead of button is somewhat strange, but that's not a showstopper for me. Having 'bypass enabled' as CV source would, of course, provide almost native experience.

That said, I would be a bit happier if Cardinal FX had a "true" bypass driven by DAW bypass button. Somehow, when debugging sound problems ('where does all this popping come from, a synth or some of the effects?'), true bypass feels more convincing than anything I hack together with the wires. Maybe there could be an option in "Engine" menu?