Comment configurer PulseAudio pour un son surround 7.1 via HDMI?

10

J'ai ma machine connectée via HDMI à un récepteur. Mais lorsque j'essaie d'utiliser plus de deux canaux avec PulseAudio, je n'en reçois que deux. pacmd list cardsaffiche la carte, mais n'affiche pas de profil HDMI avec plus de deux canaux.

J'ai confirmé que le son 7.1 fonctionne via ALSA:

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

Produit de l'électricité statique qui parcourt la pièce.

derobert
la source

Réponses:

20

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 defaultprofil, qui contient principalement des éléments utiles pour la sortie audio analogique. Il existe également un extra-hdmiprofil 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_SETvariable d'environnement udev. Il est documenté de ne prendre qu'un fichier dans le /usrsous - 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.confdans 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:

  1. Redémarrez PulseAudio:, en pulseaudio -ktant qu'utilisateur normal, en supposant que vous utilisez des démons par utilisateur (par défaut). Redémarrez-le, même un simple aplay -lfonctionnera.
  2. 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.
  3. 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/asoundqui 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. mpvProbablement).

derobert
la source
Merci un million pour cela, luttons depuis un moment avec la configuration. Pour moi, les règles udev ne s'appliquaient pas en premier, j'ai dû redémarrer le PC pour cela. Un problème cependant .. @derobert On dirait que je ne peux pas passer par X265, flux audio 7.1. Je dois juste le décoder à l'aide d'un PC et transférer le flux audio. (Mon récepteur est un 5.1 cependant) Avez-vous des suggestions? Merci!
dimuthu
@dimuthu H.265 (x265) est un codec vidéo, pas un codec audio. Notez que PulseAudio n'a qu'un support limité pour le passage, il doit être activé (plus facile avec l'interface graphique), et il peut avoir besoin d'être réglé sur stéréo (juste un détail d'implémentation du fonctionnement du passage, pas une vraie limite sur le nombre de canaux ). Il me semble me souvenir d'une page sur le wiki Kodi avec des détails.
derobert
1
@dimuthu (Désolé pour le deuxième commentaire, l'application SE plante en essayant de modifier ...) Je suppose qu'un récepteur 5.1 ne prend en charge que AC3 et DTS. Pas, par exemple, AAC. À moins qu'il ne vous permette d'utiliser certaines fonctionnalités du récepteur que vous ne pouvez pas utiliser avec le PCM multicanal, il n'y a pas grand-chose à traverser. Du moins pas via HDMI.
derobert
oui vous avez raison, je suis en fait en passant par l'audio en réglant PulseAudio sur HDMI stéréo. C'est la seule façon dont je pourrais envoyer l'audio bitstream au récepteur. J'ai également exploré AAC et même si Yahama n'a rien mentionné dans leurs spécifications, j'ai trouvé des preuves en ligne pour penser qu'il n'est disponible que dans les modèles haut de gamme. Suis-je en train de perdre autant de détails en le décodant en utilisant HTPC? Je l'ai réglé à 7,1 canaux / 192 kHz, 24 bits. Merci!
dimuthu
@dimuthu vous ne devriez pas vraiment perdre quoi que ce soit en décodant sur le PC tant que vous avez un convertisseur de taux de qualité raisonnable réglé dans PulseAudio. Eh bien, rien sauf du temps CPU (en particulier à ce taux d'échantillonnage, qui dépasse sans aucun doute de loin le matériel source)
derobert