robbert-vdh / yabridge

A modern and transparent way to use Windows VST2, VST3 and CLAP plugins on Linux
GNU General Public License v3.0
2.46k stars 64 forks source link

Phaseplant doesn't load saved states in a Bitwig project that were created on Windows #210

Closed Northern-Born closed 2 years ago

Northern-Born commented 2 years ago

Thanks for giving yabridge a shot!

Problem description

Basically I imported a project from windows to linux, phaseplant is identified by bitwig but all instances crash seemingly regardless of Bitwig's plugin sandboxing settings. If I import my Bitwig library then phaseplant will always crash as the saved default state also came from windows. It seems fine if I make presets within Bitwig on linux, I am able to load every just fine.

There is also the possibility that this is true for every Kilohearts plugin and I just happen to have plugin states saved only set for phaseplant and snapheap. Serum, for example is able to load the plugin states saved in bitwig as normal.

i did attempt exporting "export WINEFSYNC=1" in the .bashrc and restarting but this seemed to change nothing for me

What did you expect to happen?

Phaseplant should load it's saved plugin states in bitwig when loading the plugin or a project

What actually happened?

Phaseplant crashes and the sandbox window warns that it was unable to load the plugin state in "/path/to/file"

Operating system

Arch 6.0.6

How did you install yabridge?

AUR

yabridge version

4.0.2-1

yabridgectl version

4.0.2-1

Wine version

wine staging 7.20-1

Plugin

Phaseplant (maybe also snapheap)

Plugin type

VST3

Plugin architecture

64-bit

Host

Bitwig Studio 4.2.5

Desktop environment or WM

No response

GPU model

No response

GPU drivers and kernel

No response

Debug log

No response

Anything else?

A secondary issue is that click dragging knobs and parameters in phaseplant/snapheap/multipass after opening something like sliceEQ inside will feel like there is insane inertia, making it impossible to make adjustments to the plugin until it's reloaded by the audio engine

robbert-vdh commented 2 years ago

The debug log was missing, please remember to fill in the entire template next time!

If you'd take a look at that debug log, you'd see that when Bitwig tries to restore the state, it first sets a state file, and then tries to set another empty state file. VST2 plugins tend to have two states (one for the processor, another one for the controller. So this indicates that the plugin either randomly returns empty states after querying the first one, or the host randomly decides to send an empty state. Phaseplant then returns a kInternalError when setting that empty state. The same thing happens under REAPER, but REAPER ignores the error code and everything works fine. But Bitwig does not do this. I'm 99.9% certain this also happens under Windows, but perhaps Bitwig just has a plugin-specific workaround for this there that's not active in the Linux build.

You're best off either asking KiloHearts why the second state file is empty (it's basically just doing an IComponent::getState() twice in a row), or asking Bitwig to ignore errors on IEditController::setState(). Or to just not try to set editor controller state at all when IComponent and IEditController are implemented using the same object. You could also hack around this in yabridge by always returning kResultOk in IEditController::setState() when the state is empty, but I"m obviously not going to implement that in upstream yabridge.