Wie konfiguriere ich PulseAudio für 7.1 Surround Sound über HDMI?

10

Ich habe mein Gerät über HDMI an einen Receiver angeschlossen. Wenn ich jedoch versuche, mit PulseAudio mehr als zwei Kanäle zu verwenden, erhalte ich nur zwei. pacmd list cardsZeigt die Karte an, zeigt jedoch kein HDMI-Profil mit mehr als zwei Kanälen.

Ich habe bestätigt, dass 7.1-Sound über ALSA funktioniert:

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

Erzeugt statische Aufladungen, die sich im Raum bewegen.

derobert
quelle

Antworten:

20

In PulseAudio ist jeder Soundkarte ein Profilsatz zugeordnet. Ein Profilsatz enthält mehrere Profile. Dies sind die Profile, die Sie beim Auflisten der Karten (oder beim Betrachten der verschiedenen PulseAudio-GUIs) sehen.

Es gibt ein defaultProfil, das hauptsächlich nützliche Elemente für die analoge Tonausgabe enthält. Es gibt auch ein extra-hdmiProfil, das automatisch auf einige HDMI-Ausgänge angewendet wird und Optionen bis zu 5.1 bietet. Diese beiden Profile befinden sich leider in /usr/share/pulseaudio/alsa-mixer/profile-setsund können daher nicht wirklich bearbeitet werden (ich habe den Debug-Fehler 736708 dazu angemeldet .) Gemäß der Dokumentation können Sie die udev-basierte automatische Erkennung deaktivieren und alles manuell konfigurieren - damit können Sie das angeben vollständiger Pfad zu einem Profil. Es stellt sich jedoch heraus, dass udev, obwohl dies nicht dokumentiert ist, auch einen vollständigen Pfad angeben kann.

Richten Sie eine udev-Regel ein, um einen Profilsatz zuzuweisen

Sie weisen einen Profilsatz in einer udev-Regel zu, indem Sie die PULSE_PROFILE_SETudev-Umgebungsvariable festlegen . Es ist dokumentiert, dass nur eine Datei im oben genannten /usrUnterverzeichnis abgelegt wird , aber ein vollständiger Pfad funktioniert auch. In meinem Fall habe ich diese Regel erstellt:

# cat /etc/udev/rules.d/95-local-pulseaudio.rules 
ATTRS{vendor}=="0x8086", ATTRS{device}=="0x1c20", ENV{PULSE_PROFILE_SET}="/etc/pulse/my-hdmi.conf"

Sie müssen die entsprechenden PCI-Hersteller- und Gerätenummern verwenden, die Sie leicht erhalten können lspci -nn.

Nachdem Sie die udev-Regel erstellt haben, können Sie sie sofort mit anwenden udevadm trigger -ssound. Sie werden wahrscheinlich auch Ihre initramfs neu erstellen wollen ( update-initramfs -u)

Bestätigen Sie, dass die udev-Regel mit wirksam wurde udevadm info --query=all --path /sys/class/sound/card0(verwenden Sie natürlich die entsprechende Kartennummer). Sie sollten E: PULSE_PROFILE_SET=/etc/pulse/my-hdmi.confin der Ausgabe sehen. Wenn nicht, fahren Sie nicht fort. Es wird nicht funktionieren. Mit Ihren udev-Regeln stimmt etwas nicht (oder Sie haben sie nicht ausgelöst - Sie können jederzeit versuchen, einen Neustart durchzuführen).

Erstellen Sie die Datei /etc/pulse/my-hdmi.conf

Hinweis: Die Kanalkarte ist anscheinend systemspezifisch. Sie müssen experimentieren, um es für Ihr System richtig zu machen. Ich hatte Glück, mein 7.1-Layout beinhaltet nur das Löschen der endgültigen Elemente zum Erstellen von 5.1, 4.0 usw. Anweisungen finden Sie unten.

Dies ist meistens viel Kopieren und Einfügen. Jeder Abschnitt unterscheidet sich in (a) Name, (b) Beschreibung, (c) Kanalkarte, (d) [optional] Priorität.

