Come configuro PulseAudio per 7.1 Surround Sound su HDMI?


10

Ho la mia macchina collegata tramite HDMI a un ricevitore. Ma quando provo a usare più di due canali con PulseAudio, ne ottengo solo due. pacmd list cardsmostra la scheda, ma non mostra un profilo HDMI con più di due canali.

Ho confermato che il suono 7.1 funziona tramite ALSA:

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

Produce elettricità statica che gira intorno alla stanza.

Risposte:


20

In PulseAudio, ad ogni scheda audio è associato un set di profili. Un set di profili contiene più profili, e questi sono i profili che vedi quando elenchi le schede (o quando guardi nelle varie GUI di PulseAudio).

C'è un defaultprofilo, che contiene principalmente cose utili per l'uscita audio analogica. Esiste anche un extra-hdmiprofilo che viene applicato automaticamente ad alcune uscite HDMI e offre opzioni fino a 5.1. Sfortunatamente /usr/share/pulseaudio/alsa-mixer/profile-sets, entrambi questi profili sono presenti e quindi non è possibile modificarli (ho archiviato il bug di debug 736708 a riguardo.) Secondo la documentazione, è possibile disabilitare il rilevamento automatico basato su udev e configurare manualmente tutto, che consente di specificare percorso completo di un profilo. Ma si scopre che, sebbene non sia documentato, anche udev può specificare un percorso completo.

Imposta una regola udev per assegnare un set di profili

È possibile assegnare un set di profili in una regola udev impostando la PULSE_PROFILE_SETvariabile di ambiente udev. È documentato per prendere solo un file nella suddetta /usrsottodirectory, ma funziona anche un percorso completo. Nel mio caso, ho creato questa regola:

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

Sarà necessario utilizzare i numeri di fornitore e dispositivo PCI appropriati, da cui è possibile ottenere facilmente lspci -nn.

Dopo aver creato la regola udev, puoi applicarla immediatamente con udevadm trigger -ssound. Probabilmente vorrai ricostruire anche i tuoi initramfs ( update-initramfs -u)

Conferma che la regola udev ha avuto effetto con udevadm info --query=all --path /sys/class/sound/card0(usa il numero di carta appropriato, ovviamente). Dovresti vedere E: PULSE_PROFILE_SET=/etc/pulse/my-hdmi.confnell'output. In caso contrario, non continuare. Non funzionerà Qualcosa non va nelle tue regole udev (o forse non le hai attivate, puoi sempre provare a riavviare).

Creare il file /etc/pulse/my-hdmi.conf

Nota: la mappa dei canali è apparentemente specifica del sistema. Dovrai sperimentare per farlo nel modo giusto per il tuo sistema. Sono stato fortunato, il mio layout 7.1 prevede solo il rilascio degli elementi finali per creare 5.1, 4.0, ecc. Le istruzioni sono riportate di seguito.

Questo è molto copia e incolla, principalmente. Ogni sezione differisce per (a) nome, (b) descrizione, (c) mappa dei canali, (d) priorità [opzionale].

[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

Ora, per testare questo:

  1. Riavvia PulseAudio: pulseaudio -kcome normale utente, supponendo che tu stia utilizzando demoni per utente (impostazione predefinita). Riavvia di nuovo, anche un semplice aplay -lfunzionerà.
  2. Passa al profilo 7.1. Personalmente, lo facevo pactl set-card-profile 0 "output:hdmi-surround-71", ma anche una GUI funzionerà perfettamente.
  3. Corri speaker-test -c 8 -t w. Dovrebbe iniziare a annunciare i nomi dei relatori, si spera il nome corretto da ciascun relatore. Se i nomi non provengono dall'altoparlante corretto, dovrai cambiare la mappa dei canali per ottenerli giusti. Dopo ogni modifica della mappa dei canali, è necessario riavviare PulseAudio.

Bonus! Altre impostazioni utili

In /etc/pulse/daemon.conf, ci sono alcune impostazioni che potresti voler modificare:

enable-remixing- Se questa opzione è attiva, un segnale stereo avrà il suo canale sinistro riprodotto da tutti e tre i diffusori sinistri e il suo canale destro dai diffusori destri. Se spento, ne usciranno solo i primi due. Nota che puoi anche cambiare il profilo in stereo (per inviare solo audio stereo dalla porta HDMI e lasciare che il tuo ricevitore decida come mapparlo agli altoparlanti).

enable-lfe-remixing - Simile, ma per il remix del canale LFE (subwoofer).

default-sample-format- Se la tua configurazione HDMI supporta l'audio superiore a 16 bit, potresti volerlo aumentare a s32le(dall'impostazione predefinita s16le).

