MPD est finalement assez peu connu et pourtant, dans le cadre d'une architecture domestique, 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...
MPD (Music Player Daemon) c'est :
A l'inverse,
En somme, MPD n'a (à mon sens) d'intérêt que dans trois cas de figure :
Là, rien de très sorcier. MPD est sans aucun doute déjà dans votre distribution. Un coup d'urpmi mpd ou d'apt-get install mpd devrait suffire à installer le serveur. Ensuite tout ce passe dans le fichier /etc/mpd.conf.
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).
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 /musique.
Dans le fichier /etc/mpd.conf, il vous faut repérer un bloc ressemblant à cela
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 :
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 /musique/mdp :
Ensuite vient la base de donnée qui contiendra les chemins, les étiquettes, bref, tout ce que MPD découvrira dans le dossier /musique. 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 :
Maintenant la partie un peu funky. Un peu plus loin dans le fichier vous devez trouvez quelque chose comme cela :
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 mpd 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 /musique.
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 MPD appartient à ce groupe. Et tout le dossier musique appartient lui aussi à ce groupe en lecture, et en écriture sur le dossier /musique/mpd.
Vous pouvez aussi prendre la posture barbare du chmod g+rwX /musique mais à ce moment là, autant dire à MPD d'utiliser "root" comme utilisateur...
Enfin, vous pouvez utiliser le fait que l'utilisateur mpd appartient généralement au groupe audio et du coup attribuer ce groupe au dossier /musique comme je le fait pour mon acces-audio.
Bref, c'est ici une histoire de goût et le point important est que l'utilisateur qui lance MPD puisse lire dans /musique et écrire dans /musique/mpd, et ce sur toutes les machines où il doit être lancé.
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.
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 libao qui permet d'attraper un serveur ESD par exemple.
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.
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 audio_output. 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 :
Si je vous avez une deuxième carte audio, vous pouvez donc ajouter une seconde sortie :
Notez le paramètre device 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).
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 Ampache), mais pour des amplis fixes, je ne vois pas bien l'intérêt...
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 :
On utilise ici la table de mixage ALSA du périphérique par défaut (hw:0,0) dont on utilise le canal Master.
Dernière chose à faire : rendre notre serveur visible sur notre réseau local. Imaginons pour cela que notre machine ait pour adresse IP 10.0.0.10, nous modifierons donc la configuration dans ce sens :
Reste maintenant à démarrer notre serveur par un /etc/init.d/mpd start.
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 :
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...
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.
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 vaste. Mais avant de commencer à en explorer quelques un, regardons de plus prés comment le serveur MPD cause avec ses clients.
MPD est un simple serveur Telnet... Pour s'en convaincre, essayez ceci :
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é ici.
Pour les fanatiques de la console et du scripting, nous avons mpc 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 Hum, sympa, ce qu'elle écoute, je vais le mettre ici
:
Et voilà, il suffit alors de lancer
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 ici.
Pour une version plus graphique, il existe aussi un client nCurse (cf. photo)
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 Sonata conçu pour Gnome/GTK2 et qui est dispo en standard sur toute distribution un peu étoffée.
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.
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 click-droit/préférences... pour, dans l'onglet serveurs, ajouter vos différents noms de machines hébergeant une instance de MPD. Ceci fait, il suffit de refaire un click-droit/connexion 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.
Pour plus de clients graphiques, allez ici...
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 ce plugin pour Amarok.
Une extension que j'aime particulièrement est celle pour FireFox. 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.
Pour plus d'extensions, allez ici...
Tout d'abord il y a l'excellente application PHP/AJAX, pitchfork. 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 ipodmp.tgz.
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.
Pour plus d'applications WEB, allez audioscrobbler ou last.fm. Pour une liste complète de ce type de clients, allez ici.
Nous avons aussi les clients qui permettent de contrôler MPD par joystick ou une télécommande IR. D'écrire sur un afficheur LCD ou de contrôler le système par une unité
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 BFM radio dont l'URL est http://cache.yacast.fr/V4/bfm/bfm.m3u.
Pour l'utiliser, soit vous l'ajoutez dans l'onglet flux de Sonata, soit vous allez dans votre dossier /musiques/mpd qui contient les liste de lecture et vous la téléchargez :
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.
Et avec mpc, vous feriez comme ceci :
Notez au passage que France Intox c'est grandement amélioré par rapport à la dernière fois où j'avais testé cette radio publique sur un système libre. Maintenant toute les radios de Radio France, sont disponible en
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.
A propose de FreeBox, l'idée vient assez vite de diffuser l'audio d'un serveur MPD sur le Boîtier HD. J'avais déjà réussi à faire cela avec la vidéo mais était resté coincé sur l'audio.
Il y a peu je suis tombé sur un note dans la documentation de MPD parlant d'un nouveau type de sorti nommé FIFO. Un Fifo sous unix est aussi appelé un tube nommé, c'est à dire un fichier très spécial sur lequel une application peut écrire et qu'une autre application peut lire sans que cela soit transite réellement par le disque.
Aprés avoir discuté avec un des développeur de MPD (merci Jat), j'ai pu utiliser cette sortie pour alimenter une instance de VLC qui, comme pour la vidéo, transcode tout ce qui sort de MPD en flux MPEG2 à destination de la freebox.
Alors c'est plus un Proof of concept
qu'autre chose pour l'instant et pour mettre ceci en oeuvre vous devez utiliser la toute dernière version compilée main de MPD. Ceci fait, il faut vérifier que vous avez bien la sortie FIFO en faisant un mpd --version. Si c'est le cas, allez dans la configuration et ajoutez une nouvelle sortie
Relancez le serveur puis tapez la ligne de commande suivante :
Oui je sais, c'est assez barbare mais ça fonctionne. Maintenant la lecture d'un morceau est diffusé en live sur la FreeBox HD. La commande sox est là car je n'ai pas réussi à faire manger ce flux raw/PCM directement à VLC.
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.
- répondre
tof , le 31 July, 2008 - 07:21En version web, il y a aussi NeoMPC qui est très adapté aux téléphones mobiles: http://code.google.com/p/neompc/ (perso je l'utilise d'une façon dérivée, car son interface mini permet de l'intégrer à d'autres projets).
Et surtout en version application native pour iPhones, il existe iMPDclient: http://code.google.com/p/impdclient/
- répondre
Ulhume, le 31 July, 2008 - 08:55@tof très intéressant ça ! Pour installer impdclient, il faut jailbreaker l'iphone j'imagine ? Sinon, tu as des copies d'écran de noeompc pour voir un peu à quoi cela peut ressembler ?
- répondre
freeflyer, le 31 July, 2008 - 09:32en plus meme en jailbreak il n'est pas encore dispo pour la V2.0 du firmware..
- répondre
tof , le 31 July, 2008 - 10:46Voici les captures d'écran de Neompc
Controle: http://www.galipe.net/wp-content/uploads/neompc-control.png
Playlist: http://www.galipe.net/wp-content/uploads/neompc-playlist.png
Navigation: http://www.galipe.net/wp-content/uploads/neompc-browse1.png
Navigation: http://www.galipe.net/wp-content/uploads/neompc-browse2.png
Le script utilise une méthode de template du style Smarties + CSS, donc l'interface est modifiable à souhait. Ici j'utilise la template standard en 240 pixels de large.
Les inconvénients principaux sont:
- pas d'avance et retour rapide
- pas de fonction recherche (mais c'est dispensable pour une utilisation sur mobile)
- la fonction affichage du morceaux en cours et du temps n'est pas "accurate", j'entends par là que lors du chargement d'un morceau, il en récupère les infos du morceau et du temps et le script calcule et affiche de façon autonome le temps restant, si quelqu'un entre-temps avec un autre client sur le même serveur MPD fait une avance rapide sur le morceaux, ou change le morceau, les infos de lecture ne sont pas mises à jour en direct.
C'est pour éviter que le script fasse des appels incessants au serveur MPD. En utilisation mono-client pas de problème, en utilisant multi-clients c'est plus dérangeant...
L'avantage principal est que ce script est hyper simple à utiliser et qu'on peut l'adapter, si par exemple quelqu'un s'y connais un peu en php/html/javascript il peut se faire une template "à la iphone" comme cette appli web pour nabaztag sur iphone: http://www.nabzfood.com/iphone/index.php
- répondre
Ulhume, le 1 August, 2008 - 10:53@Tof merci pour ces info, va falloir que je teste tout cela
- répondre
Ulhume, le 9 August, 2008 - 15:54Une "petite" mis à jour du post d'origine
- répondre
Sooske, le 9 August, 2008 - 16:08Merci pour cet article ça donne des idées
- répondre
cenwen , le 9 August, 2008 - 21:09Alleluia!!!Mon souhait est exhaussé Comme Sooske merci pour cet article et comme d'habitude j'imprime et je digère.

- répondre
Chimrod , le 10 August, 2008 - 08:15Pas d'accord ! MPD est justement le service qui a le plus impressioné les gens qui ont pu voir mes Pcs en fonctionnement, du genre
ah bon, tu peux continuer d'écouter ta musique même avec le PC éteint ?
Si la notion de serveur ne parle à personne car la plupart des gens n'en voient pas d'usage pratique, le fait de pouvoir écouter ses MP3s en lançant la musique sur la chaîne hi-fi depuis son lit est qqch compris directement..
Maintenant que tu as commencé à mettre le son en réseau, il te reste encore à mettre en place un serveur pulseaudio pour compléter ta configuration ( là encore il y a de quoi s'amuser
)
- répondre
Ulhume, le 10 August, 2008 - 09:15@Chimrod Je dis cela un peu ironiquement : D'un côté y'a le bureau qui fait des toupies, ne sert à rien, mais qui impressionne les amis, et de l'autre MPD
PulseAudio j'avais mis cela en place un moment mais c'est vite tombé court. L'idée de pouvoir envoyer du son à distance sur une machine pouvait servir 1/ à mon PC/Linux qui n'a pas ses propres baffles 2/ A des "itinérants" pour injecter de l'audio de manière ponctuelle.
Le cas 1/ je l'ai vite réduit à néant en ayant la brillante (ironique) idée de coller un câble audio pour combler les 20 cm entre les deux machines, et le cas 2/ c'est réduit à néant tout seul car réduit aux seuls itinérants non-windowsien et suffisamment courageux pour se frapper le paramétrage. Du coup je suis tombé un peu à court d'usage, mis à part cela ça marche très bien.
- répondre
Geek87 , le 19 August, 2008 - 16:27Bonjour !
J'aimerais savoir s'il est possible de réaliser un tel serveur pour la vidéo ? J'imagine que cela doit être possible mais je ne sais pas trop quel logiciel utiliser. Mplayer ne semble pas pouvoir être contrôlé à distance, si ? Est-il possible de contrôler VLC à distance simplement ?
Merci d'avance pour vos éclaircissements !
- répondre
Ulhume, le 24 August, 2008 - 08:11@Geek87 Oui c'est parfaitement possible avec VLC en tant que client et VLC en tant que serveur VOD (Vidéo On Demand). Pour plus d'information là dessus, cherche VLC+VOD sur google, j'avais trouvé pas mal de tutos (en anglais) à l'époque où je pensais la solution intéressante pour moi.
- répondre
Ludovic , le 26 August, 2008 - 13:08Salut !
Je cherche à transformer une vieille machine en serveur MPD: c'est un client léger qui possède un processeur d'environ 300Mhz, et 128 Mo de RAM. Coté "disque", je pense à une carte FLASH de 512Mo.
Par contre, je n'ai pas encore trouvé la distribution linux qui me conviendrait (boot rapide, légere, etc...)
Est ce que quelqu'un aurait une idée pour m'aiguiller ?
Merci
- répondre
Ulhume, le 26 August, 2008 - 13:42@Ludovic certains vont sûrement te conseiller des distributions ultra taillées mais moi sur une machine comme cela (PIII 300Mhz), je collais une mandriva de base et je virais les services qui ne servait à rien (avahi, netfs, etc), n'installait aucun paquet touchant de prés ou de loin au graphique (X11 & co). Au final ça démarre aussi vite qu'une distrb taillée et tu as tous les paquets et les mises à jour sans contreparties visibles. My 2 cents opinion
- répondre
Ludovic , le 26 August, 2008 - 15:00Ok, pourquoi pas une mandriva, MAIS...
Il me semble que mandriva n'est dispo qu'en version i586 ou x86_64, or mon processeur ne doit pas être compatible 586, enfin je ne suis pas sur ...
Je vais tester
- répondre
Ulhume, le 26 August, 2008 - 23:24@Ludovic Pour que ton processeur ne soit pas compatible i586, il faudrait que ce soit un 486 ou moins... Là pour le coup ce serait vraiment un ancêtre...
- répondre
Signix , le 28 August, 2008 - 14:36Je ne vois pas le format wma dans la liste ? Est-il supporté ?
Merci pour cet article.
- répondre
Ulhume, le 28 August, 2008 - 14:42En passant par le module Jack ça doit être jouable mais il n'y a rien de natif il me semble. Sauf peut-être dans la version "non-libre" dont je parle dans l'article.
- répondre
Signix , le 28 August, 2008 - 15:39Je vais tester tout ca ce soir
Merci
- répondre
Miz , le 14 October, 2008 - 12:55Salut,
Merci pour cette mine d'information.
J'ai vu que tu avais réussi à rendre une freebox passive pour la vidéo. Elle n'etait là que pour recevoir les flux vidéo envoyés par les PC: trés interessant.
Peut on faire la même chose pour le son ?
vlc permet de convertir le format venant de pas mal de source. Je voudrais qu'il recoive je son joué localement avec un rhytmbox ou un banshee. Mais je ne trouve pas comment lui dire d'écouter tout ce qui est envoyé à alsa ou pulseaudio ...
As tu déjà creusé cette question ?
Merci pour tes lumières !
Miz
- répondre
Ulhume, le 14 October, 2008 - 14:36@Miz As tu lu le dernier chapitre FreeBoxHD/MPD, ça me semble plutôt bien convenir à ton besoin. Personnellement c'est une méthode que j'ai abandonnée avant tout pour une question de qualité audio. En effet ce n'est pas la peine que j'encode mes CD en FLAC pour derrière transcoder le flux en MPEG2
- répondre
Miz , le 14 October, 2008 - 15:36Oui, c'est dans ce chapitre que j'ai pu voir que vlc pouvait accepter des flux venant de stdin !
MPD envoie à une fifo. sax lit cette fifo, converti et envoi via stdin à VLC.
Mais je ne suis pas sur que Rythmbox puisse ecrire dans une fifo ... (à creuser !)
C'est pour cela que j'avais pensé me greffer plus bas et dire à VLC de lire tout ce qui sort au niveau du son (ALSA ?)
En ce qui concerne la qualité audio, je suis d'accord avec toi. A l'époque, j'avais tout compréssé en MP3 ...
Poster un nouveau commentaire