[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

Um dies zu testen:

  1. Starten Sie PulseAudio neu: Gehen Sie pulseaudio -kals normaler Benutzer davon aus, dass Sie Daemons pro Benutzer verwenden (Standardeinstellung). Starten Sie es erneut, auch ein einfaches aplay -lwird funktionieren.
  2. Wechseln Sie zum 7.1-Profil. Persönlich habe ich das gemacht pactl set-card-profile 0 "output:hdmi-surround-71", aber eine GUI wird auch perfekt funktionieren.
  3. Ausführen speaker-test -c 8 -t w. Es sollte anfangen, Sprechernamen anzukündigen, hoffentlich den richtigen Namen von jedem Sprecher. Wenn die Namen nicht vom richtigen Sprecher stammen, müssen Sie die Channel-Map ändern, um sie richtig zu machen. Nach jedem Kanalkartenwechsel müssen Sie PulseAudio erneut starten.

Bonus! Weitere nützliche Einstellungen

In /etc/pulse/daemon.confgibt es einige Einstellungen, die Sie möglicherweise ändern möchten:

enable-remixing- Wenn diese Option aktiviert ist, wird bei einem Stereosignal der linke Kanal aus allen drei linken Lautsprechern und der rechte Kanal aus den rechten Lautsprechern abgespielt. Wenn ausgeschaltet, kommt es nur aus den ersten beiden heraus. Beachten Sie, dass Sie das Profil auch in Stereo ändern können (um nur Stereoton über den HDMI-Anschluss zu senden und Ihren Receiver entscheiden zu lassen, wie er den Lautsprechern zugeordnet werden soll).

enable-lfe-remixing - Ähnlich, jedoch zum Remixen auf den LFE-Kanal (Subwoofer).

default-sample-format- Wenn Ihr HDMI-Setup mehr als 16-Bit-Audio unterstützt, können Sie dies auf s32le(von der Standardeinstellung s16le) erhöhen .

default-sample-rate, alternate-sample-rate- Möglicherweise möchten Sie diese austauschen (und möglicherweise sogar 44,1 kHz vollständig deaktivieren), wenn Sie hauptsächlich DVD-Quellmaterial verwenden, das normalerweise 48 kHz beträgt. Wenn Ihr HDMI-Receiver dies unterstützt, können Sie bis zu 192 kHz erreichen. Beachten Sie, dass 176 kHz die nette Eigenschaft hat, ein gerades Vielfaches von 44,1 und 48 kHz zu sein. Im Folgenden erfahren Sie, wie Sie feststellen können, was Ihr Receiver unterstützt

default-sample-channels- Scheint nicht wirklich wichtig zu sein. Profil überschreibt es wahrscheinlich ...

Natürlich müssen Sie PulseAudio nach dem Ändern dieser Datei neu starten.

Nochmals Bonus! Sehen, was Ihr Empfänger unterstützt

Es gibt eld.*Dateien, in /proc/asounddenen Sie erfahren, was das andere Ende eines HDMI-Links zu unterstützen behauptet. Beispielsweise:

# 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

Sie sehen also, dass mein Receiver LPCM (Linear PCM, dh unkomprimiertes Audio) mit bis zu 8 Kanälen, 192 kHz und 24-Bit-Sound unterstützt. Es unterstützt auch AC3, DTS, DSD, DD +, DTS-HD und Dolby TrueHD. Wenn ich also Dateien in diesen codiert habe, kann ich diese Formate durchlaufen (wenn mein Media Player dies natürlich unterstützt, mpvwahrscheinlich auch).

derobert
quelle
Vielen Dank für eine Million, die seit einiger Zeit mit dem Setup zu kämpfen haben. Für mich galten die udev-Regeln nicht zuerst, dafür musste ich den PC neu starten. Ein Problem jedoch .. @derobert Sieht so aus, als ob ich den X265, 7.1-Audiostream nicht passieren kann. Ich muss es nur mit dem PC dekodieren und den Audiostream übertragen. (Mein Empfänger ist allerdings ein 5.1) Haben Sie Vorschläge? Vielen Dank!
Dimuthu
@dimuthu H.265 (x265) ist ein Video-Codec, kein Audio-Codec. Beachten Sie, dass PulseAudio nur eine eingeschränkte Unterstützung für den Durchgang bietet, aktiviert sein muss (am einfachsten mit der GUI) und möglicherweise auf Stereo eingestellt sein muss (nur ein Implementierungsdetail für die Funktionsweise des Durchgangs, keine echte Begrenzung der Kanalanzahl ). Ich erinnere mich an eine Seite im Kodi-Wiki mit Details.
Derobert
1
@dimuthu (Entschuldigung für den zweiten Kommentar, SE-App stürzt beim Bearbeiten ab ...) Ich würde vermuten, dass ein 5.1-Empfänger nur AC3 und DTS unterstützt. Nicht zum Beispiel AAC. Wenn Sie nicht einige Funktionen des Empfängers verwenden können, die Sie mit Mehrkanal-PCM nicht verwenden können, ist es nicht sinnvoll, diese zu durchlaufen. Zumindest nicht über HDMI.
Derobert
Ja, Sie haben Recht, ich gehe tatsächlich durch Audio, indem ich PulseAudio auf Stereo HDMI stelle. Nur so kann ich Bitstream-Audio zum Receiver übertragen. Ich habe mich auch mit AAC befasst und obwohl Yahama nichts in ihren Spezifikationen erwähnt hat, habe ich online einige Beweise gefunden, um herauszufinden, dass es nur in High-End-Modellen verfügbar ist. Verliere ich so viele Details, indem ich sie mit HTPC dekodiere? Ich habe es auf 7,1Ch / 192KHz, 24-Bit eingestellt. Vielen Dank!
Dimuthu
@dimuthu Sie sollten nicht wirklich etwas verlieren, wenn Sie auf dem PC dekodieren, solange Sie einen angemessenen Qualitätsratenkonverter in PulseAudio eingestellt haben. Nun, nichts außer etwas CPU-Zeit (besonders bei dieser Abtastrate, die zweifellos das Quellmaterial weit übersteigt)
derobert