Dans PulseAudio, chaque carte son est associée à un jeu de profils. Un jeu de profils contient plusieurs profils, et ce sont les profils que vous voyez lorsque vous listez les cartes (ou lorsque vous regardez dans les différentes interfaces graphiques PulseAudio).
Il existe un default
profil, qui contient principalement des éléments utiles pour la sortie audio analogique. Il existe également un extra-hdmi
profil qui est automatiquement appliqué à certaines sorties HDMI et donnera des options jusqu'à 5.1. Ces deux profils sont malheureusement dans /usr/share/pulseaudio/alsa-mixer/profile-sets
, et donc vous ne pouvez pas vraiment les modifier (j'ai déposé le bogue de débogage 736708 à ce sujet.) Selon la documentation, vous pouvez désactiver la découverte automatique basée sur udev et configurer manuellement tout - cela vous permet de spécifier le chemin complet vers un profil. Mais il s'avère que bien qu'il ne soit pas documenté, udev peut également spécifier un chemin complet.
Configurer une règle udev pour attribuer un ensemble de profils
Vous affectez un jeu de profils dans une règle udev en définissant la PULSE_PROFILE_SET
variable d'environnement udev. Il est documenté de ne prendre qu'un fichier dans le /usr
sous - répertoire susmentionné , mais un chemin complet fonctionne également. Dans mon cas, j'ai créé cette règle:
# cat /etc/udev/rules.d/95-local-pulseaudio.rules
ATTRS{vendor}=="0x8086", ATTRS{device}=="0x1c20", ENV{PULSE_PROFILE_SET}="/etc/pulse/my-hdmi.conf"
Vous devrez utiliser les numéros de fournisseur et de périphérique PCI appropriés, que vous pouvez facilement obtenir auprès de lspci -nn
.
Après avoir créé la règle udev, vous pouvez l'appliquer immédiatement avec udevadm trigger -ssound
. Vous voudrez probablement aussi reconstruire vos initramfs ( update-initramfs -u
)
Confirmez que la règle udev a pris effet avec udevadm info --query=all --path /sys/class/sound/card0
(utilisez le numéro de carte approprié, bien sûr). Vous devriez voir E: PULSE_PROFILE_SET=/etc/pulse/my-hdmi.conf
dans la sortie. Sinon, ne continuez pas. Ça ne marchera pas. Quelque chose ne va pas avec vos règles udev (ou peut-être que vous ne les avez pas déclenchées - vous pouvez toujours essayer de redémarrer).
Créez le fichier /etc/pulse/my-hdmi.conf
Remarque: La carte des canaux est apparemment spécifique au système. Vous devrez expérimenter pour l'adapter à votre système. J'ai eu de la chance, ma disposition 7.1 implique simplement de laisser tomber les derniers éléments pour construire 5.1, 4.0, etc. Les instructions sont ci-dessous.
C'est beaucoup de copier-coller, surtout. Chaque section diffère par (a) le nom, (b) la description, (c) la carte des canaux, (d) la priorité [facultative].
[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
Maintenant, pour tester cela:
- Redémarrez PulseAudio:, en
pulseaudio -k
tant qu'utilisateur normal, en supposant que vous utilisez des démons par utilisateur (par défaut). Redémarrez-le, même un simple aplay -l
fonctionnera.
- Passez au profil 7.1. Personnellement, je faisais
pactl set-card-profile 0 "output:hdmi-surround-71"
cela, mais une interface graphique fonctionnera parfaitement bien aussi.
- Courez
speaker-test -c 8 -t w
. Il devrait commencer à annoncer les noms des orateurs, avec un peu de chance le nom correct de chaque orateur. Si les noms ne proviennent pas du haut-parleur correct, vous devrez changer la carte des canaux pour les obtenir correctement. Après chaque changement de carte des canaux, vous devez redémarrer PulseAudio à nouveau.
Prime! Paramètres plus utiles
Dans /etc/pulse/daemon.conf
, vous pouvez modifier quelques paramètres:
enable-remixing
- Si cette option est activée, un signal stéréo aura son canal gauche sur les trois haut-parleurs de gauche et son canal droit dans les haut-parleurs de droite. S'il est éteint, il ne sortira que des deux premiers. Notez que vous pouvez également changer le profil en stéréo (pour envoyer uniquement du son stéréo par le port HDMI et laisser votre récepteur décider comment le mapper aux haut-parleurs).
enable-lfe-remixing
- Similaire, mais pour le remixage sur le canal LFE (subwoofer).
default-sample-format
- Si votre configuration HDMI prend en charge un son supérieur à 16 bits, vous souhaiterez peut-être l'augmenter s32le
(par défaut s16le
).
default-sample-rate
, alternate-sample-rate
- Vous voudrez peut-être les échanger (et peut-être même désactiver complètement 44,1 kHz) si vous utilisez principalement du matériel source DVD qui est généralement de 48 kHz. Ou, si votre récepteur HDMI le prend en charge, vous pouvez aller jusqu'à 192 kHz. Notez que 176KHz a la belle propriété d'être un multiple pair de 44,1 et 48KHz. Voir ci-dessous pour savoir ce que votre récepteur prend en charge
default-sample-channels
- Ça ne semble pas vraiment avoir d'importance. Le profil l'emporte probablement ...
Naturellement, vous devrez redémarrer PulseAudio après avoir modifié ce fichier.
Bonus encore! Voir ce que votre récepteur prend en charge
Il existe des eld.*
fichiers /proc/asound
qui vous indiquent ce que l'autre extrémité d'une liaison HDMI prétend prendre en charge. Par exemple:
# 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
Vous pouvez donc voir que mon récepteur prend en charge le LPCM (PCM linéaire, c'est-à-dire l'audio non compressé) jusqu'à 8 canaux, 192 KHz, son 24 bits. Il prend également en charge AC3, DTS, DSD, DD +, DTS-HD et Dolby TrueHD. Donc, si j'ai des fichiers encodés dans ceux-ci, je peux passer à travers ces formats (si mon lecteur multimédia le prend en charge, bien sûr. mpv
Probablement).