Un Raspberry Pi pour ma chaîne HI-FI

J’ai eu récemment besoin de me refaire une installation “Hi-Fi” dans le salon. En effet, j’ai déménagé, et mon PC n’est plus dans le salon comme précédemment, or c’était lui qui faisait office de chaîne audio (toute ma musique est numérisée). Il me fallait donc trouver une autre solution.

Je suis d’abord allé dans un magasin de Hi-Fi demander conseil, et j’en suis ressorti avec un devis de 2000€ : 1000€ pour un ampli tuner récent (“connecté”) et autant pour un jeu d’enceintes 5en1.

J’ai alors posé la question sur le forum linuxfr.org, et fort de leurs conseils, je me suis vite orienté vers la solution suivante, beaucoup moins onéreuse :

Diagram réalisé avec LibreOffice Draw et la gallery d’objets réseaux de VRT Systems.

En plus ça faisait longtemps que j’entendais parler des Raspberry Pi, ces nano-ordinateurs de la taille d’une carte de crédit… Il ne me manquait que l’opportunité de l’utiliser : c’est maintenant chose faite avec Volumio, un serveur audio basé sur MPD, le serveur de son bien connu du monde Linux.

Il a fallu ensuite le synchroniser avec ma bibliothèque musicale présente sur le PC. Puis trouver un client Android pour piloter tout ça à partir du smartphone, en essayant de gérer du mieux possible l’éternel problème de l’affichage des pochettes ! 😕

Voyons tout cela d’un plus près…

Le matériel

  • Un Raspberry Pi comme serveur de son, équipé d’une carte DAC+ Pro pour convertir le son en format analogique (130€), ainsi que d’un disque USB 2 GB où ma bibliothèque musicale est stockée (70€).
  • Un ampli-tuner KENWOOD acheté d’occasion 70€ sur “le bon coin”.

J’aurais pu choisir un ampli numérique comme le SMSL AD18 par exemple : il coûte moins de 150 €, a paraît-il de très bonnes performances, et est d’une taille minuscule : il se serait parfaitement accordé avec le Rapsberry ! Mais le nombre d’entrées/sorties est limité, et comme il n’est pas exclu qu’un jour je branche ma TV sur l’ampli, j’ai donc choisi ce bon vieux KENWWOD analogique.

  • Une paire d’enceintes de bonne qualité : des Q Acoustics 3020i (292€). De taille compacte et d’excellente finition, elles ont deux voies, deux haut-parleurs, de type bass-reflex avec un évent de décompression situé en face arrière. Franchement, le son est bon, et très tonique.

Voilà, pour 560€, j’ai un truc qui me convient, qui devrait produire un bon son, et je suis loin du devis du magasin Hi-Fi. 😎

Montage Raspberry

J’ai commandé le Raspberry sur le site suisse HiFiBerry, qui a le mérite d’être spécialisé sur le sujet. Par contre, ce n’était pas forcément une bonne idée car j’ai du payer 35€ de frais de douane à la livraison du colis. Mieux vaut sans doute une fois identifié ce que l’on a besoin de commander sur un site français….

Voilà ma commande : Raspberry Pi 4B 2GB: €49.90, HiFiBerry DAC+ Pro: €34.90, Acrylic case: €9.90, SD card 16GB: €9.90, Raspberry Pi 4 power supply 5.1V/3A: €9.90. Sans oublier 16€ de livraison.

La livraison : au centre le boîtier acrylique qu’il va falloir assembler.

On reçoit tout en kit, qu’il faut assembler, mais c’est assez facile et bien fait. HifiBerry fournit une page d’aide. Le plus long est finalement de retirer le film plastique de protection sur chacune des faces du boîtier, pas toujours facile à “attraper”…

Voilà le boîtier une fois assemblé : au-dessus la carte DAC+ et ses deux sorties RCA jacks.

Installation Volumio

Le boîtier est prêt, il ne reste plus qu’à lui installer un système. Là aussi, les choses sont bien faites, puisque l’on trouve des images qui intègrent l’OS et l’application audio. Ces dernières peuvent être libre ou non, gratuites ou payantes. Il y a une liste proposée sur Hifiberry, mais ce n’est pas exhaustif.

