<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Artisan Numérique</title>
  <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1569"/>
  <link rel="self" type="application/atom+xml" href="http://artisan.karma-lab.net/node/1569/atom/feed"/>
  <id>http://artisan.karma-lab.net/node/1569/atom/feed</id>
  <updated>2008-10-25T16:09:42+02:00</updated>
  <entry>
    <title>Mixer du 5.1 en 2.0 avec ALSA</title>
    <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1569" />
    <id>http://artisan.karma-lab.net/node/1569</id>
    <published>2008-06-16T10:13:50+02:00</published>
    <updated>2008-10-25T16:09:42+02:00</updated>
    <author>
      <name>Ulhume</name>
    </author>
    <category term="kernel" />
    <category term="OK" />
    <category term="Planet Libre" />
    <category term="Tutoriel" />
    <summary type="html"><![CDATA[<p>
  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).    ]]></summary>
    <content type="html"><![CDATA[<p>
  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. 
</p>


	<a name='chapter_1'></a>
  <h2>Les systèmes Audio de Linux</h2>
	
<p>
   <a class='external' target='_blank' href='http://www.opensound.com/' >OSS</a> 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. 
</p>
<p>
  Démarré par Jaroslav Kysela en 1998, <a class='external' target='_blank' href='http://www.alsa-project.org/' >ALSA</a> 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 <a class='external' target='_blank' href='http://jackaudio.org/' >Jack</a>.
</p>
<div class='inline-box note'>
   Pour information, Jack, PulseAudio, aRTS, ou encore eSound, sont des serveurs audio qui utilisent OSS,  ALSA ou autre pour leur entrées/sorties physiques.
</div>


	<a name='chapter_2'></a>
  <h2>Le problèmes DVD</h2>
	
<p>
   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. 
</p>
<p>
  La solution est donc de demander gentiment à ALSA de remixer le son 5.1 en quelque chose de compatible avec du 2.0 (downmix).
</p>



	<a name='chapter_3'></a>
  <h2>Profils d'écoute</h2>
	
<p>
   Le problème majeur d'ALSA n'est pas sa puissance, mais sa documentation quasi inexistante et relativement inbitable. Il y a bien un <a class='external' target='_blank' href='http://alsa.opensrc.org/' >wiki</a> mais dés que l'on s'attaquer à des choses un peu velues, cela devient vite la jungle. 
</p>
<p>
  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 <kbd>/etc/asound.conf</kbd>. Voyons donc à quoi ressemblerait un profil de transformation de son 5.1 en 2.0 :

  <div class='code-block code-block-fragment'>
  <div class='container'>
  pcm.movies<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; type route<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; slave.pcm surround51<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; slave.channels 6<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ttable.0.0 0.75<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ttable.1.1 0.75<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ttable.2.0 0.75<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ttable.3.1 0.75<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ttable.4.0 0.8<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ttable.4.1 0.8<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ttable.5.0 0.675<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ttable.5.1 0.675<br />
&nbsp; &nbsp; &nbsp; &nbsp; }
  </div>
  
  </div>
</p>
<p>
   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. 
</p>
<p>
   Ensuite avec l'instruction <kbd>ttable.x.y z</kbd> nous dirigeons le son du canal original <kbd>x</kbd> vers le canal destination <kbd>y</kbd> en appliquant un facteur sur le volume <kbd>z</kbd>. 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. 
</p>
<p>
  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 <kbd>ttable</kbd> aux volumes indiqués. 
</p>
<p>
  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 :

  <div class='code-block code-block-fragment'>
  <div class='container'>
  pcm.music<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;type route<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;slave.pcm surround51<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;slave.channels 6<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ttable.0.0 1<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ttable.1.1 1<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ttable.0.2 1<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ttable.1.3 1<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ttable.0.4 0.5<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ttable.1.4 0.5<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ttable.0.5 0.5<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ttable.1.5 0.5<br />
&nbsp; &nbsp; &nbsp; &nbsp; }
  </div>
  
  </div>
</p>
<p>
La source de nos routes <kbd>x</kbd> est toujours <kbd>0</kbd> ou <kbd>1</kbd>, logique. Et nous ventilons ces deux sources sur les 6 canaux en appliquant une fois encore des changements de volume. 
</p>


	<a name='chapter_4'></a>
  <h2>Utilisation des profiles</h2>
	
<p>
   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 <kbd>aplay</kbd> :

  <div class='code-block code-block-fragment'>
  <div class='container'>
  &nbsp; &nbsp;<a target="blank" href="http://pwet.fr/man/linux/commandes/aplay"><span class="kw2">aplay</span></a> -D movies fichier_5_1.wav<br />
<span class="co0"># ou</span><br />
&nbsp; &nbsp;<a target="blank" href="http://pwet.fr/man/linux/commandes/aplay"><span class="kw2">aplay</span></a> -D music fichier_stéréo.wav
  </div>
  
  </div>
</p>

<p>
   Le <kbd>-D</kbd> signifie <kbd>device</kbd> 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 :

  <div class='code-block code-block-fragment'>
  <div class='container'>
  mplayer -channels <span class="nu0">6</span> -ao alsa:<span class="re2">device=</span>movies dvd:<span class="sy0">//</span>
  </div>
  
  </div>
</p>
<p>
  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.
</p>
<div class='inline-box note'>
Pour modifier les paramétres du mixer en ligne de commande : <kbd>amixer sset "Duplicate Front" off</kbd>
</div>


	<a name='chapter_5'></a>
  <h2>Conclusion</h2>
	
<p>
  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. 
</p>    ]]></content>
  </entry>
</feed>
