From d5390c7199cff99e532b6918f4cb8175e0d7084f Mon Sep 17 00:00:00 2001 From: Forest Date: Thu, 6 Apr 2023 18:10:39 -0700 Subject: [PATCH] alsa-profiles: use SB Audigy PCM mixer controls Creative Labs Sound Blaster Audigy cards (snd_emu10k1 driver) expose mixer controls named 'PCM Front', 'PCM Rear', etc. in addition to the more common 'Front', 'Rear', etc. The latter seem to be intended for a stereo-to-all-speakers mirroring mode that we do not use, and have no effect when we adjust them. https://docs.kernel.org/sound/cards/audigy-mixer.html We therefore define a custom mixer path for Audigy devices, using the PCM mixer controls. This has been tested on an Audigy 5/Rx. Based on a brief look at the ALSA driver, I think all Audigy devices (vendor 0x1102, device 0x0004 or 0x0008) have the same PCM controls, making this change probably safe for our existing Audigy udev rules. Relevant kernel files: sound/pci/emu10k1/emu10k1_main.c sound/pci/emu10k1/emufx.c include/sound/emu10k1.h Fixes #2934 --- .../mixer/paths/analog-output-audigy.conf | 55 +++++++++++++++++++ .../alsa/mixer/profile-sets/audigy.conf | 20 +++---- 2 files changed, 65 insertions(+), 10 deletions(-) create mode 100644 spa/plugins/alsa/mixer/paths/analog-output-audigy.conf diff --git a/spa/plugins/alsa/mixer/paths/analog-output-audigy.conf b/spa/plugins/alsa/mixer/paths/analog-output-audigy.conf new file mode 100644 index 000000000..8b77befa9 --- /dev/null +++ b/spa/plugins/alsa/mixer/paths/analog-output-audigy.conf @@ -0,0 +1,55 @@ +; Mixer path for the Sound Blaster Audigy series, which uses the EMU10K2 DSP. +; We target 'PCM Front' and similarly named controls instead of 'Front' et al. +; because the latter have no effect on volume, apparently intended for a +; stereo-to-all-speakers mirroring mode that we do not use. +; https://docs.kernel.org/sound/cards/audigy-mixer.html +; +; See analog-output.conf.common for an explanation on the directives + +[General] +priority = 99 +description-key = analog-output + +[Element Master] +switch = mute +volume = merge +override-map.1 = all +override-map.2 = all-left,all-right + +[Element PCM Front] +switch = mute +volume = merge +override-map.1 = all-front +override-map.2 = front-left,front-right + +[Element PCM Rear] +switch = mute +volume = merge +override-map.1 = all-rear +override-map.2 = rear-left,rear-right + +[Element PCM Surround] +switch = mute +volume = merge +override-map.1 = all-rear +override-map.2 = rear-left,rear-right + +[Element PCM Side] +switch = mute +volume = merge +override-map.1 = all-side +override-map.2 = side-left,side-right + +[Element PCM Center] +switch = mute +volume = merge +override-map.1 = all-center +override-map.2 = all-center,all-center + +[Element PCM LFE] +switch = mute +volume = merge +override-map.1 = lfe +override-map.2 = lfe,lfe + +.include analog-output.conf.common diff --git a/spa/plugins/alsa/mixer/profile-sets/audigy.conf b/spa/plugins/alsa/mixer/profile-sets/audigy.conf index 043596e30..19e84830f 100644 --- a/spa/plugins/alsa/mixer/profile-sets/audigy.conf +++ b/spa/plugins/alsa/mixer/profile-sets/audigy.conf @@ -15,7 +15,8 @@ ; Creative Sound Blaster Audigy product line ; -; These are just copies of the mappings we find in default.conf, with the +; These are just copies of the mappings we find in default.conf, with +; an analog mixer path targeting the Audigy driver's PCM outputs, and the ; small change of making analog-stereo and analog-mono non-fallback mappings. ; This is needed because these cards only support duplex profiles with mono ; inputs, and in the default configuration, with stereo being a fallback @@ -30,7 +31,7 @@ auto-profiles = yes [Mapping analog-stereo] device-strings = hw:%f channel-map = front-left,front-right -paths-output = analog-output analog-output-lineout analog-output-speaker analog-output-headphones analog-output-headphones-2 +paths-output = analog-output-audigy analog-output-lineout analog-output-speaker analog-output-headphones analog-output-headphones-2 paths-input = analog-input-front-mic analog-input-rear-mic analog-input-internal-mic analog-input-dock-mic analog-input analog-input-mic analog-input-linein analog-input-aux analog-input-video analog-input-tvtuner analog-input-fm analog-input-mic-line analog-input-headphone-mic analog-input-headset-mic priority = 1 @@ -38,43 +39,42 @@ priority = 1 [Mapping analog-mono] device-strings = hw:%f channel-map = mono -paths-output = analog-output analog-output-lineout analog-output-speaker analog-output-headphones analog-output-headphones-2 analog-output-mono +paths-output = analog-output-audigy analog-output-lineout analog-output-speaker analog-output-headphones analog-output-headphones-2 analog-output-mono paths-input = analog-input-front-mic analog-input-rear-mic analog-input-internal-mic analog-input-dock-mic analog-input analog-input-mic analog-input-linein analog-input-aux analog-input-video analog-input-tvtuner analog-input-fm analog-input-mic-line analog-input-headset-mic priority = 1 -# The rest of these are identical to what's in default.conf [Mapping analog-surround-21] device-strings = surround21:%f channel-map = front-left,front-right,lfe -paths-output = analog-output analog-output-lineout analog-output-speaker +paths-output = analog-output-audigy analog-output-lineout analog-output-speaker priority = 13 direction = output [Mapping analog-surround-40] device-strings = surround40:%f channel-map = front-left,front-right,rear-left,rear-right -paths-output = analog-output analog-output-lineout analog-output-speaker +paths-output = analog-output-audigy analog-output-lineout analog-output-speaker priority = 12 direction = output [Mapping analog-surround-41] device-strings = surround41:%f channel-map = front-left,front-right,rear-left,rear-right,lfe -paths-output = analog-output analog-output-lineout analog-output-speaker +paths-output = analog-output-audigy analog-output-lineout analog-output-speaker priority = 13 direction = output [Mapping analog-surround-50] device-strings = surround50:%f channel-map = front-left,front-right,rear-left,rear-right,front-center -paths-output = analog-output analog-output-lineout analog-output-speaker +paths-output = analog-output-audigy analog-output-lineout analog-output-speaker priority = 12 direction = output [Mapping analog-surround-51] device-strings = surround51:%f channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe -paths-output = analog-output analog-output-lineout analog-output-speaker +paths-output = analog-output-audigy analog-output-lineout analog-output-speaker priority = 13 direction = output @@ -82,7 +82,7 @@ direction = output device-strings = surround71:%f channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe,side-left,side-right description = Analog Surround 7.1 -paths-output = analog-output analog-output-lineout analog-output-speaker +paths-output = analog-output-audigy analog-output-lineout analog-output-speaker priority = 12 direction = output