J’ai hésité entre RuneAudio et Volumio, tous deux libres et open source, puis choisi ce dernier bien que l’application Android soit payante, mais ce n’est pas gênant : toutes ces applis sont basées sur MPD (Music Player Daemon) du monde Linux, et d’autres clients (libres et gratuits) existent, j’y reviendrai tout à l’heure. Volumio est par ailleurs basé sur Raspbian, un dérivé de Debian adapté aux cartes Raspberry. C’était aussi un critère de choix (RuneAudio est lui basé sur ArchLinux).

Il suffit alors de télécharger le fichier zip “Volumio for Raspberry”, l’extraire pour en récupérer le fichier .img, vérifier le md5sum éventuellement, et utiliser par exemple BalenaEtcher pour flasher l’image sur la carte microSD.

Il reste à insérer la carte microSD dans le Raspberry et de brancher ce dernier. Quelques minutes plus tard, on s’y connecte par un hotspot wifi que Volumio a créé : le nom est Volumio et le mot de passe est volumio2. J’ai fait ça par le téléphone, n’ayant pas de wifi sur le PC.

Une fois connecté via ce hotspot temporaire, je réponds à quelques questions de base, et je sélectionne HiFiBerry DAC Plus comme sortie (le DAC + Pro n’est pas listé, mais c’est le même pilote) :

C’est évidemment un élément important à vérifier au départ, à savoir que le lecteur audio que vous avez choisi reconnaisse bien votre carte DAC.

Puis je sélectionne mon réseau wifi et j’y connecte le Raspberry. Une fois ceci fait, je peux accéder à Volumio à partir du navigateur de mon PC, via son adresse IP (que je trouve sur la box).

Copie et synchro bibliothèque musicale

Toute ma musique numérisée est sur mon PC (je n’utilise plus depuis longtemps de chaîne HiFi avec lecteur de CD etc…). Quand j’achète un CD, je le “rippe” sur le PC et l’intègre à ma bibliothèque musicale.

Il me faut donc maintenant copier celle-ci sur le disque USB de mon Raspberry, et tant qu’on y est automatiser la synchronisation afin que toute nouvelle musique que j’ajoute sur le PC soit copiée automatiquement vers le Rapsberry et le lecteur Volumio.

Pour cela, un simple script rsync fera parfaitement l’affaire. Il faut d’abord activer l’accès SSH sur le Raspberry afin de pouvoir s’y connecter. Pour cela, il faut aller à l’adresse suivante dans le navigateur http://192.168.1.17/DEV et activer le SSH (l’adresse IP dépend bien entendu de votre réseau local, que l’on trouve sur la box/router).

Ensuite il va falloir que le script puisse se connecter au Raspberry de manière automatique, l’idée étant de lancer ce script automatiquement sans intervention manuelle. Pour cela, j’ai suivi les instructions données sur cette page, et tout a parfaitement fonctionné. On utilise ssh-keygen pour générer une clef, et ssh-copy-id pour la copier sur le Raspberry. C’est plutôt simple et efficace. On génère la clef (donc sur le PC d’où je vais lancer le script) :

[~]
pascal$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/pascal/.ssh/id_rsa):[Appuyer sur Entrée]
Enter passphrase (empty for no passphrase): [Appuyer sur Entrée]
Enter same passphrase again: [Appuyer sur Entrée]
Your identification has been saved in /home/pascal/.ssh/id_rsa.
Your public key has been saved in /home/pascal/.ssh/id_rsa.pub.
The key fingerprint is:
33:b3:fe:af:95:95:18:11:31:d5:de:96:2f:f2:35:f9 [~]
pascal$

Puis on la copie sur le Raspberry avec l’utilisateur volumio :

[~]
pascal$ ssh-copy-id -i ~/.ssh/id_rsa.pub volumio@192.168.1.17
volumio@192.168.1.14's password:
Now try logging into the machine, with "ssh 'remote-host'", and check in:

.ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

