Recent NVIDIA GPUs include an audio controller that hosts a number of different ALSA PCM objects. For example, consider the following output from "aplay -L": hdmi:CARD=NVidia_1,DEV=0 HDA NVidia, NVIDIA HDMI HDMI Audio Output hdmi:CARD=NVidia_1,DEV=1 HDA NVidia, NVIDIA HDMI HDMI Audio Output hdmi:CARD=NVidia_1,DEV=2 HDA NVidia, NVIDIA HDMI HDMI Audio Output hdmi:CARD=NVidia_1,DEV=3 HDA NVidia, NVIDIA HDMI HDMI Audio Output Each of these may correspond to a specific connector on the graphics board. However, "pactl list" and various other mechanisms show only a single Pulse sink for this card: Sink #0 Name: alsa_output.pci-0000_01_00.1.hdmi-stereo device.string = "hdmi:1" Sink #1 ... // from another card If I hack /usr/share/pulseaudio/alsa-mixer/profile-sets/default.conf to change hdmi-stereo's device-strings value to e.g. "hdmi:%f,0", "hdmi:%f,1", etc., then I can cause pulseaudio to open whichever subdevice I wish. This proves to me that this is simply an enumeration issue and nothing more fundamental. Is this simply something that's not been implemented in the pulseaudio server, or is there a bug that's preventing the server from exposing a sink per ALSA device/subdevice? Looking at the code, I believe this is because pa_alsa_profile_set_probe is called once per card, and probes ALSA device names of the form "hdmi:%f" where %f is simply replaced by the card number; there is no attempt to iterate over N devices within an ALSA card, or even M subdevices within an ALSA device. Perhaps the whole (or a significant portion) of the body of pa_alsa_profile_set_probe should be wrapped in: for device in all-devices-of(card): for subdevice in all-subdevices-of(card, device) // existing for all profiles loop here and device, subdevice also passed into pa_alsa_open_by_template, and interpolated into the device name string? -- nvpublic