<?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/1603"/>
  <link rel="self" type="application/atom+xml" href="http://artisan.karma-lab.net/node/1603/atom/feed"/>
  <id>http://artisan.karma-lab.net/node/1603/atom/feed</id>
  <updated>2009-01-07T17:57:23+01:00</updated>
  <entry>
    <title>Mise en oeuvre d&#039;un serveur MPD</title>
    <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1603" />
    <id>http://artisan.karma-lab.net/node/1603</id>
    <published>2008-08-09T16:49:41+02:00</published>
    <updated>2009-01-07T17:57:23+01:00</updated>
    <author>
      <name>Ulhume</name>
    </author>
    <category term="Serveurs" />
    <category term="OK" />
    <category term="Planet Libre" />
    <category term="Article" />
    <summary type="html"><![CDATA[<p>
   MPD est finalement assez peu connu et pourtant, dans le cadre d'une <a class='external' target='_blank' href='/node/1310' >architecture domestique</a>, il répond au besoin récurrent des mélomanes qui aiment à donner une ambiance musicale différente à chacune de leurs pièces. L'objectif de ce tutoriel est de vous proposer une simple "mise en scelle", le monde MPD étant juste une vaste trop pour le couvrir d'une seul passe...</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>
   MPD est finalement assez peu connu et pourtant, dans le cadre d'une <a class='external' target='_blank' href='/node/1310' >architecture domestique</a>, il répond au besoin récurrent des mélomanes qui aiment à donner une ambiance musicale différente à chacune de leurs pièces. L'objectif de ce tutoriel est de vous proposer une simple "mise en scelle", le monde MPD étant juste une vaste trop pour le couvrir d'une seul passe...</p>
<!--break-->

	<a name='chapter_1'></a>
  <h2>Qu'est-ce que MPD ?</h2>
	
<image file="overview.png"/>
<p>
    MPD (<a class='external' target='_blank' href='http://www.musicpd.org' >Music Player Daemon</a>) c'est :
    <ul>
       <li>Un lecteur audio multi-formats entièrement contrôlable à travers le réseau.</li>
       <li>Un explorateur d'audiothèques capable de stocker les étiquettes (ID3 &amp; co.) de vos morceaux dans une base de donéne et d'y effectuer des recherches.</li>
       <li>Un gestionnaire de liste de lecture (playlist).</li>
     </ul>
</p> 
<p>
   A l'inverse, 
   <ul>
   	<li>MPD n'est pas un lecteur de vidéo, diapos &amp; co.</li>
   	<li>MPD ne dispose pas d'une belle interface.</li>
   	<li>MPD n'embarque pas de serveur WEB/AJAX.</li>
   	<li>MPD n'est absolument pas sexy et n'impressionnera jamais vos amis.</li>
   </ul>
</p>
<p>
   En somme, MPD n'a (à mon sens) d'intérêt que dans trois cas de figure :
   <ul>
   <li>Lorsque l'on a chargé une machine sans écran, ni clavier de la sonorisation d'un espace.</li>
   <li>Lorsque plusieurs personnes sont amenées à prendre la main sur la musique diffusée, chacune avec un outil différent.</li>
   <li>Lorsque l'on désire diffuser de l'audio en mode "shoutcast", via <a class='external' target='_blank' href='http://www.icecast.org/' >Icecast</a> (ce n'est pas le sujet de ce tutoriel cependant).  
</ul>
</p>



	<a name='chapter_2'></a>
  <h2>Mise en oeuvre</h2>
	
<h3>Installation</h3>
<p>
   Là, rien de très sorcier. MPD est sans aucun doute déjà dans votre distribution. Un coup d'<kbd>urpmi mpd</kbd> ou d'<kbd>apt-get install mpd</kbd> devrait suffire à installer le serveur. Ensuite tout ce passe dans le fichier <kbd>/etc/mpd.conf</kbd>.
</p>


	<a name='chapter_3'></a>
  <h2>Les fichiers audio</h2>
	
<p>
   Pour que MPD puisse fonctionner, il lui faut... de la musique et peu importe, ou presque, le format. MPD peut lire les fichier mp3, mp2, ogg, flac, wav, au, aiff, aif, mpc, amf, dsm, far, gdm, imf, it, med, mod, mtm, s3m, stm, stx, ult, uni et xm. Il existe même une version plus "underground" lisant les AAC (dispo sur le dépôt PLF pour les mandriva il me semble).</p>
<p>
  Les fichiers audio doivent être accessible en local par MPD. Si vous avez plusieurs instances, vous la placerez donc dans un dossier partagé, par exemple NFS. Dans la suite du tutoriel, nous partirons du principe que vos morceaux se trouver dans le dossier <kbd>/musique</kbd>. 
</p>
<p>
  Dans le fichier <kbd>/etc/mpd.conf</kbd>, il vous faut repérer un bloc ressemblant à cela 
  
  <div class='code-block code-block-fragment'>
  <div class='container'>
  music_directory &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;~/music&quot;</span><br />
playlist_directory &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="st0">&quot;~/playlists&quot;</span><br />
db_file &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;/var/lib/mpd/mpd.db&quot;</span>
  </div>
  
  </div>
</p>
<p>
  Il s'agit de tous les chemins dont a absolument besoin MPD pour fonctionner. La première ligne correspond à la source de fichier audio, nous remplaçons donc comme suit :
    
  <div class='code-block code-block-fragment'>
  <div class='container'>
  music_directory &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;/musique&quot;</span>
  </div>
  
  </div>
</p>
<p>
 La seconde ligne correspond au dossier dans lequel MPD lit et écrit les listes de lectures (fichiers .m3u au format WinAmp). Comme il est sympa de pouvoir partager ces listes entre tous les serveurs MPD, le plus simple est de créer un sous-dossier <kbd>/musique/mdp</kbd>  :
  
  <div class='code-block code-block-fragment'>
  <div class='container'>
  playlist_directory &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;/musique/mdp&quot;</span>
  </div>
  
  </div>
</p>
<p>
   Ensuite vient la base de donnée qui  contiendra les chemins, les étiquettes, bref, tout ce que MPD découvrira dans le dossier <kbd>/musique</kbd>. Là aussi, il est pratique qu'elle soit partagé car ainsi la création et la mis à jour de cette base sur une machine, sera effective sur toutes les autres :
  
  <div class='code-block code-block-fragment'>
  <div class='container'>
  db_file &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;/musique/mdp/mdp.db&quot;</span>
  </div>
  
  </div></p>
  
  <h3>Petit cas de droit</h3>
<p>
   Maintenant la partie un peu funky. Un peu plus loin dans le fichier vous devez trouvez quelque chose comme cela :
   
  <div class='code-block code-block-fragment'>
  <div class='container'>
  user &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="st0">&quot;mpd&quot;</span>
  </div>
  
  </div>
</p>
<p>
  L'idée est que lancer MPD en tant que root, c'est comme croiser les flux, c'est mal. Donc à l'installation du paquet, un gentil utilisateur <kbd>mpd</kbd> bien inoffensif a été créé. Et en toute logique cette utilisateur là n'a aucun droit de lecture, et encore moins d'écriture dans votre dossier <kbd>/musique</kbd>. 
</p>
<p>
   Je ne vais pas rentrer plus avant dans la manière de régler ce "problème" car chacun a son approche. Personnellement j'ai opté pour la création d'un groupe "acces-audio" qui a le même ID sur toutes mes machines. L'utilisateur <kbd>MPD</kbd> appartient à ce groupe. Et tout le dossier musique appartient lui aussi à ce groupe en lecture, et en écriture sur le dossier <kbd>/musique/mpd</kbd>.</p>
<p>
   Vous pouvez aussi prendre la posture barbare du <kbd>chmod g+rwX /musique</kbd> mais à ce moment là, autant dire à MPD d'utiliser "root" comme utilisateur...</p>
<p>
  Enfin, vous pouvez utiliser le fait que l'utilisateur <kbd>mpd</kbd> appartient généralement au groupe <kbd>audio</kbd> et du coup attribuer ce groupe au dossier <kbd>/musique</kbd> comme je le fait pour mon <kbd>acces-audio</kbd>.</p>

<p>
   Bref, c'est ici une histoire de goût et le point important est que l'utilisateur qui lance MPD puisse lire dans <kbd>/musique</kbd> et écrire dans <kbd>/musique/mpd</kbd>, et ce sur toutes les machines où il doit être lancé. 
</p>

<h3>Sorties Audio</h3>
<p>
  MPD est conçu de sorte à pouvoir gérer en simultané plusieurs sorties audio. Il est donc possible avec plusieurs cartes audio de distribuer la même musique sur plusieurs pièces à partir d'un seul serveur. La majorité des clients MPD permettent d'activer ou de désactiver telle ou telle sortie à distance. 
</p>
<p>
  Une sortie MPD peut utiliser les pilotes ALSA ou OSS, les serveurs audio Jack ou Pulse, ou encore un serveur de type ShoutCast. Et si cela ne suffit pas, vous pouvez passer par <a class='external' target='_blank' href='http://xiph.org/ao/' >libao</a> qui permet d'attraper un serveur ESD par exemple. 
</p>

<p>
  Dans notre cas, faisons simple. Déjà si vous avez Pulse d'installé, personnellement je le virerait... Cela se fait très facilement sur une Mandriva en passant par Drakconf. Pulse est bien sympa sur l'idée mais je ne vois pas bien son intérêt en local. </p>

<p>Nous allons donc utiliser une toute classique périphérique audio en utilisant ALSA.  Pour cela il faut aller jeter un oeil un peu plus loin dans le fichier de configuration et chercher les sections nommées <kbd>audio_output</kbd>. Si vous en avez aucune ou si elles sont toutes commentées, ajoutez ce qui suit, sinon vérifiez que ça ressemble un peu à cela :
  
  <div class='code-block code-block-fragment'>
  <div class='container'>
  &nbsp;audio_output <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">type</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="st0">&quot;alsa&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="st0">&quot;Sortie vers Chambre&quot;</span><br />
<span class="br0">&#125;</span>
  </div>
  
  </div>
</p>
<p>
  Si je vous avez une deuxième carte audio, vous pouvez donc ajouter une seconde sortie : 
  
  <div class='code-block code-block-fragment'>
  <div class='container'>
  audio_output <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw3">type</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="st0">&quot;alsa&quot;</span><br />
&nbsp; &nbsp; &nbsp; name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="st0">&quot;Sortie vers Buanderie&quot;</span><br />
&nbsp; &nbsp; &nbsp; device &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="st0">&quot;hw:0,1&quot;</span> <br />
<span class="br0">&#125;</span>
  </div>
  
  </div>
</p>
<p>
   Notez le paramètre <kbD>device</kbd> qui indique que le tape sur le deuxième périphérique ALSA (le premier étant sous entendu dans la première sortie comme étant hw:0,0). 
</p>

<p>
   A ce stade certain peuvent se demander pourquoi ne pas utiliser plutôt un ou plusieurs serveurs, de type ESD ou Pulse sur les machines qui diffuse physiquement l'audio. Si c'est faisable, la réponse est "est-ce rentable ?". Car enfet, cela revient à transbahuter un signal PCM sûrement un peu compressé sur mon réseau. Avec MPD, j'utilise un partage (NFS, CIFS, etc.) qui transporte des fichiers compressés en OGG ou en MP3... D'un point de vue occupation de bande passante je suis clairement gagnant dans le second cas. Pulse & co ont sûrement un usage, mais je ne pense pas que ce soit celui-là. Et c'est à peu prés la même chose pour diffuser du shoutcast. C'est sûrement très bien pour des utilisations de votre musique en extérieur (genre ce que permet <a class='external' target='_blank' href='http://ampache.org/' >Ampache</a>), mais pour des amplis fixes, je ne vois pas bien l'intérêt...
</p>

<p>
  Dernier aspect, le contrôle du volume. Comme pour les sorties audio, vérifiez que les lignes suivantes existent, ne sont pas commentées et concordent bien :
  
  <div class='code-block code-block-fragment'>
  <div class='container'>
  &nbsp; mixer_type &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="st0">&quot;alsa&quot;</span><br />
mixer_device &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="st0">&quot;default&quot;</span><br />
mixer_control &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;Master&quot;</span>
  </div>
  
  </div>
</p>
<p>
   On utilise ici la table de mixage ALSA du périphérique par défaut (hw:0,0) dont on utilise le canal <kbd>Master</kbd>.
</p>

<h3>Paramétrage réseau</h3>
<p>
   Dernière chose à faire : rendre notre serveur visible sur notre réseau local. Imaginons pour cela que notre machine ait pour adresse IP <kbd>10.0.0.10</kbd>, nous modifierons donc la configuration dans ce sens :
   
  <div class='code-block code-block-fragment'>
  <div class='container'>
  &nbsp; &nbsp;bind_to_address &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;10.0.0.10&quot;</span><br />
port &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="st0">&quot;6600&quot;</span>
  </div>
  
  </div>
</p>
<div class='inline-box note'>
  Si vous êtes de grands paranoïaques ou si vous comptez "publier" MPD sur le réseau publique (pas une idée terrible ceci dit), il est aussi possible d'ajouter un mot de passe et des droits associés. Voir pour cela le paramètre <kbd>password</kbd>.
</div>

<p>
  Reste maintenant à démarrer notre serveur par un <kbd>/etc/init.d/mpd start</kbd>. 
</p>

<h3>Base de donnée</h3>
<p>
  MPD est capable de lire tous les attributs contenus dans les fichiers audio (ID3, vorbis, etc) de sorte constituer une base de donnée de recherche de morceaux qui sera utilisée lors de la navigation. A la première utilisation, il nous faut donc initialiser cette base de donnée. Pour cela, lancez la commande suivante :
  
  <div class='code-block code-block-fragment'>
  <div class='container'>
  mpd --create-db
  </div>
  
  </div>
</p>
<p>
 MPD doit alors cracher un flot continu de texte listant les fichiers audio qu'il est en train de disséquer. Tout dépends de votre audiothèque, chez moi cette opération prend prés de 5 minutes. C'est une des raisons qui m'a amené à partager la base de données entre les différentes serveurs...
</p>
<p>
  Notez cependant que cette opération n'est à réaliser qu'une seule fois. Par la suite il suffira d'une simple mise à jour de la base. 
</p>


	<a name='chapter_4'></a>
  <h2>Les clients</h2>
	
<p>
     Maintenant que notre serveur est en route, il est temps de lui envoyer des commandes. Pour cela, il nous faut un client et là, le choix est <a class='external' target='_blank' href='http://mpd.wikia.com/wiki/Clients' >vaste</a>. Mais avant de commencer à en explorer quelques un, regardons de plus prés comment le serveur MPD cause avec ses clients. 
</p>

<h3>Le protocole MPD</h3>
<p>
   MPD est un simple serveur Telnet... Pour s'en convaincre, essayez ceci :
   
  <div class='code-block code-block-traces'>
  <div class='container'>
  <div class='command'><span class='prompt'>root#</span>telnet mon_serveur_mpd 6600</div><div class='result'>Trying 10.0.0.10...</div><div class='result'>Connected to mon_serveur_mpd (10.0.0.10).</div><div class='result'>Escape character is '^]'.</div><div class='result'>OK MPD 0.13.0</div><div class='result'>ping</div><div class='result'>OK</div><div class='result'>list album</div><div class='result'>Album: #51</div><div class='result'>Album: 7th Ave. Stroll</div><div class='result'>Album: A Clockwork Orange</div><div class='result'>Album: A Day Without Rain</div><div class='result'>...</div><div class='result'>OK</div><div class='result'>close</div><div class='result'>Connection closed by foreign host.</div><div class='command'><span class='prompt'>root#</span><span class='cursor'>&nbsp;</span></div>
  </div>
  
  </div>
</p>
<p>
  Avec un protocole aussi trivial, on comprend mieux qu'il existe une librairie MPD pour à peu prés tout les langages. Pour ceux que cela intéresse le protocole est complètement documenté <a class='external' target='_blank' href='http://mpd.wikia.com/wiki/Protocol_Reference' >ici</a>.
</p>

<h3>Ligne de commande</h3>
<p>
<image file="ncmpc.png"/>
   Pour les fanatiques de la console et du scripting, nous avons <a class='external' target='_blank' href='http://musicpd.org/mpc.shtml' >mpc</a> qui est un client en ligne de commande. Cet outil est fabuleux pour écrire de nouvelles fonctionnalités. Par exemple, imaginons que vous entendiez une musique bien sympathique remonter de la chambre. Vous, dans le salon,  vous vous dites <q>Hum, sympa, ce qu'elle écoute, je vais le mettre ici</q> :
</p>
<p style="clear:left">
   
  <div class='code-block code-block-fragment'>
  <div class='container'>
  &nbsp; &nbsp;<span class="co0">#! /bin/sh</span><br />
<br />
&nbsp; &nbsp;<span class="co0"># on définit le nom de la machine où tourne le serveur source</span><br />
&nbsp; &nbsp;<span class="kw3">export</span> <span class="re2">MPD_HOST=</span>$<span class="nu0">1</span><br />
<br />
&nbsp; &nbsp;<span class="co0"># on récupère la piste en cours de lecture</span><br />
&nbsp; &nbsp;<span class="re2">track=</span>$<span class="br0">&#40;</span>mpc <span class="sy0">|</span> <a target="blank" href="http://pwet.fr/man/linux/commandes/grep"><span class="kw2">grep</span></a> playing <span class="sy0">|</span> <a target="blank" href="http://pwet.fr/man/linux/commandes/awk"><span class="kw2">awk</span></a> <span class="st0">'{print $2}'</span> <span class="sy0">|</span> <a target="blank" href="http://pwet.fr/man/linux/commandes/cut"><span class="kw2">cut</span></a> -d<span class="st0">&quot;/&quot;</span> -f <span class="nu0">1</span> <span class="sy0">|</span> <a target="blank" href="http://pwet.fr/man/linux/commandes/tr"><span class="kw2">tr</span></a> <span class="st0">&quot;#&quot;</span> <span class="st0">&quot; &quot;</span><span class="br0">&#41;</span><br />
<br />
&nbsp; &nbsp;<span class="co0"># on récupère la position dans la piste</span><br />
&nbsp; <span class="re2">position=</span>$<span class="br0">&#40;</span>mpc <span class="sy0">|</span> <a target="blank" href="http://pwet.fr/man/linux/commandes/grep"><span class="kw2">grep</span></a> playing &nbsp;<span class="sy0">|</span> <a target="blank" href="http://pwet.fr/man/linux/commandes/awk"><span class="kw2">awk</span></a> <span class="st0">'{print $3}'</span> <span class="sy0">|</span> <a target="blank" href="http://pwet.fr/man/linux/commandes/cut"><span class="kw2">cut</span></a> -d <span class="st0">&quot;/&quot;</span> -f1<span class="br0">&#41;</span><br />
<br />
&nbsp; <span class="co0"># on vire une éventuelle liste de lecture &quot;tmp&quot;</span><br />
&nbsp; mpc <a target="blank" href="http://pwet.fr/man/linux/commandes/rm"><span class="kw2">rm</span></a> tmp<br />
<br />
&nbsp; <span class="co0"># on sauve la liste de lecture en cours dans &quot;tmp&quot;</span><br />
&nbsp; mpc save tmp<br />
<br />
&nbsp; <span class="co0"># on se place maintenant sur le serveur cible</span><br />
&nbsp; <span class="kw3">export</span> <span class="re2">MPD_HOST=</span>$<span class="nu0">2</span><br />
<br />
&nbsp; <span class="co0"># on vire la liste de lecture en cours</span><br />
&nbsp; mpc <a target="blank" href="http://pwet.fr/man/linux/commandes/clear"><span class="kw2">clear</span></a><br />
<br />
&nbsp; <span class="co0"># on charge la liste &quot;tmp&quot; créée plus haut</span><br />
&nbsp; mpc load tmp<br />
<br />
&nbsp; <span class="co0"># on sélectionne le morceau </span><br />
&nbsp; mpc play <span class="re1">$track</span><br />
<br />
&nbsp; <span class="co0"># et on se déplace sur la position, la lecture démarre...</span><br />
&nbsp; mpc seek <span class="nu0">00</span>:<span class="re1">$position</span>
  </div>
  <div class='caption'>/usr/bin/synchronize-mpd.sh</div>
  </div> 
</p>
<p>
    Et voilà, il suffit alors de lancer
    
  <div class='code-block code-block-fragment'>
  <div class='container'>
  &nbsp; synchronize-mpd.<a target="blank" href="http://pwet.fr/man/linux/commandes/sh"><span class="kw2">sh</span></a> serveur_chambre serveur_salon
  </div>
  
  </div>
</p>
<p>
  Et hop, les deux serveurs sont synchorisés sur la même liste, lisent le même morceau à la même position.  Des petits délires de ce genre, vous pouvez en trouver des tonnes <a class='external' target='_blank' href='http://mpd.wikia.com/wiki/Hacks' >ici</a>. 
</p>
<p>Pour une version plus graphique, il existe aussi un client nCurse (cf. photo)</p>

<h3>Clients graphiques</h3>
<p>
<image file="sonata7.png"/>
	Autant j'aime bien la ligne de commande, autant pour éditer une playlist on a trouvé tout de même mieux depuis. Il existe de nombreux clients graphique mais j'affectionne particulière <a class='external' target='_blank' href='http://sonata.berlios.de/' >Sonata</a> conçu pour Gnome/GTK2 et qui est dispo en standard sur toute distribution un peu étoffée.  
</p>
<p>
   Avec Sonata, mais c'est vrai pour la majorité des clients, toutes les opérations MPD sont disponibles, de l'exploration des morceaux à la constitution de la liste de lecture courrante, son stockage sur le disque, etc. Sonata rivalise avec Rythmbox en téléchargeant les paroles, les pochettes, etc. 
</p>
<p>
  La première chose à faire pour utiliser Sonata, et c'est le cas pour tous les clients qui suivent, est de se connecter au serveur MPD. Pour cela, il suffit de faire sur l'interface un <kbd>click-droit/préférences...</kbd> pour, dans l'onglet <kbd>serveurs</kbd>, ajouter vos différents noms de machines hébergeant une instance de MPD. Ceci fait, il suffit de refaire un <kbd>click-droit/connexion</kbd> et de sélectionner le serveur que l'on cherche à contrôler. Le reste est suffisament proche d'un lecteur audio classique pour que vous vous en sortiez sans problèmes. 
</p>
<p>Pour plus de clients graphiques, allez <a class='external' target='_blank' href='http://mpd.wikia.com/wiki/Clients#Graphical_Clients' >ici</a>...</p>


<h3>Les extensions</h3>
<p>
<image file="musicpm.jpg"/>
   Il existe aussi de nombreuses extensions d'applications (xmms, KDE Kicker, E18, xfce, MythTC, Freevo, etc..) permettant de leur ajouter la compatibilié avec MPD. Les KDEistes apprécieront surement <a class='external' target='_blank' href='http://www.kde-apps.org/content/show.php?content=51577' >ce plugin pour Amarok</a>. </p>
  <p>Une extension que j'aime particulièrement est celle pour <a class='external' target='_blank' href='http://code.google.com/p/musicpm/' >FireFox</a>. Il permet ainsi, sans serveur WEB, de contrôler plusieurs serveurs MPD en utilisant une interface assez propre. La dernière Alpha fonctionne sur FireFox3. Un fois l'extension installée et firefox redémarré,  regardez dans les icônes de la barre de status, en bas à droite. 
</p>
<p>Pour plus d'extensions, allez <a class='external' target='_blank' href='http://mpd.wikia.com/wiki/Clients#Plugin_Clients' >ici</a>...</p>

<h3>Les clients WEB</h3>
<p>
<image file="iphone.jpg" style="border:none"/>
<p>
  Tout d'abord il y a l'excellente application PHP/AJAX, <a class='external' target='_blank' href='http://pitchfork.remiss.org/' >pitchfork</a>. Elle fonctionne parfaitement dés lors que l'on dispose d'un écran de bonne taille. Pour de plus petits apareils comme l'iPhone, il existe aussi <a class='external' target='_blank' href='http://www.itrium.de/ipodmp/ipodmp.tgz' >ipodmp.tgz</a>. 
</p>
<p>
   Dans tous les cas, il vous faudra bien évidement un serveur apache, le module mod-php qui va bien et un peu de paramétrage pour que tout cela fonctionne. Le seul inconvénient de ces deux applications WEB, c'est qu'elles ne disposent que d'une seule configuration. Il faut donc dupliquer le contrôle de chaque serveur MPD sur une URL différente. 
</p>
<p>Pour plus d'applications WEB, allez <a class='external' target='_blank' href='http://mpd.wikia.com/wiki/Clients#Web_Clients&gt;ici&lt;/external&gt;&lt;/p&gt;

&lt;h3&gt;Clients de contrôle&lt;/h3&gt;
&lt;p&gt;
  Ensuite il y a les clients qui ont pour but d&#039;écouter l&#039;activité d&#039;un serveur et ainsi renseigner des services comme &lt;external href=&#039;http://www.audioscrobbler.com/' >audioscrobbler</a> ou <a class='external' target='_blank' href='http://last.fm/' >last.fm</a>. Pour une liste complète de ce type de clients, allez <a class='external' target='_blank' href='http://mpd.wikia.com/wiki/Clients#Logging_Clients' >ici</a>.</p>
<p>
  Nous avons aussi les clients qui permettent de contrôler MPD par joystick ou une télécommande IR. D'écrire sur un <a class='external' target='_blank' href='http://lcdproc.spacedout.nl/' >afficheur LCD</a> ou de contrôler le système par une unité <external href="http://remuco.sourceforge.net"/>Bluetooth ou WIFI</external>. Pour une liste complète de ce type de clients, allez <a class='external' target='_blank' href='http://mpd.wikia.com/wiki/Clients#Input_Device_Clients' >ici</a>. 
</p>


	<a name='chapter_5'></a>
  <h2>Les WebRadios</h2>
	
<p>
   Il est possible avec MPD d'ajouter des fichiers qui ne sont pas sur le serveur local mais sur un serveur HTTP. C'est typiquement le cas des listes de lecture et flux des webRadios. Prenons l'exemple de <a class='external' target='_blank' href='http://www.radiobfm.com/' >BFM radio</a> dont l'URL est <kbd>http://cache.yacast.fr/V4/bfm/bfm.m3u</kbd>.</p>
   <p>Pour l'utiliser, soit vous l'ajoutez dans l'onglet <kbd>flux</kbd> de Sonata, soit vous allez dans votre dossier <kbd>/musiques/mpd</kbd> qui contient les liste de lecture et vous la téléchargez :
   
  <div class='code-block code-block-fragment'>
  <div class='container'>
  <a target="blank" href="http://pwet.fr/man/linux/commandes/wget"><span class="kw2">wget</span></a> http:<span class="sy0">//</span>cache.yacast.fr<span class="sy0">/</span>V4<span class="sy0">/</span>bfm<span class="sy0">/</span>bfm.m3u
  </div>
  
  </div>
</p>
<p>
  Ensuite il ne vous reste plus qu'à vous connecter sur le serveur avec Sonata et à double-clicker sur la liste Pour accéder à la radion.</p>
  <p>Et avec mpc, vous feriez comme ceci :
  
  <div class='code-block code-block-fragment'>
  <div class='container'>
  <span class="kw3">export</span> <span class="re2">MPD_HOST=</span>mon_serveur_mpd<br />
mpc clean<br />
mpc load bfm<br />
mpc play
  </div>
  
  </div>
</p>
<p>
  Notez au passage que <a class='external' target='_blank' href='http://www.france-info.com/' >France Intox</a> c'est grandement amélioré par rapport à la dernière fois où j'avais testé cette <a class='external' target='_blank' href='/node/1078' >radio publique sur un système libre</a>. Maintenant toute les radios de Radio France, sont disponible en <extenral href="http://www.radiofrance.fr/services/aide/difflive.php#mp3">MP3 diffusé sur HTTP</extenral>. 
</p>
<p>
   Il est donc possible de diffuser une webRadio sans problème avec MPD tant qu'il s'agit d'un flux compatible avec ce que connait le démon (MP3/OGG) et que cela passe par du HTTP. Du coup, je n'ai pas trouvé de moyen sans passer par une usine à Gaz de transcodage, d'utiliser les flux RTSP/MPeg2 des radios de la FreeBox en multi-poste. 
</p>


	<a name='chapter_6'></a>
  <h2>MPC et FreeBox HD</h2>
	
<p>
  Voir <a class='external' target='_blank' href='/node/1604' >cet article</a> si ce type de montage vous intéresse. 
</p>

	<a name='chapter_7'></a>
  <h2>Conclusion</h2>
	
<p>
  Partant d'une définition très simple de "serveur musicale contrôlable à distance", MPD a permis le développement d'un écosystème d'une rare richesse. Et tant que l'on reste dans le cadre de ce pour quoi ce serveur est fait, il est difficile de ne pas trouver client à son pied, ou de ne pouvoir le scripter pour un comportement particulier. C'est bien simple, aujourd'hui MPD est tellement rentré dans notre quotidien qu'ici, personne ici ne pourrait plus s'en passer. 
</p>    ]]></content>
  </entry>
</feed>