default-sample-rate, alternate-sample-rate- Potresti voler scambiare questi (e forse anche disabilitare completamente 44.1KHz) se usi principalmente materiale di origine DVD che è in genere 48KHz. Oppure, se il tuo ricevitore HDMI lo supporta, puoi arrivare fino a 192KHz. Nota che 176KHz ha la bella proprietà di essere anche un multiplo di 44.1 e 48KHz. Vedi sotto per come determinare cosa supporta il tuo ricevitore

default-sample-channels- Non sembra davvero importare. Il profilo probabilmente lo ignora ...

Naturalmente, dovrai riavviare PulseAudio dopo aver modificato questo file.

Bonus ancora! Vedere cosa supporta il ricevitore

Ci sono eld.*file in /proc/asoundcui ti dicono cosa sostiene l'altra estremità di un collegamento HDMI. Per esempio:

# 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

Quindi puoi vedere che il mio ricevitore supporta LPCM (Linear PCM, ovvero audio non compresso) fino a 8 canali, 192 KHz, audio a 24 bit. Supporta anche AC3, DTS, DSD, DD +, DTS-HD e Dolby TrueHD. Quindi, se ho file codificati in questi, posso passare attraverso quei formati (se il mio lettore multimediale lo supporta, ovviamente. mpvProbabilmente lo fa).


Grazie mille per questo, ho lottato per un po 'con l'installazione. Per me le regole di udev non si sono applicate prima, ho dovuto riavviare il PC per questo. Un problema però ... @derobert Sembra che non riesca a passare il flusso audio X265, 7.1. Devo solo decodificarlo tramite PC e trasferire il flusso audio. (Il mio ricevitore è un 5.1 però) Hai qualche suggerimento? Grazie!
dimuthu,

@dimuthu H.265 (x265) è un codec video, non un codec audio. Nota che PulseAudio ha solo un supporto limitato per il pass-through, deve essere abilitato (il più semplice con la GUI) e potrebbe essere necessario impostarlo su stereo (solo un dettaglio dell'implementazione di come funziona il pass-through, non un vero limite al conteggio dei canali ). Mi sembra di ricordare una pagina sulla wiki di Kodi con dettagli.
derobert,

1
@dimuthu (Mi dispiace per il secondo commento, l'app SE si arresta in modo anomalo durante il tentativo di modifica ...) Immagino che un ricevitore 5.1 supporti solo AC3 e DTS. Non, ad esempio, AAC. A meno che non ti consenta di utilizzare alcune funzionalità sul ricevitore che non puoi utilizzare con PCM multicanale, non è molto utile passare. Almeno non tramite HDMI.
derobert,

sì, hai ragione, sto passando attraverso l'audio impostando PulseAudio su Stereo HDMI. Questo è l'unico modo per ottenere audio bitstream sul ricevitore. Ho anche approfondito AAC e anche se Yahama non ha menzionato nulla nelle loro specifiche, ho trovato alcune prove online per capire che è disponibile solo nei modelli di fascia alta. Sto perdendo così tanti dettagli decodificandolo con HTPC? L'ho impostato su 7.1Ch / 192KHz, 24 bit. Grazie!
dimuthu,

@dimuthu non dovresti davvero perdere nulla decodificando sul PC fintanto che hai impostato un convertitore di frequenza di qualità ragionevole in PulseAudio. Bene, nient'altro che un po 'di tempo della CPU (specialmente a quella frequenza di campionamento, che senza dubbio supera di gran lunga il materiale sorgente)
derobert
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.