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 default
profilo, che contiene principalmente cose utili per l'uscita audio analogica. Esiste anche un extra-hdmi
profilo 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_SET
variabile di ambiente udev. È documentato per prendere solo un file nella suddetta /usr
sottodirectory, 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.conf
nell'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:
- Riavvia PulseAudio:
pulseaudio -k
come normale utente, supponendo che tu stia utilizzando demoni per utente (impostazione predefinita). Riavvia di nuovo, anche un semplice aplay -l
funzionerà.
- Passa al profilo 7.1. Personalmente, lo facevo
pactl set-card-profile 0 "output:hdmi-surround-71"
, ma anche una GUI funzionerà perfettamente.
- 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/asound
cui 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. mpv
Probabilmente lo fa).