Inverted 5.1 channels on Soundblaster Z

Fix it with pipewire.
Open a terminal and run

pw-link -o

You’ll get some output for your card. This is two lines of mine for example.

alsa_output.usb-MOTU_828ES_0001f2fffe012e87-00.pro-output-0:monitor_AUX0
alsa_output.usb-MOTU_828ES_0001f2fffe012e87-00.pro-output-0:monitor_AUX1

Note your card name before the colon and the channel names, in my case after monitor_.
Create the path if it doesn’t exist then go there

mkdir -p ~/.config/pipewire/pipewire.conf.d
cd ~/.config/pipewire/pipewire.conf.d

Open your new config file, name it whatever you like so long as it ends in .conf

nano 10-channelremap.conf

Here’s a template to paste & edit

context.modules = [
{ name = libpipewire-module-loopback
    args = {
        audio.position = [ FL FR FC LFE RL RR ]
        capture.props = {
            media.class = Audio/Sink
            node.name = creative_5.1_remap_c
            node.description = "Remapped 5.1 Output"
        }
        playback.props = {
            #media.class = Audio/Source
            node.name = creative_5.1_remap_p
            node.description = "Creative 5.1 Input"
            audio.position = [ AUX0 AUX1 AUX2 AUX3 AUX4 AUX5 ]
            node.target = "alsa_output.usb-MOTU_828ES_0001f2fffe012e87-00.pro-output-0"
        }
    }
}
]

Edit node.target under playback.props. The node.target is the name of your card you got from pwlink, without the colon and channel.
Edit audio.position under playback props. Use the channel names you got from pwlink and what you know about which goes where to put them in the right order.
(Edit) It was a creative card in the example below, so you might be able to use their line:
audio.position = [ FC LFE RL RR FL FR ]

Save your changes then restart pipewire to apply

systemctl --user restart pipewire.service

Test again and see if you got it right on the first try, good luck.

Adapted from the pipewire issue discussion I used to fix this for myself a while back:

4 Likes