W PulseAudio do każdej karty dźwiękowej przypisany jest zestaw profili. Zestaw profili zawiera wiele profili, a są to profile widoczne podczas wyświetlania kart (lub przeglądania różnych interfejsów GUI PulseAudio).
Istnieje default
profil, który przede wszystkim zawiera rzeczy przydatne dla analogowego wyjścia dźwięku. Istnieje również extra-hdmi
profil, który jest automatycznie stosowany do niektórych wyjść HDMI i daje opcje do 5.1. Oba te profile są niestety włączone/usr/share/pulseaudio/alsa-mixer/profile-sets
, dlatego nie można ich tak naprawdę edytować ( zgłosiłem w tej sprawie błąd debugowania 736708 ). Zgodnie z dokumentacją można wyłączyć automatyczne wykrywanie oparte na udev i ręcznie skonfigurować wszystko - pozwala to określić pełna ścieżka do profilu. Okazuje się jednak, że chociaż nie jest to udokumentowane, udev może również podać pełną ścieżkę.
Skonfiguruj regułę udev, aby przypisać zestaw profili
Przypisujesz zestaw profili do reguły udev, ustawiając PULSE_PROFILE_SET
zmienną środowiskową udev. Udokumentowano, że pobiera on tylko plik z wyżej wymienionego /usr
podkatalogu, ale działa również pełna ścieżka. W moim przypadku utworzyłem tę regułę:
# cat /etc/udev/rules.d/95-local-pulseaudio.rules
ATTRS{vendor}=="0x8086", ATTRS{device}=="0x1c20", ENV{PULSE_PROFILE_SET}="/etc/pulse/my-hdmi.conf"
Musisz użyć odpowiedniego numeru dostawcy PCI i numeru urządzenia, które możesz łatwo uzyskać lspci -nn
.
Po utworzeniu reguły udev możesz ją natychmiast zastosować za pomocą udevadm trigger -ssound
. Prawdopodobnie będziesz również chciał odbudować initramfs ( update-initramfs -u
)
Potwierdź, że reguła udev zaczęła obowiązywać udevadm info --query=all --path /sys/class/sound/card0
(oczywiście użyj odpowiedniego numeru karty). Powinieneś zobaczyć E: PULSE_PROFILE_SET=/etc/pulse/my-hdmi.conf
na wyjściu. Jeśli nie, nie kontynuuj. To nie zadziała. Coś jest nie tak z twoimi regułami udev (a może ich nie uruchomiłeś - zawsze możesz spróbować zrestartować komputer).
Utwórz plik /etc/pulse/my-hdmi.conf
Uwaga: Mapa kanałów jest najwyraźniej specyficzna dla systemu. Musisz eksperymentować, aby dostosować go do swojego systemu. Miałem szczęście, mój układ 7.1 polega na upuszczeniu ostatnich elementów do zbudowania 5.1, 4.0 itd. Instrukcje znajdują się poniżej.
Głównie jest to dużo kopiowania i wklejania. Każda sekcja różni się (a) nazwą, (b) opisem, (c) mapą kanałów, (d) [opcjonalnie] priorytetem.
[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
Teraz, aby to przetestować:
- Uruchom ponownie PulseAudio:
pulseaudio -k
jako normalny użytkownik, zakładając, że używasz demonów na użytkownika (domyślnie). Uruchom ponownie, nawet prosty aplay -l
zadziała.
- Przejdź do profilu 7.1. Osobiście robiłem to kiedyś
pactl set-card-profile 0 "output:hdmi-surround-71"
, ale GUI również będzie działał doskonale.
- Uruchom
speaker-test -c 8 -t w
. Powinien zacząć ogłaszać nazwy mówców, miejmy nadzieję, że z każdego z nich będzie mieć prawidłową nazwę. Jeśli nazwy nie pochodzą od właściwego głośnika, musisz zmienić mapę kanałów, aby je poprawić. Po każdej zmianie mapy kanałów musisz ponownie uruchomić PulseAudio.
Premia! Bardziej przydatne ustawienia
W /etc/pulse/daemon.conf
, istnieje kilka ustawień może chcesz zmienić:
enable-remixing
- Jeśli jest włączony, sygnał stereo będzie odtwarzany z lewego kanału ze wszystkich trzech głośników z lewej strony, a prawy kanał z kanałów z głośników prawych. Jeśli wyłączone, wyjdzie tylko z dwóch pierwszych. Pamiętaj, że możesz także zmienić profil na stereofoniczny (aby wysyłać dźwięk stereo tylko przez port HDMI i pozwolić odbiornikowi zdecydować, jak zamapować go na głośniki).
enable-lfe-remixing
- Podobne, ale do remiksowania z kanałem LFE (subwoofer).
default-sample-format
- Jeśli konfiguracja HDMI obsługuje dźwięk większy niż 16-bitowy, możesz zwiększyć tę wartość do s32le
(domyślnie s16le
).
default-sample-rate
, alternate-sample-rate
- Możesz zamienić je (a może nawet całkowicie wyłączyć 44,1 KHz), jeśli najczęściej używasz materiałów źródłowych DVD, które zazwyczaj mają częstotliwość 48 KHz. Lub, jeśli obsługuje go odbiornik HDMI, możesz przejść do 192 kHz. Zauważ, że 176 KHz ma tę zaletę, że jest nawet wielokrotnością zarówno 44,1, jak i 48 KHz. Zobacz poniżej, jak ustalić, co obsługuje twój odbiornik
default-sample-channels
- To naprawdę nie ma znaczenia. Profil prawdopodobnie go przesłania ...
Oczywiście po zmianie tego pliku musisz ponownie uruchomić PulseAudio.
Bonus Znowu! Zobacz, co obsługuje Twój odbiornik
Istnieją eld.*
pliki, w /proc/asound
których powiedzą ci, co obsługuje drugi koniec łącza HDMI. Na przykład:
# 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
Widzisz więc, że mój odbiornik obsługuje LPCM (Linear PCM, tj. Nieskompresowany dźwięk) do 8 kanałów, 192 KHz, dźwięk 24-bitowy. Obsługuje również AC3, DTS, DSD, DD +, DTS-HD i Dolby TrueHD. Więc jeśli mam pliki w nich zakodowane, mogę przekazywać te formaty (jeśli mój odtwarzacz multimediów to oczywiście obsługuje. mpv
Prawdopodobnie tak jest).