der*_*ert 10 audio pulseaudio hdmi
我的机器通过 HDMI 连接到接收器。但是当我尝试在 PulseAudio 中使用两个以上的通道时,我只能得到两个。pacmd list cards
显示卡,但不显示具有两个以上通道的 HDMI 配置文件。
我已经确认 7.1 声音通过 ALSA 工作:
pasuspender -- speaker-test -D hdmi -c 8 -m FL,FC,FR,RR,RRC,RLC,RL,LFE
Run Code Online (Sandbox Code Playgroud)
产生环绕房间的静电。
der*_*ert 20
在 PulseAudio 中,每个声卡都有一个与之关联的配置文件集。配置文件集包含多个配置文件,这些配置文件是您在列出卡时(或在查看各种 PulseAudio GUI 时)看到的配置文件。
有一个default
配置文件,主要包含对模拟声音输出有用的东西。还有一个extra-hdmi
配置文件会自动应用于某些 HDMI 输出,并提供高达 5.1 的选项。这两个配置文件是不幸的/usr/share/pulseaudio/alsa-mixer/profile-sets
,因此你不能真正对其进行编辑(我提起调试错误736708关于这一点)。根据该文件,您可以禁用的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"
Run Code Online (Sandbox Code Playgroud)
您将需要使用适当的 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
Run Code Online (Sandbox Code Playgroud)
现在,要测试这个:
pulseaudio -k
,作为您的普通用户,假设您使用的是每用户守护进程(默认)。再次启动它,即使是一个简单的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
Run Code Online (Sandbox Code Playgroud)
所以你可以看到我的接收器支持 LPCM(线性 PCM,即未压缩音频),最多 8 个通道,192KHz,24 位声音。它还支持 AC3、DTS、DSD、DD+、DTS-HD 和 Dolby TrueHD。因此,如果我将文件编码为这些格式,我可以通过这些格式(当然,如果我的媒体播放器支持它。mpv
可能会)。