Pulseaudio has matured!

It has gotten to the point where Pulseaudio in many ways is superior to the sound engine in Windows/Mac.

Being able to route to/from external USB audio interface such as X32 or XR18 (or similar) HAS reached a level of usability and stability. The ability to create virtual sound cards out-of-the-box is something that might be a selling point.

[Screenshot of two Firefox tabs being routed to external Mixer over USB]
ALL AUDIO IS ROUTED OVER ONE USB CABLE!

However, with Pulseaudio, it would be nice to have better documentation on creating a descriptor file to change the default channel-map names as 'by default' any unknown multi-channel device starts with the "typical" surround channel names (front-left, rear-right, etc.). Script with such names is confusing. I've created a hackish way to be able to READ the per- virtual sound card device more easily. (My saying: If it's easy to read, it's easy to maintain!)

Below is the script used to create a bunch of virtual sound cards used the the photo provided.

#!/bin/bash

# 8x8 channel mode
#MULTIOUT=alsa_output.usb-BEHRINGER_X-USB_23C8EABF-00.analog-surround-71
#MULTIIN=alsa_input.usb-BEHRINGER_X-USB_23C8EABF-00.analog-surround-71??
# 16x16 or any combination with more than 8
MULTIOUT=alsa_output.usb-BEHRINGER_X18_XR18_5BEFB5B8-00.multichannel-output
MULTIIN=alsa_input.usb-BEHRINGER_X18_XR18_5BEFB5B8-00.multichannel-input

# 8x8 -> 1:front-left 2:front-right 3:center 4:lfe 5:rear-left 6:rear-right 7:side-left 8:side-right
# 16x16 -> 1:front-left 2:front-right 3:rear-left 4:rear-right 5:center 6:lfe 7:side-left 8:side-right

CH1=front-left
CH2=front-right
#8x8 CH3-6
#CH3=center
#CH4=lfe
#CH5=rear-left
#CH6=rear-right
#16x16 CH3-6
CH3=rear-left
CH4=rear-right
CH5=center
CH6=lfe
CH7=side-left
CH8=side-right
CH9=aux0
CH10=aux1
CH11=aux2
CH12=aux3
CH13=aux4
CH14=aux5
CH15=aux6
CH16=aux7
# aux8, aux9, ... auxN

#Create virtual outputs to multi-channel sound card
pacmd unload-module module-remap-sink
sleep 1
echo INPUTS: Aux1, Aux2, Rem1, Rem2, Rem3

pacmd load-module module-remap-sink\
channels=2\
sink_name=iaux1\
sink_properties=device.description=Aux1\
remix=no\
master=${MULTIOUT}\
master_channel_map=${CH1},${CH2}\
channel_map=front-left,front-right

pacmd load-module module-remap-sink\
channels=2\
sink_name=iaux2\
sink_properties=device.description=Aux2\
remix=no\
master=${MULTIOUT}\
master_channel_map=${CH3},${CH4}\
channel_map=front-left,front-right

pacmd load-module module-remap-sink\
channels=1\
sink_name=irem1\
sink_properties=device.description=Rem1\
remix=no\
master=${MULTIOUT}\
master_channel_map=${CH5}\
channel_map=mono

pacmd load-module module-remap-sink\
channels=1\
sink_name=irem2\
sink_properties=device.description=Rem2\
remix=no\
master=${MULTIOUT}\
master_channel_map=${CH6}\
channel_map=mono

pacmd load-module module-remap-sink\
channels=1\
sink_name=irem3\
sink_properties=device.description=Rem3\
remix=no\
master=${MULTIOUT}\
master_channel_map=${CH5}\
channel_map=mono

#Create virtual input from multi-channel sound card
pacmd unload-module module-remap-source
echo OUTPUTS: LRSend, [IFBSend], Rem1Send, Rem2Send, Rem3Send

sleep 1
pacmd load-module module-remap-source\
channels=2\
source_name=olr\
source_properties=device.description=LRSend\
remix=no\
master=${MULTIIN}\
master_channel_map=${CH1},${CH2}\
channel_map=front-left,front-right

#pacmd load-module module-remap-source\
# channels=2\
# source_name=oifb\
# source_properties=device.description=IFBSend\
# remix=no\
# master=${MULTIIN}\
# master_channel_map=${CH3},${CH4}\
# channel_map=front-left,front-right

pacmd load-module module-remap-source\
channels=2\
source_name=orem1\
source_properties=device.description=Rem1Send\
remix=no\
master=${MULTIIN}\
master_channel_map=${CH5},${CH6}\
channel_map=front-left,front-right

pacmd load-module module-remap-source\
channels=1\
source_name=orem2\
source_properties=device.description=Rem2Send\
remix=no\
master=${MULTIIN}\
master_channel_map=${CH7}\
channel_map=mono

pacmd load-module module-remap-source\
channels=1\
source_name=orem3\
source_properties=device.description=Rem3Send\
remix=no\
master=${MULTIIN}\
master_channel_map=${CH8}\
channel_map=mono

#combined (multi-out)
pacmd unload-module module-combine-sink
echo COMBINE: BuildIn+Aux1
sleep 1
pacmd load-module module-combine-sink\
sink_name=ii_main_aux1\
sink_properties=device.description=BuiltIn+Aux1\
adjust_time=2\
slaves=alsa_output.pci-0000_00_1f.3.analog-stereo,iaux1

echo "###########sinks#############"
pactl list sinks short
echo "##########sources############"
pactl list sources short