Mixer du 5.1 en 2.0 avec ALSA
Le 16 juin 2008, à 10:13 par Ulhume...

Autant je ne suis pas totalement persuadé de l'apport de PulseAudio (dans Mandriva), autant ALSA (Advanced Linux Sound Architecture) a été en son temps, et est toujours, une réelle avancée par rapport au vénérable OSS (Open Sous System). Et une bonne manière de s'en convaincre est de voir comment l'utiliser pour traiter l'épineux problèmes d'une bande son 5.1 "innécoutable" sur un bon vieux système Stéréo.

Les systèmes Audio de Linux

OSS est le système "ancestral" de gestion des périphériques Audio pour UNIX en général, de Linux en particulier. Son écriture remonte à 1992 et il est systématiquement utilisé dans Linux jusqu'à l'arrivée d'ALSA dans les kernel 2.5. ALSA n'est alors qu'une option qui n'est le choix par défaut qu'à partir du noyau 2.6. La raison de ce revirement semblerait surtout venir d'un changement de licence, conduisant à une adoption massive d'ALSA dans les distributions. Un petit peu le même phénomène que nous avions déjà observé avec XFree86 et XOrg, sauf qu'ALSA est tout sauf un fork d'OSS.

Démarré par Jaroslav Kysela en 1998, ALSA n'est alors qu'un simple pilote pour la mythique Gravis Ultrasound. Pilote qui va rapidement devenir un système puissant et complet à base de plugins pouvant servir d'interface matériel à des systèmes audio aussi professionnels que le célèbre serveur Jack.

Pour information, Jack, PulseAudio, aRTS, ou encore eSound, sont des serveurs audio qui utilisent OSS, ALSA ou autre pour leur entrées/sorties physiques.

Le problèmes DVD

De nombreux DVD ne disposent pas de piste audio en 2.0, c'est à dire compatible avec un système Hi-Fi stéréo. En revanche, à peu près tous fournissent du 5.1 (ou plus) utilisable sur les systèmes à 6 ou 7 sorties. Le problème pour un audiophile est qu'il aime son système HiFi et ses deux enceintes choisies avec soin. Un goût qui ne devrait pas être incompatible avec le visionnage de temps à autre d'un bon film. Et pourtant, ça ne marche pas car les bandes son 5.1 sont mixées de telle sorte que les voix des personnages passent majoritairement sur des enceintes qui pour nous, n'existent pas. Du coup, les dialogues sont lointains, difficilement audibles. Et si l'on monte le volume, la moindre explosion provoque une vague de contestation justifiée du voisinage.

La solution est donc de demander gentiment à ALSA de remixer le son 5.1 en quelque chose de compatible avec du 2.0 (downmix).

Profils d'écoute

Le problème majeur d'ALSA n'est pas sa puissance, mais sa documentation quasi inexistante et relativement inbitable. Il y a bien un wiki mais dés que l'on s'attaquer à des choses un peu velues, cela devient vite la jungle.

Pour régler notre problèmes, nous allons utiliser le puissant système de profils d'écoute. Ajouter un tel profil est moins compliqué... que de le rédiger. Il suffit en effet d'éditer (ou de créer le cas échéant) le fichier /etc/asound.conf. Voyons donc à quoi ressemblerait un profil de transformation de son 5.1 en 2.0 :

  1. pcm.movies
  2.         {
  3.           type route
  4.           slave.pcm surround51
  5.           slave.channels 6
  6.  
  7.           ttable.0.0 0.75
  8.           ttable.1.1 0.75
  9.           ttable.2.0 0.75
  10.           ttable.3.1 0.75
  11.           ttable.4.0 0.8
  12.           ttable.4.1 0.8
  13.           ttable.5.0 0.675
  14.           ttable.5.1 0.675
  15.         }

Comme indiqué par la première instruction, notre profile est une route, c'est à dire que l'on va créer un chemin virtuel entre le son version 5.1 (slave.pcm surround51) en 6 canaux (slave.channels 6) et sa sortie en 2.0.

Ensuite avec l'instruction ttable.x.y z nous dirigeons le son du canal original x vers le canal destination y en appliquant un facteur sur le volume z. Pour les 4 premières voies, ce volume est donc réduit de 75%. Le canal central (5) est lui réduit à 80% et le LFE est réduit à 67.5%. Ces facteurs sont issues de recherches sur le Grand Net et adapté par mes soins à mes petites oreilles.

Lorsqu'ALSA va utiliser ce profile, il va donc fonctionner comme une table de mixage et fusionner pour chaque voie de sortie, les sons venant des différents ttable aux volumes indiqués.

Notez qu'il est possible grâce à ce système de profiles de lecture de faire strictement la même chose, mais dans l'autre sens. Si vous avez un système audio à 6 canaux et que vous écoutez un fichier musical à 2 canaux, vous pouvez utiliser toutes vos enceintes avec le profile suivant :

  1. pcm.music
  2.         {
  3.          type route
  4.          slave.pcm surround51
  5.          slave.channels 6
  6.          ttable.0.0 1
  7.          ttable.1.1 1
  8.          ttable.0.2 1
  9.          ttable.1.3 1
  10.          ttable.0.4 0.5
  11.          ttable.1.4 0.5
  12.          ttable.0.5 0.5
  13.          ttable.1.5 0.5
  14.         }

