27 09 | 2012

Installation d'un serveur de Musique avec Ubuntu 12.04 server, ALSA et mpd

Rédigé par Sorrodje

Classé dans : Informatique, Mémos techniques

Ma marotte du moment, c'est le son !

Du coup je cogite pour me faire un serveur de son de bonne qualité ( FLAC only) à brancher à ma chaîne hifi de salon . L'idée étant de "servir" les fichiers lossless à un  bon  DAC qui lui même alimente l'ampli de la chaîne.  Une petite machine discrète genre Zotac , eeepc ou mac mini , pas d'écran et donc pas d'interface de bureau.  Un serveur de son quoi !



Il suffit de se retrousser les manches et de dégainer une Ubuntu Server, un serveur de son basique ALSA et un player de musique particulier qui fonctione en mode client/serveur : MPD. 


Installation et configuration d'ALSA



On entame par du classique. je considère par défaut qu'on travaille ici en ssh sur un serveur Ubuntu 12.04 fraĉhement installé et à jour (apt-get update && apt-get upgrade OK).

:~$ sudo apt-get install alsa
[sudo] password for sorrodje:
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances
Lecture des informations d'état... Fait
Note : sélection de « alsa-base » au lieu de « alsa »
Les paquets supplémentaires suivants seront installés :
alsa-utils libasound2 libsamplerate0 linux-sound-base
Paquets suggérés :
apmd alsa-oss oss-compat libasound2-plugins libasound2-python
Les NOUVEAUX paquets suivants seront installés :
alsa-base alsa-utils libasound2 libsamplerate0 linux-sound-base
0 mis à jour, 5 nouvellement installés, 0 à enlever et 30 non mis à jour.
Il est nécessaire de prendre 3 034 ko dans les archives.
Après cette opération, 5 619 ko d'espace disque supplémentaires seront utilisés.
Souhaitez-vous continuer [O/n] ?

On valide et on enchaîne directement sur une étape indispensable : permettre à notre user d'utiliser ALSA. Il faut pour cela l'ajouter au groupe UNIX audio :

:~$sudo adduser sorrodje audio

On se déconnecte et on se reconnecte pour pouvoir accéder à alsa et ouvrir ensuite le contrôle alsa:

:~$ alsamixer




On s'aperçoit rapidement que tout en en Mute ... on passe alors les canaux Master et PCM en "unmute" grâce aux flèches directionnelles droite/gauche et la touche M de notre clavier. On en profite pour régler le volume avec les touches haut/bas .. on peut bien sur revoir ces réglages plus tard ;)


On teste avec un son brut "pink noise"

:~$ speaker-test -c 2


Si le son sort, la configuration de base est OK. Par contre, si alsamixer ne veut pas s'ouvrir ou qu'on a un quelconque problème pour effecuer les manips ci-dessus, Il faut aller voir si la carte son par défaut est configurée correctement:

D'abord on recherche les identifiants de notre (nos) carte(s) son en listant les périphériques disponibles:

:-$ aplay -l
**** Liste des Périphériques Matériels PLAYBACK ****
carte 0: Intel [HDA Intel], périphérique 0: STAC92xx Analog [STAC92xx Analog]
Sous-périphériques: 1/1
  Sous-périphérique #0: subdevice #0

Ici, sur notre netbook d'exemple, on a une seule carte son et c'est la carte 0/subdevice 0. On crée/modifie le fichier /etc/asound.conf pour préciser à ALSA le périphérique à utiliser :

:~$ sudo nano /etc/asound.conf

et on y met le contenu suivant:

defaults.pcm.card 0 
defaults.pcm.device 0
defaults.ctl.card 0

Les options pcm signalent quelle carte doit être utilisée comme sortie audio et l'option ctl spécifie la carte affichée par défaut par alsamixer.

Une fois ALSA installé et fonctionnel on peut passer à l'installation de Music Player Daemon (MPD)



 Installation et configuration de mpd sur le serveur



L'installation emmène avec elle quelques dépendances:

:~$ sudo apt-get install mpd


A la suite de cette opération MPD doit être installé et le démon démarré . On vérifie rapidement:

