В PulseAudio каждая звуковая карта имеет набор профилей, связанный с ней. Набор профилей содержит несколько профилей, и это те профили, которые вы видите при перечислении карт (или при просмотре в различных графических интерфейсах PulseAudio).
Есть default
профиль, который в первую очередь содержит полезные вещи для вывода аналогового звука. Существует также extra-hdmi
профиль, который автоматически применяется к некоторым выходам HDMI и предоставляет параметры до 5.1. К сожалению /usr/share/pulseaudio/alsa-mixer/profile-sets
, оба эти профиля находятся в наличии , и поэтому вы не можете их отредактировать (об этом я подал отладочную ошибку 736708. ) Согласно документации, вы можете отключить автообнаружение на основе udev и вручную настроить все, что позволяет вам указать полный путь к профилю. Но оказывается, что, хотя это не задокументировано, udev также может указать полный путь.
Установите правило udev для назначения набора профилей
Вы назначаете профиль в правиле udev, устанавливая PULSE_PROFILE_SET
переменную окружения 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 (или, может быть, вы их не вызывали - вы всегда можете попробовать перезагрузиться).
Создайте файл /etc/pulse/my-hdmi.conf
Примечание. Карта каналов, по-видимому, зависит от системы. Вам нужно будет поэкспериментировать, чтобы сделать это правильно для вашей системы. Мне повезло, мой макет 7.1 просто включает в себя удаление финальных элементов для сборки 5.1, 4.0 и т. Д. Инструкции приведены ниже.
Это много копий и вставок, в основном. Каждый раздел отличается (а) именем, (б) описанием, (в) канальной картой, (г) [необязательным] приоритетом.
[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:
pulseaudio -k
как обычный пользователь, если вы используете демоны для каждого пользователя (по умолчанию). Запустите его снова, даже простой aplay -l
будет работать.
- Переключитесь на профиль 7.1. Лично я
pactl set-card-profile 0 "output:hdmi-surround-71"
делал это раньше , но графический интерфейс тоже будет работать отлично.
- Беги
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
- Возможно , вы захотите поменять их местами (и, возможно, даже полностью отключить 44,1 кГц), если вы в основном используете материал DVD-источника, который обычно имеет частоту 48 кГц. Или, если ваш HDMI-ресивер поддерживает его, вы можете работать до 192 кГц. Обратите внимание, что 176 кГц обладает приятным свойством быть кратным как 44,1, так и 48 кГц. Ниже описано, как определить, что поддерживает ваш приемник.
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
Таким образом, вы можете видеть, что мой ресивер поддерживает LPCM (Linear PCM, т.е. несжатый звук) на 8 каналах, 192 кГц, 24-битный звук. Он также поддерживает AC3, DTS, DSD, DD +, DTS-HD и Dolby TrueHD. Поэтому, если у меня есть файлы, закодированные в этих файлах, я могу проходить через эти форматы (если мой медиаплеер, конечно, поддерживает. mpv
Возможно.)