There is way too much magic that simply isn’t documented about this system.

Multiple Outputs

One of my computers has a graphics card that can drive multiple HDMI channels, including their sound channels. In order to be able to simultaneously route audio out multiple channels (e.g., to two different monitors), I had to fiddle deeper in the system than I would have liked.

First, I created a custom PulseAudio “profile”, /usr/share/pulseaudio/alsa-mixer/profile-sets/nwf-multi-hdmi.conf. This consists of a number of “Mappings” stanzas and a “Profile” stanza:

[General]
auto-profiles = no

[Mapping hdmi-surround71]
description = Digital Surround 7.1 (HDMI)
device-strings = hdmi:%f
paths-output = hdmi-output-0
channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe,side-left,side-right
priority = 8
direction = output
exact-channels = no

[Mapping hdmi-surround71-extra1]
description = Digital Surround 7.1 (HDMI 2)
device-strings = hdmi:%f,1
paths-output = hdmi-output-1
channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe,side-left,side-right
priority = 6
direction = output
exact-channels = no

[Mapping hdmi-surround71-extra2]
description = Digital Surround 7.1 (HDMI 3)
device-strings = hdmi:%f,2
paths-output = hdmi-output-2
channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe,side-left,side-right
priority = 6
direction = output
exact-channels = no

[Mapping hdmi-surround71-extra3]
description = Digital Surround 7.1 (HDMI 4)
device-strings = hdmi:%f,3
paths-output = hdmi-output-3
channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe,side-left,side-right
priority = 6
direction = output
exact-channels = no

# Stitch together the mappings to make a profile

[Profile nwf-multi-hdmi]
description = NWF Multi HDMI
output-mappings = hdmi-surround71 hdmi-surround71-extra1 hdmi-surround71-extra2 hdmi-surround71-extra3
priority=1

Then, to tell PulseAudio to actually use this profile, a udev rule is required:

SUBSYSTEM=="sound" SUBSYSTEMS=="pci" KERNEL=="card*" ATTRS{vendor}=="0x1002" ATTRS{device}=="0xaaf0" ACTION=="change" ENV{PULSE_PROFILE_SET}="nwf-multi-hdmi.conf"