:~$ ps aux | grep mpd
mpd       2276  0.0  4.4  69704 11104 ?        Ssl  10:27   0:00 /usr/bin/mpd /etc/mpd.conf

Comme précédemment, on se doit de permettre à l'utilisateur mpd d'accéder à alsa et il faut donc ajouter le user mpd au groupe audio.

:~$ sudo adduser mpd audio

puis on va faire les deux ou trois configurations de base de mpd :

:~$ sudo nano /etc/mpd.conf

On modifie si nécessaire l'emplacement ou mpd doit chercher la bibliothèque de Musique:

...
#
music_directory         "/home/sorrodje/Musique"
...

Ici je choisis d'utiliser mon /home et le répertoire Musique crée au préalable.

Ca permet d'alimenter/gérer la bibliothèque de musique sur mon serveur ( via sftp/ssh en ce qui me concerne mais on peut utiliser le moyen de son choix genre partage samba ou ftp ) grâce à mon seul utilisateur sans avoir à passer en root. MPD n'ayant besoin que de lire les fichiers en question, ça ne pose pas de souci de permissions.

Ensuite si on installe mpd sur un serveur, ce n'est pas pour le piloter uniquement depuis le serveur en question mais depuis d'autres clients sur le réseau local.

On modifie donc la ligne

bind_to_address         "localhost"

à

bind_to_address         "::"

ipv6 et ipv4 compliant !

Voilà l'accès notre serveur mpd ouvert sur le réseau local.

On constate que mpd utilise par défaut alsa pour émettre un son. On ajoute une ligne à cette configuration :

# An example of an ALSA output:
#
audio_output {
        type            "alsa"
        name            "My ALSA Device"
        device          "hw:0,0"        # optional
        format          "44100:16:2"    # optional
     mixer_type     "software"    # Contrôle volume par le client mpd
        mixer_device    "default"       # optional
        mixer_control   "PCM"           # optional
        mixer_index     "0"             # optional
}

La ligne "mixer_type" va permettre de régler le volume sonore depuis les cliens mpd ( client en local sur le serveur ou en réseau sur une autre machine). On en profite aussi pour baguenauder dans le fichier de conf pour voir que d'autres sections (inactives puisques commentées avec les #) sont dispo pour utiliser d'autres serveurs de son : pulseaudio, OSS, Jack.

On redémarre mpd pour faire prendre en compte les modifs:

:~$ sudo service mpd restart

Voilà!

Il faut vérifier que mpd est OK et on installe pour cela un client "local" sur le serveur. On n'a pas d'interface graphique, on utilise donc sur le serveur un client MPD utilisable sans GUI : ncmpc


:~$ sudo apt-get install ncmpc


et vu qu'on est curieux comme des pies, on va voir la tête de la bête :

:~$ ncmpc



Spartiate non ?


En tapant sur h on a une belle aide expliquant comment manoeuvre ce modèle de "user-friendly". JE vous donne une étape de base à ne pas oublier (j'ai tourné un moment dont un paluchage soutenu de docs imbitables avant de trouver donc je vous épargne les énervements) avant d'essayer d'écouter la zique : Ctrl + U permet de demander à mpd la mise à jour de sa base de donnée. Ici, vu qu'on est en phase d'install c'est la création de la base de donnée qui est générée. Il n'y pas d'autres moyens pour créer la base de donnée MPD que de passer par un client.


Un petit F4 pour accéder au bon "onglet" de ncmpc et hop on a notre bibli de Musique dans laquelle on peut naviguer (relativement) intuitivement (enfin de l'intuition de gros barbu quand même hein):


  


En sélectionnant un titre, on peut en lancer la lecture. Tout est OK si on l'entend ;-D. Sinon c'est que quelquechose a été loupé dans ce qui précède et un bon point de départ pour savoir où ça merde est d'aller jeter un oeil dans /var/log/mpd/mpd.log.



Accès et contrôle à distance du serveur MPD


L'intérêt global de la manoeuvre ici est de se faire un serveur son pilotable depuis l'interface habituelle de notre machine de bureau . Pas de se connecter en ssh pour se palucher un lecteur de musique en ncurses (ou alors c'est vraiment pour se la péter auprès de la frange la plus associale de la population geek... mais là je vous conseille de tout monter sur base Gentoo plutot qu'Ubuntu ;-))) )

Rien de compliqué une fois que toute la mise en place du serveur est faite.

Par exemple depuis un Desktop GNU/Linux , on dispose de pas mal de client dont le plus sympathique m'a paru être ARIO .

Sur une Ubuntu 12.04 on installe donc cet appli par les voies habituelles (logithèque, synaptic, apt-get pour les plus teigneux) puis on l'ouvre.

On va directement dans Edition > préferences pour donner les paramètres de connexion. On a juste à donner l'IP du serveur (qu'on aura pris le soin de fixer au préalable pour ne pas avoir à changer le paramétrage de connexion au gré des humeurs du DHCP de la box) et lui attribuer un nom. On laisse les autres paramètres par défaut (à moins qu'on ait modifié par exemple le port d'écoute de mpd dans /etc/mpd.conf bien sur). et on connecte.





Si on ne l'a pas fait comme précédemment, on demande directement la mise à jour de la base de données ( via Fichier/Mise à jour de la base de donnée ou Ctrl + U ) et après un temps plus ou moins long selon la taille de la collection de musique on obtient un résultat ma foi fort propre :





En demandant la lecture, ça lançe la musique sur le serveur où est installé mpd qu'on aura eu la bonne idée de connecter à la chaîne hifi. Ario dispose de pas  mal d'options de configurations et de possibilités sympathiques très faciles à découvrir.

Il existe bien d'autres clients MPD (lien) dont des clients pour smartphones Apple ou Android permettant de piloter facilement son serveur de musique depuis son téléphone. J'ai testé MPdroid pour android et c'est pas mal:

   



MDP permet aussi de diffuser la musique en réseau (en streaming) soit par le mode intégré soit en association avec Icecast (lien) . Je n'ai pas testé

Enfin je me suis intéressé à MPD par les possibilités avancées de configuration de sortie audio dont il dispose. Je n'ai pas encore creusé la question mais ça ne saurait tarder ;).

Dernier commentaire : On peut arriver à rendre le même service ( serveur de son avec contrôle distant ) avec d'autres moyen. Je suis devenu particulièrement fan de Subsonic pour cela.

Certes Subsonic est plutôt orienté streaming à la base mais L'interface proposée est autrement plus sympa que celles des clients MPD que j'ai pu essayer et le mode Jukebox (où c'est le serveur subsonic qui diffuse la musique  et pas le client http) est très simple à mettre en oeuvre.  MPD vs Subsonic je pense que je ferais un petit article sur le sujet. Le choix se discute :)


Ressources utiles :

3 commentaires

lundi 11 février 2013 à 17:40 koax a dit : #1

Bonjour,

j'ai mis en place un serveur MPD chez moi mais je voudrais y accéder depuis l'extérieur.
J'ai une freebox ou j'ai redirigé le port 6600.

Mais quel adresse utiliser dans MPdroid par exemple ??

mardi 12 février 2013 à 10:41 sorrodje a dit : #2

@koax: En fait il faut appeler 'l'ip externe de la box . Chez Free elle est fixe me semble t-il donc ça ne devrait pas poser de souci. Sur une IP variable, il aurait fallu utiliser un nom de domaine et le service associé chez noIP ou dyndns pour que le nom de demaine en question "suive" les variations de l'ip dynamique.

Ceci dit je n'ai pas testé en vrai donc je fais une réponse théorique, "A vue de nez" .

mardi 03 juin 2014 à 19:57 Fabrice a dit : #3

Bonsoir,
Super tes explications et merci pour cela.
Personnellement je n'arrive pas à voir alsa depuis mon lecteur réseau Pionner. Il ne voit que la Bbox et mon serveur n'apparaît pas !
Idem quand je veux utiliser un dac USB externe; le son ne sort que sur la sortie casque....
Merci pour ton aide si tu as le temps...

Écrire un commentaire

Quelle est la première lettre du mot cjardm ? : 

Archives

Contrat Creative Commons
Ce(tte) oeuvre est mise à disposition selon les termes de la Licence Creative Commons Paternité - Partage à l'Identique 2.0 France
.