Answers:
在PulseAudio中,每个声卡都有与之关联的配置文件集。一个配置文件集包含多个配置文件,这些是列出卡时(或在各种PulseAudio GUI中查看时)看到的配置文件。
有一个default
配置文件,主要包含对模拟声音输出有用的内容。还有一个extra-hdmi
配置文件会自动应用于某些HDMI输出,并提供高达5.1的选项。不幸的是/usr/share/pulseaudio/alsa-mixer/profile-sets
,这两个配置文件都在中,因此您无法真正对其进行编辑(我已将其提交给Debug Bug736708。)根据文档,您可以禁用基于udev的自动发现,并手动配置所有内容-让我们指定个人资料的完整路径。但是事实证明,虽然没有记录,但udev也可以指定完整路径。
您可以通过设置PULSE_PROFILE_SET
udev环境变量来在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
可以)。