Answers:
在PulseAudio中,每个声卡都有与之关联的配置文件集。一个配置文件集包含多个配置文件,这些是列出卡时(或在各种PulseAudio GUI中查看时)看到的配置文件。
有一个default配置文件,主要包含对模拟声音输出有用的内容。还有一个extra-hdmi配置文件会自动应用于某些HDMI输出,并提供高达5.1的选项。不幸的是/usr/share/pulseaudio/alsa-mixer/profile-sets,这两个配置文件都在中,因此您无法真正对其进行编辑(我已将其提交给Debug Bug736708。)根据文档,您可以禁用基于udev的自动发现,并手动配置所有内容-让我们指定个人资料的完整路径。但是事实证明,虽然没有记录,但udev也可以指定完整路径。
您可以通过设置PULSE_PROFILE_SETudev环境变量来在udev规则中分配配置文件集。据记录,该文件只能在上述/usr子目录中使用文件,但完整路径也可以使用。就我而言,我创建了以下规则:
# cat /etc/udev/rules.d/95-local-pulseaudio.rules 
ATTRS{vendor}=="0x8086", ATTRS{device}=="0x1c20", ENV{PULSE_PROFILE_SET}="/etc/pulse/my-hdmi.conf"
您将需要使用适当的PCI供应商和设备编号,可以从中轻松获得lspci -nn。
创建udev规则后,您可以立即使用udevadm trigger -ssound。您可能还希望重建initramfs(update-initramfs -u)
确认udev规则对生效udevadm info --query=all --path /sys/class/sound/card0(当然,请使用适当的卡号)。您应该E: PULSE_PROFILE_SET=/etc/pulse/my-hdmi.conf在输出中看到。如果没有,请不要继续。它不会工作。udev规则出了点问题(或者您可能没有触发它们-您可以随时尝试重新启动)。
注意:通道图显然是特定于系统的。您需要进行实验以使其适合您的系统。我很幸运,我的7.1布局仅涉及删除最终的项目以构建5.1、4.0等。说明如下。
大多数情况下,这是很多复制和粘贴。每个部分的区别在于(a)名称,(b)描述,(c)频道映射,(d)[可选]优先级。
[General]
auto-profiles = yes
[Mapping hdmi-stereo]
device-strings = hdmi:%f
channel-map = front-left,front-right
description = Digital Stereo (HDMI)
priority = 4
direction = output
paths-output = hdmi-output-0
[Mapping hdmi-surround-40]
device-strings = hdmi:%f
channel-map = front-left,front-right,rear-left,rear-right
description = Digital Quadrophonic (HDMI)
priority = 1
direction = output
paths-output = hdmi-output-0
[Mapping hdmi-surround-51]
device-strings = hdmi:%f
channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe
description = Digital Surround 5.1 (HDMI)
priority = 2
direction = output
paths-output = hdmi-output-0
[Mapping hdmi-surround-71]
description = Digital Surround 7.1 (HDMI)
device-strings = hdmi:%f
channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe,side-left,side-right
priority = 3
direction = output
paths-output = hdmi-output-0
现在,测试一下:
pulseaudio -k以普通用户的身份重新启动PulseAudio:,并假设您使用的是每用户守护程序(默认)。重新启动它,即使是简单的aplay -l也可以。pactl set-card-profile 0 "output:hdmi-surround-71"这样做过,但是GUI也可以很好地工作。speaker-test -c 8 -t w。它应该开始宣布发言人姓名,希望能从每个发言人中选出正确的姓名。如果名称不是来自正确的扬声器,则必须更改通道图以使其正确。更改每个通道映射后,必须再次重新启动PulseAudio。在中/etc/pulse/daemon.conf,您可能需要更改一些设置:
enable-remixing—如果打开,则立体声信号的左声道将从所有三个左扬声器中播放,而右声道则从右扬声器中播放。如果关闭,它只会排在前两个。请注意,您还可以将配置文件更改为立体声(仅从HDMI端口发送立体声,并让接收器决定如何将其映射到扬声器)。
enable-lfe-remixing —类似,但用于混音至LFE(低音炮)通道。
default-sample-format—如果您的HDMI设置支持大于16位的音频,则可能需要将其增加到s32le(从默认值开始s16le)。
default-sample-rate,alternate-sample-rate—如果您主要使用通常为48KHz的DVD来源的材料,则可能希望交换它们(甚至可能完全禁用44.1KHz)。或者,如果您的HDMI接收器支持它,则可以一直提高到192KHz。请注意,176KHz具有44.1和48KHz的偶数倍的良好特性。请参阅下文,了解如何确定您的接收器支持什么
default-sample-channels—似乎并不重要。个人资料可能会覆盖它...
自然,您必须在更改此文件后重新启动PulseAudio。
有些eld.*文件/proc/asound告诉您HDMI链接的另一端声称支持什么。例如:
# cat /proc/asound/card0/eld#3.0 
monitor_present         1
eld_valid               1
monitor_name            TX-SR606
connection_type         HDMI
eld_version             [0x2] CEA-861D or below
edid_version            [0x3] CEA-861-B, C or D
manufacture_id          0xcb3d
product_id              0x863
port_id                 0x0
support_hdcp            0
support_ai              1
audio_sync_delay        0
speakers                [0x4f] FL/FR LFE FC RL/RR RLC/RRC
sad_count               8
sad0_coding_type        [0x1] LPCM
sad0_channels           2
sad0_rates              [0x1ee0] 32000 44100 48000 88200 96000 176400 192000
sad0_bits               [0xe0000] 16 20 24
sad1_coding_type        [0x1] LPCM
sad1_channels           8
sad1_rates              [0x1ee0] 32000 44100 48000 88200 96000 176400 192000
sad1_bits               [0xe0000] 16 20 24
sad2_coding_type        [0x2] AC-3
sad2_channels           8
sad2_rates              [0xe0] 32000 44100 48000
sad2_max_bitrate        640000
sad3_coding_type        [0x7] DTS
sad3_channels           8
sad3_rates              [0xc0] 44100 48000
sad3_max_bitrate        1536000
sad4_coding_type        [0x9] DSD (One Bit Audio)
sad4_channels           6
sad4_rates              [0x40] 44100
sad5_coding_type        [0xa] E-AC-3/DD+ (Dolby Digital Plus)
sad5_channels           8
sad5_rates              [0xc0] 44100 48000
sad6_coding_type        [0xb] DTS-HD
sad6_channels           8
sad6_rates              [0x1ec0] 44100 48000 88200 96000 176400 192000
sad7_coding_type        [0xc] MLP (Dolby TrueHD)
sad7_channels           8
sad7_rates              [0x1480] 48000 96000 192000
因此,您可以看到我的接收器在多达8个通道,192KHz,24位声音的情况下支持LPCM(线性PCM,即未压缩的音频)。它还支持AC3,DTS,DSD,DD +,DTS-HD和Dolby TrueHD。因此,如果我使用这些文件编码,则可以传递那些格式(如果我的媒体播放器支持的话,当然mpv可以)。