Voilà, il n’y a plus qu’à vérifier que tout fonctionne en se connectant avec cette simple commande, qui doit fonctionner sans avoir à entrer de mot de passe :

ssh volumio@192.168.1.17

Le script rsync sera quelque chose comme ça, selon votre configuration. La musique du PC est dans /Edata/Ma Musique et celle de Volumio est dans /media/Music. L’option –delete de rsync permet d’effacer sur la cible (bibliothèque Volumio) ce que j’ai effacé sur la source (bibliothèque PC), c’est mon choix à vous de voir :

#!/bin/bash
rsync -e 'ssh -p 22' -a --delete "/Edata/Ma Musique/" "volumio@192.168.1.17:/media/Music"

Il ne reste plus qu’à l’ajouter à votre crontab, et votre musique est désormais synchronisée automatiquement.

Playlists

J’utilise quelques Playlists sur le PC (dans Rhythmbox) que je voudrais bien retrouver dans Volumio. Elles sont de deux sortes :

  • Certaines sont créées au fil du temps en cours d’écoute : le morceau me plaît, je fais glisser avec la souris le morceau sur le nom de ma playlist dans le panneau de gauche (fonctionnalité Rhythmbox). Dans ce cas, chaque morceau reste dans son dossier d’origine, celui de l’album. Celles-ci ne seront pas faciles à recréer.
  • D’autres playlists directement récupérées ou recréées à partir d’une liste sur le net, comme celle(s) de Vernon Subutex par exemple, ou d’après un roman comme Lester Bangs Mégatonnique Rock Critic, ou encore de Power (!) : dans ce cas, tous les morceaux sont dans le même dossier. Et ce sera donc facile de les recréer à priori.

Il y a également les flux radios qui m’intéressent. Voyons voir tout cela, dans Volumio, puis avec un simple client MPD sur le téléphone.

Playlists dans Volumio

Concernant les Playlists, la syntaxe utilisée par Volumio n’est pas celle de fichiers .m3u, un format standard d’ailleurs utilisé par MPD. Et je n’ai pas trouvé non plus de moyen d’importer ce genre de fichiers (en espérant pouvoir convertir celles de Rhythmbox à ce format). Pour ma première catégorie de playlist, c’est donc foutu, à moins de les recréer à la main, via l’interface, ce qui serait très fastidieux.

Mais comme je ne compte pas utiliser l’interface web de Volumio et que leur application Android est payante, je n’insiste pas plus sur le sujet. À toutes fins utiles, j’ai vu que Volumio stockait ses playlists dans /data/playlists.

Concernant les flux radios, Volumio en fournit une liste assez impressionnante, il est donc facile d’y sélectionner celles qui nous intéressent, et de se créer ses “Radios Favorites” :

Le fichier créé est /data/favourites/radio-favourites. Si vous choisissez “Mes radios internet”, ce sera /data/favourites/my-web-radio.

Album Art

C’est toujours le problème : l’affichage des pochettes des albums ! Tout dépend bien entendu de la qualité d’organisation de votre bibliothèque musicale, et ce n’est pas toujours facile ! J’y porte pourtant beaucoup d’attention, et néanmoins j’ai toujours des surprises, particulièrement avec les compilations ou les playlists : j’ai par exemple une belle collection de CDs des Inrockuptibles, et je veux que ce soit la pochette des Inrocks qui s’affiche.

Sur le PC, avec Rhythmbox, j’ai dans chaque dossier d’album un fichier cover.jpg pour la pochette de l’album, c’est une façon simple et locale de gérer le problème. Il existe beaucoup de lecteurs audio qui se reposent sur des services internet pour retrouver la pochette d’un album ou même des images d’un artiste, mais je ne suis pas fan de cette solution qui a ses limitations et où finalement on ne contrôle plus grand chose.

Pour les compilations, dans cette configuration, il faut faire bien attention à ce que le tag “Album Artist” de chaque morceau contienne la valeur “Various Artists”, ce qu’il faut en général faire manuellement. Dans ce cas, Rhythmbox affichera bien le fichier cover.jpg du dossier de la compilation.

Album Art dans Volumio

Pour l’interface web, il faut aller dans l’interface web de Volumio, et activer dans Sources l’option Web Albumart.

