Как мне настроить PulseAudio для 7.1 Surround Sound по HDMI?

10

Моя машина подключена через 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

Создает статический заряд вокруг комнаты.

derobert
источник

Ответы:

20

В 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

Теперь, чтобы проверить это:

  1. Перезапустите PulseAudio: pulseaudio -kкак обычный пользователь, если вы используете демоны для каждого пользователя (по умолчанию). Запустите его снова, даже простой aplay -lбудет работать.
  2. Переключитесь на профиль 7.1. Лично я pactl set-card-profile 0 "output:hdmi-surround-71"делал это раньше , но графический интерфейс тоже будет работать отлично.
  3. Беги 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-ratealternate-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Возможно.)

derobert
источник
Огромное спасибо за это, некоторое время боролся с настройкой. Для меня правила udev не применяются в первую очередь, для этого мне пришлось перезагрузить компьютер. Одна проблема, хотя .. @ derobert Похоже, я не могу пройти через аудиопоток X265, 7.1. Мне просто нужно декодировать его с помощью ПК и передавать аудиопоток. (Хотя мой приемник 5.1) Есть ли у вас какие-либо предложения? Спасибо!
Димуту
@dimuthu H.265 (x265) - это видеокодек, а не аудиокодек. Обратите внимание, что PulseAudio имеет ограниченную поддержку для прохода, его нужно включить (проще всего с графическим интерфейсом) и, возможно, его нужно установить на стерео (просто подробности реализации того, как работает проход, а не реальное ограничение на количество каналов). ). Кажется, я вспомнил страницу в вики Kodi с подробностями.
Дероберт
1
@dimuthu (извините за второй комментарий, приложение SE падает, пытаясь редактировать ...) Я думаю, что приемник 5.1 поддерживает только AC3 и DTS. Не, например, AAC. Если это не позволяет вам использовать некоторые функции на приемнике, которые вы не можете использовать с многоканальным PCM, не так уж много смысла проходить через. По крайней мере, не через HDMI.
Дероберт
да, вы правы, я фактически передаю звук, установив PulseAudio в режим стерео HDMI. Это единственный способ, с помощью которого я могу получить битовый звук на ресивер. Также изучил AAC, и хотя Yahama ничего не упомянула в своих спецификациях, я нашел в Интернете некоторые доказательства того, что он доступен только в моделях более высокого уровня. Я теряю так много деталей, декодируя это с помощью HTPC? Я установил его на 7.1Ch / 192KHz, 24-битный. Спасибо!
Димуту
@dimuthu Вы не должны ничего терять при декодировании на ПК, если в PulseAudio установлен конвертер с приемлемым уровнем качества. Ну, ничего, кроме некоторого процессорного времени (особенно при той частоте дискретизации, которая, несомненно, намного превышает исходный материал)
Дероберт