Non-default output channels with PipeWire
I've had a Soundcraft Signature 12 MTK mixer for a while. It connects via USB as a class compliant audio interface, with each of the mixer channels available as a separate audio channel in the computer. And it works with Linux out of the box1.
MTK is short for "multi-track", which means the MTK models even allow you to send audio back from the computer to any of the channel strips on the mixer. That's extremely cool!
A downside of this, though, is that by default, audio from the computer is sent to channels 1+2. But those are two separate mono strips on the mixer and you would have to hard pan them and make sure their faders are set to the same level, in order to get a decent sounding result. And keeping the mono channels available for instruments or microphones is preferable, at least for my use case. It would be much better to send things to one of the stereo strips, e.g. 11+12, which is the last fader for channels.
I wasn't able to find a way change the default output channels in the audio/sound settings or even with pavucontrol. But searching the internets led me to a fairly recent solution from the RME User Forum, by no other than Sandroid (of Polyend Backstage fame).
In order to have this at hand in the future, I'm passing on the directions, slightly modified:
In a terminal run: wpctl status
- This should produce a list of Pipewire clients, audio and video devices.
- Find your device and remember the number in front of it.
- In my case i have a Digiface USB and it had the number "54".
Next run the following command: wpctl inspect {ID} | grep "device.bus-id"
- Replace
{ID}with the number of your device. - Copy or note down the bus-id of the device.
Now create a configuration for WirePlumber. In my case i created a file in:
/etc/wireplumber/wireplumber.conf.d/10-map-stereo-channels.conf
with the following content:
monitor.alsa.rules = [
{
matches = [
{
node.name = "~alsa_output.{YOUR-BUS-ID}.*"
}
]
actions = {
update-props = {
audio.position = "AUX0,AUX1,AUX2,AUX3,AUX4,AUX5,AUX6,AUX7,AUX8,AUX9,AUX10,AUX11,AUX12,AUX13,AUX14,AUX15,AUX16,AUX17,AUX18,AUX19,AUX20,AUX21,AUX22,AUX23,AUX24,AUX25,AUX26,AUX27,AUX28,AUX29,AUX30,AUX31,FL,FR"
}
}
}
]
You have to change two things here:
- Replace
{YOUR-BUS-ID}with the bus-id of your device. - Change the content of
audio.positionto reflect the output channels on your device. - In the example above,
FL(front left) andFR(front right) are actuallyAUX32andAUX33. Which is the headphone jack on the Digiface USB (Channels 33/34). This is where i want my audio to play from. - If you want to play your audio through Channel 5/6, you would replace
AUX4andAUX5, withFLandFR.
Save the file and restart PipeWire and WirePlumber services:
systemctl --user restart pipewire wireplumber
-
It actually works more out of the box with Linux than with Windows, as you need to install some proprietary software in order to make it fully work in Windows. ↩