Dans mon cas je le désactive… choix personnel !

Mais comme je vais utiliser un client MPD, je n’ai pas besoin de l’activer. L’application Android va en fait “parler” directement au daemon MPD, en court-circuitant Volumio.

Pour ceux que ça intéresse, Volumio stocke les informations dans /data/albumart. On y retrouve toute l’arborescence de la bibliothèque musicale, comme folder, ou web où sont recréées et stockées les images des albums.

Client MPD Android

Pour piloter Volumio, il y a deux applications disponibles sur F-Droid, le magasin d’applications libres : MPDroid et M.A.L.P. Et ce sont bien sûr tous les deux des clients MPD.

M.A.L.P à une interface un peu plus moderne (material design), et sa dernière mise à jour est récente (mars 2020). La gestion de l’Album Art semble plus évoluée car elle se base sur des services en ligne aussi bien pour les pochettes que pour les artistes (MusicBrainz,Last.fm, Fanart.tv). Ainsi quand un morceau est joué, l’image affichée change et passe de la pochette à des images de l’artiste. Plutôt sympa (particulièrement pour les playlists, voir plus bas)…

Mais hélas, je n’ai pas trouvé de moyen de lui faire lire l’image cover.jpg pour mes compilations des Inrocks. Dommage, l’appli avait pas mal sinon, j’ai créé une “feature request”, on verra ce que ça donne…

MPDroid est si l’on en croit le développeur très complet et atteint les limites de l’API de MPD ! Cela explique que la dernière version date de 2017. Il ne faut donc pas attendre de nouveautés prochainement. L’interface est d’ailleurs assez proche de M.A.L.P, bref c’est un client MPD simple et fonctionnel, et qui “fait le boulot”.

L’interface de MPDroid, en mode Album avec mes pochettes de compilations des Inrocks bien affichées… Et une autre en mode lecture d’un album standard.

Pour les Playlists, il faut les créer, et on peut sélectionner un dossier, ce qui correspond à mes besoins pour les compilations issues de mes lectures. L’inconvénient est que si je suis en vue “Album” ou “Artiste”, je me retrouve avec une entrée pour chaque morceau de la compilation… et sans pochette ! 🙁

Pour celles créées au fil des écoutes avec Rhythmbox, j’ai finalement créés des dossiers spécifiques, et fait un Drag&Drop de Rhythmbox dans le dossier : cela a bien évidemment dupliqué ces morceaux dans ma bibliothèque, mais je ne suis plus à quelques Mo près ! 😉 Par contre, cela pose problème pour les pochettes dans MPDroid, comme nous allons le voir.

Cela a donc été très rapide de les recréer. Les fichiers créés sont (côté Raspberry) stockés dans /var/lib/mpd/playlists : ce sont donc des playlists “mpd” (et non pas Volumio), au format .m3u, ce qui est tout de même appréciable.

En ce qui concerne les radios il suffit de choisir “Flux”, puis “Ajouter le Flux” en haut à droite, et entrer le nom et l’adresse web de la station :

On retrouve la liste de nos radios dans le fichier /var/lib/mpd/playlists/[Radio\ Streams].m3u, que l ‘on peut éditer du coup pour en ajouter d’autres plus rapidement.

Album Art dans MPDroid

Pour MPDroid, il faut aller dans Paramètres – Paramètres des pochettes, cocher “Télécharger les pochettes locales”, puis dans “Chemin vers la musique” mettre cover-art comme valeur, ce qui ne s’invente pas ! Et ne pas oublier de mettre le bon nom de fichier que vous utilisez, cover.jpg en ce qui me concerne, dans “Nom du fichier pochette”.

Ne pas hésiter à faire un “Rafraîchir la bibliothèque MPD” dans les “Paramètres – Informations Serveur” après ce genre de modifications.

Mais rien n’est parfait, avec mes Playlists où chaque morceau apparaît non seulement isolément (logique !), mais également sans pochette. Or ces morceaux ont tous la pochette intégrée dans les tags du fichier. L’idéal serait donc que MPDroid lise cette information en premier, et affiche cette pochette si elle est présente. Ou alors qu’il aille chercher l’information sur le net comme le fait M.A.L.P… Là encore, c’est vraiment galère à gérer !

