08/09/2018

 Linux underground

Avoir du son en hdmi avec un contrôleur Intel HDA

Configuration

Avec ce genre de matériel, dans mon cas un Shuttle DS57U5, on a, en fait, 2 cartes son :

$ cat /proc/asound/cards
 0 [HDMI           ]: HDA-Intel - HDA Intel HDMI
                      HDA Intel HDMI at 0xaa234000 irq 47
 1 [PCH            ]: HDA-Intel - HDA Intel PCH
                      HDA Intel PCH at 0xaa230000 irq 46

Il semblerait que sur certains PC comme le mien, la carte HDMI ait une multitude de périphériques (device) de playback. Le programme aplay fourni avec ALSA nous les renseignent :

$ aplay -l
**** Liste des Périphériques Matériels PLAYBACK ****
carte 0: HDMI [HDA Intel HDMI], périphérique 3: HDMI 0 [HDMI 0]
  Sous-périphériques: 1/1
  Sous-périphérique #0: subdevice #0
carte 0: HDMI [HDA Intel HDMI], périphérique 7: HDMI 1 [HDMI 1]
  Sous-périphériques: 1/1
  Sous-périphérique #0: subdevice #0
carte 0: HDMI [HDA Intel HDMI], périphérique 8: HDMI 2 [HDMI 2]
  Sous-périphériques: 1/1
  Sous-périphérique #0: subdevice #0
carte 0: HDMI [HDA Intel HDMI], périphérique 9: HDMI 3 [HDMI 3]
  Sous-périphériques: 1/1
  Sous-périphérique #0: subdevice #0
carte 0: HDMI [HDA Intel HDMI], périphérique 10: HDMI 4 [HDMI 4]
  Sous-périphériques: 1/1
  Sous-périphérique #0: subdevice #0
carte 1: PCH [HDA Intel PCH], périphérique 0: ALC662 rev3 Analog [ALC662 rev3 Analog]
  Sous-périphériques: 1/1
  Sous-périphérique #0: subdevice #0
carte 1: PCH [HDA Intel PCH], périphérique 1: ALC662 rev3 Digital [ALC662 rev3 Digital]
  Sous-périphériques: 1/1
  Sous-périphérique #0: subdevice #0

C'est sans doute cette multitude de périphériques qui posent parfois problème à ALSA. Et afin d'aider ALSA à s'y retrouver, nous allons créer un fichier /etc/asound.conf avec les informations relayées par le programme aplay :

pcm.analog {
	type hw
	card 1
	device 0 }

pcm.digital {
	type hw
	card 1
	device 1 }

pcm.hdmi0 {
	type hw
	card 0
	device 3 }

pcm.hdmi1 {
	type hw
	card 0
	device 7 }

pcm.hdmi2 {
	type hw
	card 0
	device 8 }

pcm.hdmi3 {
	type hw
	card 0
	device 9 }

pcm.hdmi4 {
	type hw
	card 0
	device 10 }

Tester tous les périphériques HDMI jusqu'à avoir du son (chez moi c'est hdmi1) :
$ aplay -D plug:hdmi1 ~/fichier_son.wav

Quand vous aurez trouvé le bon, rajoutez-le à la fin du fichier /etc/asound.conf :

pcm.!default {
    type  plug
    slave.pcm "hdmi1"
}

Après ce dernier réglage, vous devriez avoir du son dans votre navigateur. Essayez par exemple cette page pour vérifier.

Que vérifier si rien ne va…

Avec le programme
$ alsamixer
vérifiez bien que les toute les sorties S/PDIF de la carte HDMI sont activées (00 et non MM).

La configuration des modules du kernel (sélectionnez-les tous si vous n'êtes pas sûr de votre électronique. Quand tout fonctionnera bien, il sera toujours temps de faire un lsmod pour voir ce qui est indispensable.

<M> HD Audio PCI
[*] Build hwdep interface for HD-audio driver
[*] Allow dynamic codec reconfiguration
[*] Support digital beep via input layer
(1)   Digital beep registration mode (0=off, 1=on)
[ ] Support initialization patch loading for HD-audio
<M> Build Realtek HD-audio codec support
< > Build Analog Device HD-audio codec support
< > Build IDT/Sigmatel HD-audio codec support
< > Build VIA HD-audio codec support
<M> Build HDMI/DisplayPort HD-audio codec support
< > Build Cirrus Logic codec support
< > Build Conexant HD-audio codec support
< > Build Creative CA0110-IBG codec support
< > Build Creative CA0132 codec support
< > Build C-Media HD-audio codec support
< > Build Silicon Labs 3054 HD-modem codec support
-M- Enable generic HD-audio codec parser
(0) Default time-out for HD-audio power-save mode

Remarque

On a vu plus haut que la 1ère carte son (et donc celle par défaut) était la carte HDMI. Si vous vouliez changer cela, ajoutez les 2 lignes suivantes à la fin du fichier /etc/modprobe.d/alsa.conf :

options snd-hda-intel id=PCH index=0
options snd-hda-intel id=HDMI index=1

Je n'en vois pas trop l'utilité mais gardez à l'esprit que mon but est d'utiliser le son de mon PC uniquement via la sortie HDMI. Cette page d'informations devrait sans doute être améliorée pour ceux qui voudraient utiliser indifféremment la sortie classique et la sortie HDMI.

Liens

Le lien qui m'a sauvé la vie (les 2 URLs expliquent le même problème par la même personne) :
https://unix.stackexchange.com/questions/29185/how-to-check-why-sound-over-hdmi-doesnt-work
https://forums.gentoo.org/viewtopic-t-911378.html


Contact