On linux pro audio, Pipewire, JACK and VSTs
I dabble with music time to time, specifically electronic music. I am not a massive synth buff, so I use computers to make music with VSTs etc. I also use linux, and recently installed pipewire, a replacement for pulseaudio, jack, alsa etc.
My setup, using REAPER.
Installing
To install pipewire (on Arch Linux (btw)), you can install pipewire
, and for alsa, pulseaudio and jack you can respectively install pipewire-alsa
, pipewire-pulse
and pipewire-jack
To use pipewire as a jack replacement, you can use pw-jack
to launch jack clients, however I opted to install pipewire-jack-dropin
, which allows jack clients to automatically use pipewire libraries.
Pipewire then handles the jack server and no other applications seem to be able to control it, or my dbus is broken for jack.
Configuring
First I needed to set my external USB sound card to Pro Audio in pavucontrol
. This enables the available inputs and outputs correctly.
To configure jack further, I needed to copy /usr/share/pipewire/jack.conf
to /etc/pipewire/
(for system wide settings) and edit the conf there. I could set sample rates etc. (NOTE: pipewire also has a sample rate setting.)
Connections
One issue I had, when starting programs, they connected themselves automatically, often incorrectly.
After I figured out how to configure jack under pipewire, I could set jack.self-connect-mode
to ignore-all
, and then any jack client wont connect automatically.
But wont it be annoying to do connections manually every time?
Yes.
Thats why I installed jack-matchmaker (also in the AUR). It allows you to make rules to connect programs automatically.
The AUR package included a systemd unit, so it was just a matter of configuring the program.
Per the README.md, you could set up your connections in a patchbay, such as Catia, and then run jack-matchmaker -c
to get a list of the connections ready to go. I then put the resulting output in /etc/jack-matchmaker/patterns.txt
which is the default location. I also adjusted the config for a good measure, uncommenting the line PATTERN_FILE
and commenting PATTERNS
.
$ /etc/jack-matchmaker/patterns.txt
#
# Parameters to be passed to jack-matchmaker
#
PATTERN_FILE="/etc/jack-matchmaker/patterns.txt"
#PATTERNS=""
#CLIENT_NAME="jack-matchmaker"
#CONNECT_INTERVAL=3
# set EXACT_MATCHING to anything to enable
EXACT_MATCHING=
#MAX_ATTEMPTS=0
#VERBOSITY=WARNING
The end result is that JACK programs will now connect the previously defined connections automatically, but not to incorrect ports by themselves, while non-JACK programs, as the jack setting does not affect them, connect automatically to the default devices.
PS. Because pipewire, I can connect jack clients to standard clients and vice versa. Usefull, isn't it?
VSTs
On linux, you can use LV2 format VSTs, as well as VST3 VSTs, which are compiled on linux. But you can also use Windows VSTs, both VST2 and 3 with yabridge. From my experience, yabridge is much better than previous solutions, from usability to compability.
It is very easy to use (Atleast for VST2), first you put your windows VSTs in one folder. Then add a folder with the command yabridgectl add <folder>
and generate the linux .so
files with yabridgectl sync
. Then just set your DAW to scan that same folder for VSTs. If you get more windows VSTs, just run yabridgectl sync
again.