Mpd (music player daemon), comme son nom l'indique, est un logiciel diffusant de la musique et restant tout le temps en état de fonctionnement (c'est ce qu'on appelle un démon). Il fonctionne comme un serveur et, de ce fait, il est contrôlable par n'importe quelle machine se situant dans le réseau local (ou même de l'extérieur).

Installation

On installe mpd mais aussi mpc (un client en ligne de commande qui fera l'interface avec d'autres clients) et alsa-utils (alsa est le pilote de la carte son, c'est lui qui est en dernière ligne lors de la diffusion du son car interagissant avec le matériel).

apt-get install mpd mpc alsa-utils

Installation des paquets permettant de décoder tous types de fichiers son :

apt-get install lame flac faad vorbis-tools   

Configuration

Pour cela, il faut éditer le fichier /etc/mpd.conf.

Mpd peut tourner sous n'importe quel utilisateur. Cet utilisateur peut être celui par défaut, c'est à dire mpd. On peut faire le choix d'un autre utilisateur. Prenons en considération que les fichiers de musique sont situés dans le dossier personnel de cet utilisateur. Dans notre cas, cet utilisateur se nomme salon (donc à remplacer selon votre utilisateur).

NB : si vous utilisez un utilisateur spécifique pour mpd mais qu'il n'est pas propriétaire des fichiers de son, veillez bien à lui donner les droits nécessaires sur ces fichiers (l'ajouter au groupe propriétaire ou gérer avec les acl).

Éditez le fichier de configuration :

nano -c /etc/mpd.conf

Dans la section General music daemon options voici les seules options suffisantes (décommentez-les si nécessaire, c'est-à-dire supprimez le # en début de ligne) :

user            "salon"    
port            "6600" 
auto_update     "yes" 

Dans la section Files and directories, on va indiquer les chemins vers les fichiers de musique et vers les fichiers utiles à mpd. Ces chemins sont donc adaptables tant que l'utilisateur faisant tourner mpd a les droits nécessaires dessus. C'est pour cela que nous avons simplifié en mettant tout cela dans le dossier personnel de mon utilisateur. Vos chemins peuvent être différents, veillez juste aux permissions. Le plus important est la première ligne : c'est le chemin vers les fichiers de musique. Les autres sont des fichiers utiles à mpd, notamment sa base de données de la collection de musique (db_file).

music_directory         "/home/salon/musique/" 
playlist_directory      "/home/salon/.mpd/playlists" 
db_file                 "/home/salon/.mpd/mpd.db" 
log_file                "/home/salon/.mpd/mpd.log" 
pid_file                "/home/salon/.mpd/pid" 
state_file              "/home/salon/.mpd/state" 
sticker_file            "/home/salon/.mpd/sticker.sql" 

Si ces fichiers n'existent pas, n'oubliez pas de les créer :

mkdir /home/salon/.mpd && mkdir /home/salon/.mpd/playlists
cd /home/salon/.mpd
touch mpd.log pid state sticker.sql

Lancer la création de la base de données grâce au client mpc :

mpc update

Ensuite voici d'autres lignes décommentées (sans le # au début) et donc actives dans ma conf. D'autres fonctionnalités sont possibles, à voir dans la doc de mpd…

zeroconf_enabled        "yes" 

Pour que le client découvre tout seul les paramètres de mpd :

mixer_type              "software" 

Pour pouvoir gérer le volume depuis le client :

volume_normalization    "yes" 

Normalement pour que toutes les pistes sortent avec le même volume sonore (est-ce que ça marche ?? ) :

audio_buffer_size       "8192" 

Le buffer de lecture (utilisation du cache) :

filesystem_charset      "UTF-8" 
id3v1_encoding          "UTF-8" 

Pour l'encodage correct des caractères dans les noms de fichiers et les tags (les accents notamment) :

Enfin, relancez mpd et mettre à jour la base de données :

service mpd restart
mpc update

Choisir un client et le configurer

Maintenant que le serveur est configuré, nous devons pouvoir le contrôler et pour cela nous avons besoin d'un client.

Différents clients existent (et ils sont nombreux). À voir sur cette page.

Nous vous conseillons « gmpc » ou « ario » pour les clients lourds (logiciels installés sur votre machine cliente). Ensuite vous avez le choix pour les clients web ou même une extension de firefox si vous voulez contrôler mpd par un navigateur web (« music player minion »).

Dans tous les cas, et avec ce qui est sur cette page, il faut indiquer au client l'adresse de la machine faisant tourner mpd et le bon port. Ici ce serait :

Hôte : 192.168.x.x (adresse ip de votre serveur)
Port : 6600 (le port par défaut de mpd que l'on n'a pas changé dans la conf)

Configurer mpd pour la sortie audio (choisir sa carte son)

Suivant vos sorties son, il va falloir dire à mpd d'utiliser la bonne notamment si vous utilisez un DAC (carte audio externe branchée en USB) afin que mpd ne diffuse pas sur la sortie son « habituelle » (carte intégrée à la machine par exemple). L'avantage du DAC est de pouvoir séparer les canaux diffusant de la musique et des vidéos afin que les deux ne se chevauchent pas. Ainsi, il n'est pas essentiel d'arrêter Mpd lorsque l'on veut regarder une vidéo sur son media center : il suffit de changer de canal sur votre ampli.

  • Note pour le RaspberryPi : brancher le DAC directement sur les ports usb du raspberry et pas via un HUB-usb (il y a des soucis de craquements et de forts bruits intempestifs).

Notre carte étant connectée en USB, on ne peut se fier à l’adressage de type hw0,0, vu qu’il peut être modifié au moment de l’allumage du DAC.

On va plutôt utiliser l’identifiant renvoyé par la commande suivante :

aplay -l 

C'est une commande de Alsa qui renvoi les cartes son.

Exemple de résultat :

**** Liste des Périphériques Matériels PLAYBACK ****
carte 0: ALSA [bcm2835 ALSA], périphérique 0: bcm2835 ALSA [bcm2835 ALSA]
Sous-périphériques: 7/8
Sous-périphérique #0: subdevice #0
Sous-périphérique #1: subdevice #1
Sous-périphérique #2: subdevice #2
Sous-périphérique #3: subdevice #3
Sous-périphérique #4: subdevice #4
Sous-périphérique #5: subdevice #5
Sous-périphérique #6: subdevice #6
Sous-périphérique #7: subdevice #7
carte 1: PCM2702 [Burr-Brown Japan PCM2702], périphérique 0: USB Audio [USB
Audio]
Sous-périphériques: 1/1
Sous-périphérique #0: subdevice #0

Le DAC est dans les trois dernières lignes, soit la « carte 1 » et son identifiant ALSA est donc *hw:1,0.

Si vous voulez que cette carte son USB soit toujours celle par défaut pour Alsa (c'est à dire apparaissant en carte 0), ajoutez cette ligne dans le fichier /etc/modprobe.d/alsa-base.conf :

options snd-usb-audio index=0

Si vous voulez, à l'inverse, empêcher que cette carte soit mise par défaut, ajoutez plutôt cette ligne :

options snd-usb-audio index=-2

On va donc écrire tout cela dans la conf de mpd (en root) :

nano /etc/mpd.conf

Dans la section audio output mettez ces lignes

# An example of an ALSA output: 
# 
audio_output { 
    type        "alsa" 
    name        "Nom-du-periphérique" ## Mettre ici n'importe quel nom, c'est au choix…
    device      "hw:1,0"    # optionnel sinon, ce sera celui d'Alsa par defaut

Vous pouvez configurer Alsa spécifiquement pour votre utilisateur faisant tourner mpd. Pour cela, reportez vous à cette section.

Note : nous n'utiliserons pas Pulseaudio (intermédiaire pour le son) mais uniquement Alsa. En effet, Pulseaudio ne fait que l'intermédiaire avec Alsa et il paraît inutile d'empiler tant de couches étant donné notre utilisation. Mpd « parlera » directement avec Alsa. Cependant, si vous voulez configurer la sortie son par PulseAudio dans le cas où vous voulez utiliser ses fonctions, il vous suffit d'installer le paquet pulseaudio et d'indiquer à mpd d'utiliser pulseaudio ajoutant la bonne indication dans le fichier /etc/mpd.conf.

Accéder à sa bibliothèque musicale située sur le réseau

Cela concerne les personnes ayant une machine dédiée à mpd qui est reliée à un système d'amplification et dont le répertoire contenant les musiques se trouve sur une autre machine. On prendra en compte que mpd tourne en temps qu'utilisateur « salon ». On utilisera un montage par sshfs mais vous pourrez préférer un montage par nfs ou samba…

Tout d'abord, créer un répertoire de montage, par exemple /media/musique.

mkdir /media/musique

Donner les droits à l'utilisateur allant faire tourner mpd :

chown -R root:salon /media/musique && chmod g+rwx /media/musique 

Ici, on met le groupe salon en groupe propriétaire et on donne tous les droits à ce groupe.

Générer une clé ssh en étant connecté avec l'utilisateur « salon » :

ssh-keygen -t rsa 

Ne pas mettre de passphrase pour cette clé, cela permettra un montage automatique sans avoir à se connecter avec cet utilisateur ou même utiliser un « ssh-agent ». Laisser le nom par défaut proposé pour cette clé (id_rsa).

Exporter la clé publique sur le serveur :

ssh-copy-id -i ~/.ssh/id_rsa.pub salon@nom-ou-ip-du-serveur 

On utilisera crontab pour faire le montage au démarrage du système :

nano /etc/crontab 

Ajouter les lignes qui vont bien :

@reboot    salon   sshfs salon@nom-ou-ip-du-serveur:/media/musique /media/musique 

Explication de la ligne :

  • @reboot : lancer la commande une seule fois au lancement de cron lors du démarrage de la machine.

  • salon : l'utilisateur qui lancera la commande

  • sshfs : le programme permettant de faire un montage depuis un répertoire distant

  • salon@nom-ou-ip-du-serveur : la connexion au serveur en temps qu'utilisateur « salon »

  • :/media/musique : le répertoire de la musique sur le serveur

  • /media/musique : le point de montage sur la machine cliente (celle où on fait tourner mpd)

Enfin, ajouter l'utilisateur aux groupes fuse, audio, cdrom :

adduser salon fuse 
adduser salon audio 
adduser salon cdrom 

Afin que le montage par sshfs commandé par cron se fasse avant le lancement de mpd, il faut transformer le fichier /etc/init.d/mpd pour y ajouter /usr/bin/crontab à la suite de Required-Start: $local_fs $remote_fs, soit la ligne :

Required-Start:    $local_fs $remote_fs /usr/bin/crontab

Utiliser mpd sur une machine dédiée comme le Raspberry-pi

Vous pouvez suivre ce tutoriel.

Il vous faudra veiller à bien configurer la sortie son sous le Raspberry. Pour cela, vous pouvez consulter cette section

Utiliser un lecteur CD avec Mpd

Cette partie vise à pouvoir utiliser un lecteur CDROM relié en usb à une machine comme un RaspberryPi

Notes : Pour l'utilisation avec une cubox, il faut brancher le lecteur CDROM/usb sur le port usb du bas de la cubox (en fait, sur le port usb du haut, le boot ne se fait pas car il ne semble pas reconnaître le périphérique). Pour l'utilisation avec un raspberry, il faut utiliser le lecteur via un hub-usb auto-alimenté étant donné la faible tension que peut fournir le raspberry.

Ensuite, il y a deux méthodes possibles : avoir une session X (session graphique) active et l'utilisateur « salon » connecté ou rien de tout cela. En effet, le montage d'un disque audio se fait que par le travail d'un navigateur de fichier (nautilus, thunar…). Il y a tout de même une méthode de contournement si on ne veut pas utiliser de session X.

Manipulations communes

1- Faire en sorte que le cd audio soit bien visible dans /dev/sr0. Pour cela, il faut donc ajouter l'utilisateur faisant tourner mpd dans le groupe cdrom :

adduser <user> cdrom 

2- Dans l'ordre c'est gvfs-mount qui appelle fuse afin de faire un point de montage dans le dossier .gvfs de l'utilisateur. Il faudra donc installer fuse, gvfs, gvfs-bin et gvfs-fuse, paquets nécessaires au montage de volumes dans le répertoire /home/<votre-user>/.gvfs :

apt-get install fuse gvfs* libcdio-paranoia1

3- Ensuite, il faut faire un lien (appelé ici « cd-audio ») à partir de la collection de musique. Pour cela, se placer dans le dossier de musique puis créer le lien :

cd /repertoire/de/musique/de/mpd
ln -s /home/<user>/.gvfs/<nom du point de montage> cd-audio 

Dans notre cas, le nom du point de montage correspond à « point de montage cdda sur sr0 ». À vous de vérifier après avoir inséré un CDaudio.

Manipulations spécifiques à l'utilisation d'une session X

Nous sommes dans le cas où vous utilisez un environnement de bureau lancé par l'utilisateur faisant tourner mpd.

Il faudra configurer le navigateur de fichier pour qu'il exécute toujours le montage lors de l'insertion d'un CDaudio. Sans cela, la navigation dans le CDaudio est possible mais aucun point de montage n'est fait et Mpd ne pourra pas accéder aux fichiers. Nous détaillerons pour Thunar (navigateur de Xfce) et Nautilus (navigateur de Gnome).

Pour Thunar

Il faut aller dans les paramètres de volumes amovibles :

Menu Éditer > Préférences > Onglet Avancée > cocher Activer le gestionnaire de volume

Puis cliquez juste en dessous sur Configurez la gestion des disques amovibles et des médias. Dans la fenêtre qui apparaît, dans l'onglet Stockage, vous avez un champ indiqué par Commande pour les CDs Audio. Mettez dans ce champ la commande suivante :

dbus-launch gvfs-mount cdda://sr0

Pour Nautilus dans gnome

Lancer le centre de contrôle des paramètres (taper dans le terminal gnome-control-center). Choisir « détails » puis le menu « médias amovibles » et dans « cd-audio » choisir « ouvrir le dossier » Ainsi, à chaque insertion d'un cd audio, les fichiers seront accessibles dans le dossier /home/salon/.gvfs.

Mettre à jour la base de données avec le client ou sur le serveur :

mpc update cd-audio 

Manipulations spécifiques à l'utilisation en mode « serveur »

Nous sommes dans le cas où vous n'utilisez pas de session graphique et d'environnement de bureau.

Afin de ne pas avoir à utiliser une session graphique, il faut réaliser les étapes suivantes :

1-Faire en sorte que l'insertion d'un CDaudio soit reconnue par le système

2-Faire en sorte que la reconnaissance d'un CDaudio soit reconnue par l'utilisateur de mpd

3-Faire en sorte que, suite à la reconnaissance d'un CDaudio, ce dernier soit monté dans un répertoire utilisable par l'utilisateur de mpd et que la base de donnée de mpd soit mise à jour.

4-Activer tout cela au démarrage

Reconnaissance de l'insertion d'un CDaudio

Installer le paquet cdde. C'est ce paquet qui va surveiller l'insertion d'un CD dans le lecteur CDROM et pouvoir lancer des commandes en réponse.

apt-get install cdde 

Lancer une première fois cdde sous l'utilisateur de mpd (attention, pas en root) :

cdde 

Cela va produire un fichier dans le home : /home/<user>/.cdde.xml.

Il faut transformer ce fichier en changeant la ligne traitant du CDaudio :

<audio command="touch $HOME/.cdrom/cdde ; sleep 2s ; rm $HOME/.cdrom/cdde"/> 

Étant donné que cdde ne peut pas lancer certaines commandes de l'utilisateur, il faut faire un intermédiaire. Cette commande permet, à l'insertion d'un CDaudio, de créer un fichier vide dans un répertoire de surveillance puis de le supprimer dans la foulée. C'est la création de ce fichier qui sera prise en compte par le deuxième logiciel de surveillance : inotify

Créer ce dossier qui permettra de faire la surveillance de l'insertion d'un CD :

mkdir /home/<user>/.cdrom 

Reconnaissance d'un CDaudio par l'utilisateur de mpd

Il faut donc installer un deuxième logiciel de surveillance qui va permettre de lancer le montage et la mise à jour de la base.

apt-get install inotify-tools 

Ensuite, il faut créer un script inotify. Nous le mettrons dans un dossier bin de l'utilisateur mais il pourrait résider ailleurs, tant que l'utilisateur en question a les droits sur ce fichier.

Création du dossier :

mkdir ~/bin 

Création du script (pas en root) :

touch ~/bin/inotify-cdrom && chmod +x ~/bin/inotify-cdrom && nano ~/bin/inotify-cdrom

et y mettre dedans :

#!/bin/sh
### BEGIN INIT INFO
# Provides:          inotify-cdrom
# Required-Start:    $all
# Required-Stop:     $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1
# Short-Description: Start daemon at boot time
# Description:       Enable service provided by daemon.
### END INIT INFO

# CONFIGURATION
DOSSIER_SURVEILLE=$HOME/.cdrom
# MAIN
inotifywait -m --format '%w%f' -e create $DOSSIER_SURVEILLE | while read LINE
do
$HOME/bin/mount-cdrom-mpd
done

Automatiser le montage et mettre à jour la base de données

On notera que dans le script précédemment créé (/home/<user>/bin/inotify-cdrom) la dernière ligne appelle un autre script se chargeant de faire le montage. Il va falloir créer ce fichier dans le même répertoire :

cd ~/bin && touch mount-cdrom-mpd && chmod +x mount-cdrom-mpd && nano mount-cdrom-mpd

et mettre dans ce fichier le contenu suivant :

#!/bin/bash
DRIVE="sr0"
DOSSIER="cd-audio"

echo "A audio cd was inserted" |logger -t $USER ;
echo "mount par dbus-launch et gvfs de cdda://$DRIVE dans $HOME/.gvfs" | logger -t $USER ;
fusermount -u $HOME/.gvfs;
killall gvfsd;
sleep 2s && dbus-launch gvfs-mount cdda://$DRIVE 2>&1 |logger -t $USER &&
echo "mise à jour de la base mpd"|logger -t $USER ;
mpc update $DOSSIER | logger -t $USER ;
exit

Explication du script :

Les deux premières lignes sont la définition des variables (si sr0 ne correspond pas sur votre système, il suffit de le changer dans cette ligne pour qu'il soit changé dans tout le script) :

  • Le contenu de echo et de logger n'est là que pour écrire ce qu'il se passe dans les logs (/var/log/syslog)

  • fusermount -u est la commande permettant de défaire le montage de fuse (démonter l'ancien disque inséré pour laisser « l'espace libre » au nouveau)

  • killall gvfsd peut être nécessaire (dans notre cas, des processus gvfs restaient actifs après chaque éjection de disque et donc s'accumulaient. Cela permet de n'en garder qu'un seul à chaque utilisation d'un disque audio)

  • dbus-launch permet de s'affranchir de l'affichage graphique. C'est cette commande qui est lancée par le navigateur de fichier si on a une session graphique pour afficher le contenu du cd-audio

  • gvfs-mount réalise le montage du cd-audio en temps que tel dans le répertoire .gvfs de l'utilisateur

  • mpc update est la commande pour mettre à jour la base de donnée de mpd afin que l'on puisse accéder au contenu du cd depuis un client mpd

Activer tout cela au démarrage

Enfin, il faut que tout ce système fonctionne constamment, même si la machine doit redémarrer. Cron permet de lancer des commandes au démarrage de la machine et s'affranchir de la complexité d'installation d'un « service » au démarrage. Il suffit donc de rajouter un ligne au fichier /etc/crontab (avec les droits root)

nano /etc/crontab

et y mettre ces deux lignes (la première est juste un « mémo » et sera ignorée grâce aux "##") :

## Notification de l'insertion de CDaudio dans le lecteur 
@reboot <user>    cdde && /home/<user>/bin/inotify-cdrom 

(remplacer <user> par le nom de l'utilisateur faisant tourner mpd)

Si ce n'est pas déjà fait, créer un lien dans le répertoire de musique vers le répertoire de l'utilisateur de mpd montant le disque audio :

cd /media/disque-musique/ && ln -s /home/salon/.gvfs/point\ de\ montage\ cdda\ sur\ sr0/ cd-audio

ce qui donne (vérifions avec la commande ls -al)

<user>@<machine>:/home/salon/musique# ls -al
total 60 
drwxr-xr-x  1 root  root   4096 avril  6 13:37 . 
drwxr-xr-x 19 salon salon  4096 mars  31 22:41 .. 
lrwxrwxrwx  1  1001  1001    48 févr. 28 11:37 cd-audio -> /home/salon/.gvfs/point de montage cdda sur sr0/