Difficile de trouver la solution parfaite semble-t-il ! 😕

Problème rencontré

J’ai par la suite remarqué qu’il me manquait des albums sur le Raspberry… Après investigation, j’ai trouvé des “read permissions error” dans le fichier /var/log/mpd.log sur le Raspberry.

Le problème venait de mauvais droits sur mon arborescence du PC (utilisateur différent). Problème vite résolu avec la commande suivante (suivie d’un refresh de la bibliothèque) :

chmod -R 755 /media/Music/* 

Raspbian

Pour finir, quelques commandes utiles, puisqu’après tout Volumio tourne sur Raspbian, un dérivé de Debian adapté au Raspberry.

Justement, pour savoir sur quoi on tourne ( notez que pour la commande lsb_release, il faut installer le paquet lsb-release, cherchez l’erreur !) :

volumio@volumio:~$ uname -a
Linux volumio 4.19.86-v7l+ #1283 SMP Fri Nov 29 18:37:40 GMT 2019 armv7l GNU/Linux
volumio@volumio:~$ cat /etc/os-release
PRETTY_NAME="Raspbian GNU/Linux 8 (jessie)"
NAME="Raspbian GNU/Linux"
VERSION_ID="8"
VERSION="8 (jessie)"
...
volumio@volumio:~$ sudo apt install lsb-release
...
volumio@volumio:~$ lsb_release -a
No LSB modules are available.
Distributor ID:	Raspbian
Description:	Raspbian GNU/Linux 8.0 (jessie)
Release:	8.0
Codename:	jessie

Et si vous voulez installer d’autres paquets, comme par exemple vim (cela a été mon premier besoin pour pouvoir simplement éditer un fichier), mais aussi pour utiliser le Raspberry à d’autres fins (c’est tout l’avantage d’être sous Raspbian), il faut commencer par faire un sudo apt update pour récupérer la liste des packages. On peut alors ensuite enchaîner sur un sudo apt install vim qui ne passait pas sans cela.

Conclusion

Je suis plutôt satisfait de cette installation. J’ai utilisé un Raspberry pour la première fois, et c’est assez passionnant, on peut faire plein de choses avec ce micro ordinateur. C’est très facile à assembler, et la partie software, avec l’image flash de Volumio, est d’une simplicité enfantine.

Surtout, j’ai une très bonne qualité de son. Bien que n’étant pas audiophile, je peux vous dire que le son sort bien, sans aucun souffle ! La carte DAC permet une très bonne qualité de signal analogique, et bien sûr les enceintes qui sont forcément toujours un élément important d’une chaîne Hi-Fi..

Le seul regret de cette configuration est de ne pas pouvoir piloter l’ampli depuis le téléphone : il faut donc utiliser la télécommande de celui-ci pour le mettre en marche, et changer le volume de manière significative. Il aurait fallu un ampli plus récent avec une appli Android pour le contrôler, mais pour 70€… 😎

Je pense aussi installer d’autres choses sur ce Raspberry, comme Pi-Hole par exemple, qui a l’air d’être un truc sympa pour bloquer les pubs sur son réseau local. J’espère que c’est possible avec cette image Volumio ? Si c’est le cas, ce sera l’occasion d’un autre article ! 😉

MAJ : L’article sur l’installation de Pi-Hole est dispo : Installation de Pi-Hole sur mon Raspberry Volumio.

Un commentaire sur “Un Raspberry Pi pour ma chaîne HI-FI”

  1. Tuto complet et très intéressant. Merci !
    J’ai personnellement installé LibreElec, dans la même veine que Volumio mais avec la gestion des vidéos en plus.
    Je n’ai pas encore vraiment creusé le système mais il est vrai que pour quelques dizaine d’euros, on arrive à mettre en place une solution très intéressante pour peu que l’on accèpte de bidouiller un peu.
    Bonne écoute et bonne lecture également 😉

Répondre à kalim Annuler la réponse

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *