Le Raspberry Pi est un excellent petit engin pour bidouiller. Pas cher, peu consommateur, tout petit, des milliers d’utilisateurs sur le web entier ne cesse de lui trouver des utilités. En effet, son coût modique permet de l’envisager un peu partout dans votre maison dans des rôles très différents et inattendus. Chez moi, j’ai décidé de m’en servir en tant que serveur audio branché sur ma chaîne. Piloté par les PCs ou des applications mobiles/tablettes, on dispose ainsi d’un jukebox de qualité, ultra modulable, pour une fraction du prix dans le commerce d’une machine dédiée et propriétaire.
Bien sûr, il faut prendre sur soi et faire un de peu de « do it yourself », mais rien d’insurmontable, surtout quand on aime apprendre.
Commençons à zéro en allant télécharger la distribution. J’ai choisi Raspyfi, en lieu et place de l’habituel Raspbian, car j’ai eu des difficultés avec cette dernière. Si vous suivez un peu la communauté Raspberry, vous êtes peut-être déjà tombé sur des fils de discussion interminables parlant des problèmes du Raspberry avec l’USB. En effet, il semblerait qu’ils soit victime de perte de paquets lorsque l’USB est trop chargé. Ce qui est assez pénible, vous l’avouerez, quand c’est une clé wifi qui fait la connexion avec votre réseau, et que vous cherchez depuis 4 heures pourquoi vous venez de subir une énième déconnexion. Raspyfi adresse en partie ce problème, avec un peu de « tunning » : quelques options dans les modules chargés au démarrage, on fait passer l’USB en 1.1, dans un futur proche un noyau RT sera rajouté et hop, le système est optimisé pour une utilisation sans « jutter » et autres barbarismes que les audiophiles adorent.
L’installation de Raspyfi est un jeu d’enfant, je vous conseille de vous orienter vers le site officiel ainsi que sur celui de Raspbian pour plus de détails.
Ensuite coté logiciel, pour remplir ce rôle nous avons le choix entre plusieurs solutions. Ampache, Subsonic, mpd, tous permettent de gérer une bibliothèque de sons et de contrôler la lecture à distance. Quelques points :
- Ampache se fait vieux, les applications mobiles qui vont bien ne sont pas très belles ou n’ont pas bonne réputation
- J’avais besoin d’un jukebox faisant aussi office de serveur de streaming, et que l’application mobile soit capable de gérer les deux modes. mpd et ses applis dérivées ne gèrent pas ça nativement. Dommage, mpd est installé de base avec Raspyfi.
- Subsonic adresse ces deux précédents points. Cependant, à sa décharge il n’est pas tout à fait gratuit. En effet, pour utiliser les applications mobiles au delà d’un mois d’essai, il faut « acheter » une « licence de soutien » (prix libre). Le surcoût d’une « licence » de soutien ne me gênant pas particulièrement (je suis bien plus attaché au concept de liberté de l’open source qu’à la gratuité qui est souvent poussé en tant que premier argument), j’ai donc choisi Subsonic. Au passage, si vraiment vous êtes allergiques au « soutien », il est tout à fait facile de trouver un patch désactivant les limitations, ou même d’utiliser Supersonic, un fork créé à cette occasion. Et l’application mobile Androïd sans publicité est disponible sur le site des développeurs sous forme d’un apk.
Subsonic étant en java, on commence par installer un JRE. De préférence open source, on ne se refait pas. Ne faites pas les malins (comme moi qui a perdu deux heures…) et n’installez pas la version headless en pensant économiser des ressources : les librairies pulseaudio sont dans la version desktop… On installe au passage ffmpeg parce qu’on en aura besoin après :
sudo apt-get install openjdk-7-jre ffmpeg
Ensuite, on récupère et installe le paquet sur le site officiel (vérifiez si de nouvelles versions ne sont pas disponibles au lieu de recopier mon lien, petits fainéants) :
wget http://downloads.sourceforge.net/project/subsonic/subsonic/4.7/subsonic-4.7.deb
dpkg -i *.deb
Ensuite, on édite le fichier de conf de subsonic (/etc/default/subsonic) pour le faire démarrer avec un utilisateur autre que root. Ici on prend l’utilisateur mpd, puisque ça nous évite d’avoir à en configurer un nouveau (l’ajouter, le mettre dans le bon groupe, etc) :
SUBSONIC_USER=mpd
Si vous utilisez le chip audio du Raspberry plutôt qu’un dongle audio USB avec sortie optique, alors il faut réactiver le module. Je ne sais pas pourquoi, éditer le fichier /etc/modules pour rajouter la ligne « snd_bcm2835 » n’a pas marché chez moi. Si vous avez une idée, faites le moi savoir dans les commentaires. En attendant un coup de génie, rajoutez une ligne dans /etc/rc.local juste avant le exit 0 :
modprobe snd_bcm2835
Configurer votre sortie audio par défaut (dans mon cas ‘1’ pour le jack):
sudo amixer cset numid=3 1
Vous utilisez une clé wifi ? Avec WPA-2 parce que vous n’êtes pas un insouciant ? Au plus simple, éditez /etc/network/interfaces :
auto lo
iface lo inet loopback
iface eth0 inet dhcp
allow-hotplug wlan0
iface wlan0 inet dhcp
wpa-ssid "MonSSID"
wpa-psk "masuperpassphrase"
iface default inet dhcp
Dans mon cas, j’utilise le DHCP avec des baux statiques pour mes IPs, si ce n’est pas votre cas vous devrez utiliser une configuration statique. Vous vous attendiez à ce que je vous mâche le travail en vous donnant les bonnes directives ? Décidément vous êtes vraiment fainéants aujourd’hui ! Cherchez vous-même sur le net !
Ensuite : stockez-vous vos fichiers de musique sur le réseau ? Faites un montage depuis /etc/fstab. Pour ma part, j’ai utilisé ma freebox en tant que stockage et partage Samba : tout simplement parce que je suis certain que celle-ci est toujours allumée. Voilà la ligne qui va bien chez moi (remplacez l’IP par celle qui va bien chez vous)
//192.168.0.254/Disque\040dur\Musiques /media/music cifs username=anonymous,password=,uid=mpd,file_mode=0644,dir_mode=0755,iocharset=utf8,rsize=130048,wsize=4096,_netdev,sec=ntlmv2 0 0
Tiens, on apprend au passage qu’on utilise le caractère spécial \040 pour faire un espace dans un point de montage, ou encore qu’il faut utiliser _netdev pour que le système comprenne qu’il faut que le réseau soit initié complètement avant de faire les montages. On dit merci qui ?
Pour que le mode jukebox fonctionne, il faut préciser à Subsonic quelle sortie audio utiliser. Éditer le fichier ‘/usr/bin/subsonic’ et rajouter le paramètre suivant dans la liste des paramètres de lancement java (qui représente le jack chez moi) :
'-Djavax.sound.sampled.SourceDataLine=#ALSA [plughw:0,0]' \
Allez on a presque fini. La version de ffmpeg livrée avec subsonic n’est pas adaptée à l’architecture ARM du Raspberry, il faut donc la remplacer :
sudo rm /var/subsonic/transcode/ffmpeg
sudo cp /usr/bin/ffmpeg /var/subsonic/transcode
Redémarrez Subsonic (/etc/init.d/subsonic restart), et ensuite rendez-vous sur http://<ip_du_raspberry>:4040. Subsonic est très long à se lancer sur le petit Raspberry, donc pas de panique si il ne se passe rien les premières minutes. De plus les pages jsp sont très très longues à charger les premières fois, rassurez vous là aussi, après c’est tout à fait fluide.
Je ne vais pas décrire en détail la configuration de Subsonic, c’est assez simple et vous trouverez plein de tutos sur internet. Par contre, pour vous évitez de chercher inutilement, voilà quelques points pas évidents pour utiliser Subsonic en mode Jukebox (car par défaut il stream vers votre navigateur) :
- Configurez un « lecteur » (Paramètres –> lecteur) de type « Jukebox »
- Configurez un utilisateur en lui donnant les droits d’utiliser le « jukebox » (Paramètres –> Utilisateurs)
- Pour le contrôle en jukebox depuis l’application mobile/tablette, il faut utiliser le bouton « RC » accessible depuis le player (en bas à gauche).
Voilà !