La source de nos routes x est toujours 0 ou 1, logique. Et nous ventilons ces deux sources sur les 6 canaux en appliquant une fois encore des changements de volume.

Utilisation des profiles

Déjà pour tester les profiles, le plus simple est de disposer d'un fichier audio de test au format 5.1. On en trouve des tonnes via google. Une fois que vous en avez un, vous pouvez utiliser la commande de lecture audio d'ALSA aplay :

  1.    aplay -D movies fichier_5_1.wav
  2. # ou
  3.    aplay -D music fichier_stéréo.wav

Le -D signifie device car pour ALSA, votre profile est comme une nouvelle périphérique de sortie ce qui le rend facile à utiliser avec un autre lecteur multimédia, par exemple mplayer :

mplayer -channels 6 -ao alsa:device=movies dvd://

Et il en va de même pour VLC ou autre en vérifiant dans leurs documentations comment se modifie le paramétrage du pilote ALSA.

Pour modifier les paramétres du mixer en ligne de commande : amixer sset "Duplicate Front" off

Conclusion

Dire qu'ALSA est simple à utiliser serait mentir. Ce type de paramétrage me rappelle furieusement IPTables et les quelques cauchemars que j'ai eu avec. Mais ce qui est certain, c'est que l'outil est très puissant et permet avec quelques efforts de couvrir les configuration audio les plus farfelues ou les plus exigeantes.

Commentaires

Dab, le 16 June, 2008 - 22:49

Intéressant tout ça, sais tu si ce problème apparait aussi avec pulseaudio ? j'ai un son vraiment très faible sur mon unique enceinte connectée à la sortie jack, ceci pourrait peut être expliquer cela. Vais p'tet tenter un retour vers Alsa et attendre que le pb se résolve seul lors d'un prochain upgrade Smiling

Ulhume, le 16 June, 2008 - 23:07

PulseAudio, à ce que j'en ai compris, est juste un serveur comme eSound. A ce titre je ne comprends pas bien l'intérêt de son adoption si ce n'est pour avoir un contrôle de volume par application.

Maintenant je ne sais pas s'il effectue des traitements sur le signal, j'espère que non en fait. Personnellement je suis plus en train de chercher à le virer de ma mandriva Wink

t3g , le 28 September, 2008 - 21:06

Si on utilise VLC pour lire ses DVD, ne convertit-il pas le 5.1 en 2.0? Je reste aussi sur une paire d'enceintes "potables" plutôt qu'un kit 5.1, et je n'ai jamais pensé que ça posait problème.

Sinon, quand on réalise ses propres encodes, le son est converti en 2.0 sans perte de qualité? J'utilise DGIndex sous wine pour transcoder l'audio en wav 2.0, puis un simple faac avant de remuxer - y a-t-il un inconvénient à cette solution?

Merci.

Ulhume, le 28 September, 2008 - 22:22

@t3g à l'évidence non, il ne convertit pas car c'est ce que j'utilise pour lire mes DVD et c'est la raison même de ma bidouille, je perdais le volume des paroles au profit de l'ambiance...

Pour la conversion, le seul inconvénient est de perdre 3 pistes sur 5, mais on s'en fout un peu vu si on ne lira jamais le résultat sur autre chose qu'une chaîne stéréo. Mis à part ce détail, côté qualité il ne devrait pas y avoir de pertes sous réserve que l'outil soit bien configuré/développé pour correctement doser les voies. J'ai mis du temps à trouver les réglages que je donne ici de sorte à ce que cela soit "naturel".

t3g , le 29 September, 2008 - 01:42

Dans VLC, click droit sur la vidéo, Audio>Périphérique audio>Stéréo (on peut aussi choisir 2+2, 5.1, Mono, sortie SPDIF).

Et effectivement, le 5.1 je le vire vu qu'entre un kit 5.1 pourri et deux bonnes enceintes, je ferai le même choix demain comme dans 10 ans Wink

t3g , le 29 September, 2008 - 01:45

Par contre, ta solution permet de faire ses propres choix si ceux par défaut ne conviennent pas. Sauf s'il se trouve que les développeurs des applis aient fait les mêmes recherches sur le Net, et abouti aux mêmes valeurs. Il faudra que je teste si j'arrive à mettre en place ta configuration pour comparer, voir changer les valeurs pour certains films où les acteurs parlent dans leur barbe Wink

Ulhume, le 29 September, 2008 - 08:30

@t3G Ah ok, donc c'est faisable avec vlc (j'utilise pas l'IHM en fait). Ceci dit, reste un avantage à ma méthode, c'est que cela marche avec tous les lecteurs sans paramétrage Wink

PS: totalement d'accord pour le choix 5.1/Stéréo...

Poster un nouveau commentaire

Le contenu de ce champ est gardé secret et ne sera pas montré publiquement.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • To highlight piece of code, just surround them with <code type="language"> Your code &tl;/code>>. Language can be java,c++,bash,etc... Everything Geshi support.
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • Textual smileys will be replaced with graphical ones.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.

Plus d'informations sur les options de formatage

Connexion utilisateur
Les derniers bavardages...