Jak skonfigurować PulseAudio dla dźwięku przestrzennego 7.1 przez HDMI?


10

Mam urządzenie podłączone przez HDMI do odbiornika. Ale kiedy próbuję użyć więcej niż dwóch kanałów w PulseAudio, dostaję tylko dwa. pacmd list cardspokazuje kartę, ale nie pokazuje profilu HDMI z więcej niż dwoma kanałami.

Potwierdziłem, że dźwięk 7.1 działa przez ALSA:

pasuspender -- speaker-test -D hdmi -c 8 -m FL,FC,FR,RR,RRC,RLC,RL,LFE

Powoduje powstanie ładunków elektrostatycznych wokół pomieszczenia.

Odpowiedzi:


20

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 defaultprofil, który przede wszystkim zawiera rzeczy przydatne dla analogowego wyjścia dźwięku. Istnieje również extra-hdmiprofil, 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_SETzmienną środowiskową udev. Udokumentowano, że pobiera on tylko plik z wyżej wymienionego /usrpodkatalogu, 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.confna 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ć:

  1. Uruchom ponownie PulseAudio: pulseaudio -kjako normalny użytkownik, zakładając, że używasz demonów na użytkownika (domyślnie). Uruchom ponownie, nawet prosty aplay -lzadziała.
  2. 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.
  3. 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/asoundktó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. mpvPrawdopodobnie tak jest).


Dziękuję za to milionowi, przez jakiś czas walczyłem z konfiguracją. Dla mnie reguły udev nie obowiązywały najpierw, musiałem zrestartować komputer. Jeden problem jednak .. @derobert Wygląda na to, że nie mogę przejść przez strumień audio X265, 7.1. Po prostu muszę go zdekodować za pomocą komputera i przenieść strumień audio. (Mój odbiornik to 5.1). Czy masz jakieś sugestie? Dzięki!
dimuthu,

@dimuthu H.265 (x265) to kodek wideo, a nie kodek audio. Zauważ, że PulseAudio ma tylko ograniczoną obsługę przejścia, musi być włączony (najłatwiejszy z GUI) i może wymagać ustawienia stereo (tylko szczegół implementacji działania przejścia, a nie rzeczywiste ograniczenie liczby kanałów ). Wydaje mi się, że przypominam sobie stronę na wiki Kodi ze szczegółami.
derobert,

1
@dimuthu (Przepraszamy za drugi komentarz, aplikacja SE ulega awarii podczas próby edycji ...) Domyślam się, że odbiornik 5.1 obsługuje tylko AC3 i DTS. Nie na przykład AAC. O ile nie pozwala na korzystanie z niektórych funkcji odbiornika, których nie można używać z wielokanałowym PCM, nie ma większego sensu do przejścia. Przynajmniej nie przez HDMI.
derobert,

tak, masz rację, w rzeczywistości przechodzę przez dźwięk, ustawiając PulseAudio na Stereo HDMI. To jedyny sposób, w jaki mogłem uzyskać strumień bitstream audio do odbiornika. Dokonałem również przeglądu AAC i chociaż Yahama nie wspomniał nic w swoich specyfikacjach, znalazłem w Internecie pewne dowody na to, że jest on dostępny tylko w wyższych modelach. Czy tracę tyle szczegółów, dekodując je za pomocą HTPC? Ustawiłem go na 7.1Ch / 192KHz, 24-bit. Dzięki!
dimuthu

@dimuthu tak naprawdę nie powinieneś nic tracić dekodując na komputerze, o ile masz ustawiony rozsądny konwerter jakości w PulseAudio. Cóż, nic poza czasem procesora (szczególnie przy tej częstotliwości próbkowania, która bez wątpienia znacznie przekracza materiał źródłowy)
derobert
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.