Trouble configuring PipeWire & Yabridge for realtime audio production with Windows plugins.
Description of Problem:
Comment: Heya! I spent a couple weeks troubleshooting this on my own, with Robbert from Yabridge, and on #pipewire, but haven't been able to come up with a working solution so I figured it might be the right time to open an issue here. This pertains to a very common Linux audio production use case.
Lately I've been testing PipeWire for music production on Linux with Bitwig Studio.
Like many Linux musicians I have a variety of VST2/3 plugins, some of these are Linux native, but the vast majority are Windows plugins that I need to bridge with Yabridge.
Here's the problem: whenever I have my user configured with real time privileges (
ulimit -r of 90, in my case) some of my Windows plugins via Yabridge will crash while loading.
(These crashes occur with some Windows plugins, but not with others. The ones that do crash seem to crash 100% of the time. And they only crash when running with rt privileges on PipeWire. It seems to me that the more demanding the plugin and the slower it loads through Yabridge, the more likely it is to crash, but I can't say for sure.)
Version, Distribution, Desktop Environment:
Bitwig Studio 4.0a
I can reproduce this issue 100% of the time with specific plugins.
Steps to Reproduce:
- Configure real time privileges. (I'm using
- Install and sync a demanding Windows VST plugin through Yabridge. (MODO DRUM is one of the ones that consistently crashed for me.)
- Try to load the non-native plugin through Bitwig Studio. (I haven't tested this with other DAWs.)
The non-native plugin will attempt to load for a short time before crashing.
Yabridge produces this output in ~/.BitwigStudio/log/engine.log:
22:37:02 [MODO DRUM-139OSWiq] RLIMIT_RTTIME is set to 200000 us. This can happen when 22:37:02 [MODO DRUM-139OSWiq] using PipeWire. yabridge may crash when loading plugins 22:37:02 [MODO DRUM-139OSWiq] until you fix this.
I expect the non-native plugin to load via yabridge and run with real time priority.
I recently opened a related issue with Yabridge. I'm happy to try to work with both PipeWire and Yabridge to see if we can get this fixed.
Based on my conversations on #pipewire, there doesn't seem to be a mutual understanding of what Yabridge refers to as
RLIMIT_RTTIME. My original assumption was that it's the same thing that
pipewire.confrefers to as
rt.time.hard, but that may not be the case. I don't know enough about PipeWire OR Yabridge to be sure, either, but I do know that the value that Yabridge complains about (200000us) is the same as the default value for those variables in
pipewire.conf. (However, I didn't have any luck changing either of the values in
pipewire/pipewire.conf. Even if I crank
rt.time.hardway up to 30000000, the plugin still crashes and yabridge still complains about "200000us" as shown above...)
After updating to Pipewire 0.3.29 last night, I copied a number of my PipeWire configuration files from
/etc/pipewire/(keeping intermediate directories when needed). I then edited the new copies (the one's in
/etc/pipewire/) to refer to
libpipewire-module-rtkit. Sadly, no improvement.