detfalskested

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

Next run the following command: wpctl inspect {ID} | grep "device.bus-id"

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:

Save the file and restart PipeWire and WirePlumber services:

systemctl --user restart pipewire wireplumber

  1. 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.