Mpd : la musique souple

Par défaut

Pour lire la musique, on a des programmes genre Winamp, foobar2000, Rythmbox ou encore Quodlibet. Ce sont des programmes monolithiques, intégrant le moteur de lecture et l’interface graphique. Il existe cependant des programmes de lecture de musique un peu plus atypiques mais permettant une certaine souplesse d’utilisation, Mpd en fait partie.

Architecture

Mpd s’appuie sur une architecture client-serveur. Bon là je viens de perdre du monde alors on va tenter d’expliquer ça simplement… Le moteur de lecture n’est pas contrôlé directement par une interface graphique avec plein de boutons partout. À la place, il est à l’écoute de message provenant du réseau qui lui dictent quoi faire : play, stop, pause, next, previous… toute action disponible dans un lecteur de musique.

Mais à quoi ça sert me demanderez-vous ? Déjà, ça permet de déporter la lecture de musique sur une machine juxebox connectée à un système son qui soit meilleur que votre PC principal par exemple, ou d’éviter que la musique ne s’arrête quand le serveur X se coupe (parce que vous bidouillez votre conf graphique et qu’il faut le relancer). Toutefois une utilisation classique est possible en se connectant à la machine localement (127.0.0.1).

Clients

Comment on envoie ces messages ? Grâce à un client (puisque c’est un serveur) et c’est là qu’on a la souplesse : on n’est pas coincé avec une interface. Certes, les programmes monolithiques peuvent parfois proposer des skins, des remaniements de layout, mais là, on peut avoir des interfaces complètement différentes, qui s’appuient sur des technologies hétérogènes (langage de programmation, bibliothèque graphique…), le seul point de passage obligé étant la connexion réseau pour envoyer les commandes au serveur.

Du coup, il existe plein d’interfaces graphiques mais pas seulement. Des interfaces web aussi, des interfaces pour iPhone et des interfaces ligne de commande. Et qui dit ligne de commande, dit scripting !

Scripts

Le client ligne de commande le plus usité est mpc. Il permet de communiquer de manière très complète avec mpd et, avec quelques commandes shell de base, on peut se faire une petite interface sympa sans avoir un gros client graphique de lancé.

Personnellement, j’utilise des scripts couplés à un dmenu patché avec l’affichage vertical pour piloter mpd.

J’ai toute ma collection de musique dans la playlist et parfois je veux jouer un morceau précis :

#!/bin/bash
index=`mpc playlist | dmenu -xs -ni -l 20 -p "Find:" 
-fn '-*-terminus-*-r-normal-*-*-120-*-*-*-*-iso8859-*' 
-nb '#000000' -nf '#FFFFFF' -sb '#1793d1' -b -i -w 500 
-x 350 -y 400 | cut -c 2- - | cut -d")" -f1 -`
[ -z $index ]
if [ $? = 1 ]; then
  mpc play $index
fi

Ce script affiche le contenu de ma playlist dans dmenu ce qui me permet de filtrer le titre que je cherche et de jouer le titre choisi.

Le script suivant me permet de vider ma playlist et d’y mettre un album précis :

#!/bin/bash
ALBUMTITLE=`mpc listall | 
awk -F / '{print $2 " - " $3}' | grep -v mp3 | 
uniq | sort -f | dmenu 
-fn '-*-terminus-*-r-normal-*-*-120-*-*-*-*-iso8859-*' 
-nb '#000000' -nf '#FFFFFF' -sb '#1793d1' -b -l 15 -x 350 
-y 200 -w 400 -i | sed -e 's# - #/#'`

[ -z $ALBUMTITLE ]
if [ $? = 1 ]; then
  mpc listall | grep "$ALBUMTITLE" > .mpdnewlist_tmp
  mpc clear
  j=`wc -l .mpdnewlist_tmp | awk '{print $1}'`
  J=`echo $j+1 | bc`
  for ((i=1; i<J; i++)) ; do
    mpc add "`sed -n "${i}p" .mpdnewlist_tmp`" > /dev/null
  done
  mpc play 1
  mpc random off
  rm .mpdnewlist_tmp
fi

Et enfin un script qui charge toute la library dans la playlist :

#!/bin/bash
mpc crop
mpc update > /dev/null
while [ `mpc | grep Updating | wc -l` == 1 ]; do
 sleep 1
done
mpc clear
mpc ls | mpc add > /dev/null

Tous ces scripts viennent ou sont inspirés d’un sujet du forum archlinux.

J’affecte ensuite l’exécution de ces scripts à des raccourcis claviers (moi je le fais sur openbox), les fonctionnalités de bases étant affectées aux touches multimédia de mon clavier (avec xbindkeys) et je pilote ma musique sans le moindre client graphique lancé !

Il ne me reste plus qu’à mettre mpc et ces scripts sur mon eeePC et je pourrais contrôler ma musique à distance 🙂

J’ai d’autres scripts en route, je les mettrais en ligne dès qu’ils seront prêts.

EDIT:

Bah en fait il n’y aura pas d’autres scripts pour mpd, je suis repassé à quodlibet. Je l’avais abandonné pour une histoire de performance au démarrage (il me prenait 100% du CPU pendant longtemps) mais en repassant sous XFCE quodlibet est redevenu réactif comme avant 🙂

6 réflexions au sujet de « Mpd : la musique souple »

  1. Geobert

    un patch est un fichier qui liste une série de différence entre 2 fichier qu’il faut appliquer sur les sources originales à l’aide de l’outil patch. man patch devrait t’aiguiller 🙂 mais en gros tu chope les sources de dmenu et le patch, tu l’applique et tu compile ton dmenu patché

  2. n3o

    merci !!! par contre sais tu pourquoi j’ai applique le patch et lorsque je fait

    #!/bin/bash
    index=`mpc playlist | dmenu -b -l 20 -nb « #000 » -nf « #7af » -sb « #000 » -sf « #bdf » -w 500 -x 350 -y 400 -p « Find: » | cut -d’)’ -f1`
    [ -z $index ]
    if [ $? = 1 ]; then
    mpc play $index
    fi

    je vois rien d’ecrit seulement un carré noir et lorsque j’enleve l’option -l 20 c’est de nouveau ecrit mais plus a la verticale ?

Les commentaires sont fermés.