
Je voulais l’autre jour installer un petit utilitaire sur mon Raspberry P4 où est installé Volumio 3, et je me suis rendu compte que l’OS était un Debian Buster 10 en 32 bits (et donc plus de dépôts !). Ça m’a paru bizarre, et j’ai vérifié que le Raspberry P4 est bien en architecture x64.
Après quelques recherches, j’ai vu que Volumio avait récemment sorti sa version 4, qui tourne fièrement sur un Debian Bookworm 12 (et espérons en x64). Mais cela veut probablement dire que Volumio va rester un bout de temps avec cette version de Debian, qui n’est déjà plus la version release actuelle.
De fil en aiguille, je suis tombé sur MoOde, un lecteur audio FOSS dédié au Raspberry, qui lui propose une version sous Debian Trixie 13, soit la dernière version de Debian. Comparé à Volumio, il est totalement open-source (FOSS), et a manifestement des mises à jour beaucoup plus fréquentes. C’est plutôt bon signe pour le projet, et rien que pour cela, ça vaut le coup de changer. Il a aussi l’air très complet et offre beaucoup plus de possibilités que Volumio. Aucune raison donc de ne pas au moins l’essayer.
Cet article décrit l’installation, les premiers paramétrages, comment j’ai réglé le problème d’affichage de pochettes au vu de l’organisation de ma bibliothèque musicale, la gestion des playlists, les radios, l’utilisation d’une application Android (ou pas). J’ai aussi activé le mode NFS de moOde afin d’accéder à ma musique via un serveur Docker Navidrome que je venais de monter en test, afin de pouvoir utiliser le très beau Feishin comme lecteur sur le PC :
Mais ce sera l’objet d’un futur article ! 😉
Revenons à moOde audio player…
Installation
L’installation est censée être hyper facile, grâce à l’application rpi-imager qu’il suffit d’installer sur le PC :
$ sudo pacman -S rpi-imager
Il suffit ensuite de se laisser guider dans les pages qui s’affichent, c’est vraiment pratique : on choisit son modèle de Raspberry, le système à installer parmi les « media player » proposés, puis on crée l’utilisateur et son mot de passe, on indique le réseau Wi-Fi, activer SSH, etc… :
Sauf que ça échoue à la vérification (étape finale), et que l’on retrouve une carte SD vide. Je ne sais pas si c’est un bug de cette version, mais la solution a été rapide : j’ai relancé la création de la carte SD, puis annulé la séquence de vérification après son démarrage. Et là c’était bon, j’ai pu récupérer une carte SD prête à démarrer.
Le premier démarrage est assez long (il y a trois redémarrages qui s’enchaînent), il suffit d’attendre un peu, puis je me connecte dans un premier temps en SSH sur la machine. On peut retrouver la machine avec la commande : nmap -sP 192.168.1.0/24. Ça fonctionne !
Ensuite je vais sur mon serveur Pi-Hole (qui fait aussi serveur DHCP) pour attribuer une adresse IP de mon choix pour la MAC address du Rpi (et supprimer le lease existant). Enfin, via la connexion en ssh (sur l’adresse actuelle Ethernet), je dévalide le wifi (pas besoin d’avoir deux hosts sur le réseau pour la même machine) :
$ sudo nmcli radio wifi off
Puis je redémarre, j’installe la clef ssh de connection (ssh-copy-id), et me voilà prêt côté réseau et accès SSH.
MoOde
Connection à http://moode.lan sur mon réseau (ou sur l’adresse IP).
Je dois d’abord déclarer la carte Digi2 Pro que j’ai sur le Raspberry : on clique sur le « m » en haut à droite, puis Configure puis Audio, dans la section « Named I2S device », je sélectionne ma carte (Digi+ Pro), il faut ensuite redémarrer le système. Après ce redémarrage, la carte « Hifi+ Pro » apparaît dans la liste « Output device », et il suffit de la sélectionner.

Pour la bibliothèque musicale, il faut aller dans Configure – Media, et je vois que mon disque USB est déjà sélectionné :

Sur la page Audio, je lance un scan de la médiathèque (regenerate music database), cela prend un certain temps… et voilà, moOde est fonctionnel.
Présentation rapide
Il est utile de lire la page « Quick Help » qui présente les principales fonctionnalités et réglages possibles. En voilà un petit résumé, mais les fonctionnalités sont très étendues :
moOde offre par exemple une option « Spotify Connect » (nécessitant un compte premium), on peut aussi activer moOde comme serveur UPnP ou DLNA, ce qui permet de le piloter à partir d’une application android par exemple). N’utilisant pas Spotify, et ne souhaitant pas activer ce serveur UPnP ou DLNA, je ne détaillerai donc pas ces fonctionnalités ici.
Il y a aussi plein d’autres options possibles, comme Plexamp (en cas de serveur Plex sur votre réseau/TV), AirPlay (iMac), etc… Côté Music Library, on peut configurer un NAS distant, ou sélectionner différents types de disques locaus (NVMe, SATA, USB). Probablement que les techniques d’accès selon le type de HD sont optimisées. On peut partager la librairie via un partage SMB ou NFS (voir plus bas pour ce dernier cas).
On peut vraiment faire beaucoup de choses avec ce serveur, beaucoup plus que ce que Volumio proposait ! C’est la grosse différence d’un logiciel entièrement libre développé par des « enthousiastes ».
Mise à jour bibliothèque musicale
Par contre, la librairie musicale n’est pas scannée automatiquement, comme c’était le cas avec Volumio. Il faut donc le faire manuellement.
De ce que j’ai pu lire, la fonctionnalité existait il y a longtemps mais a été retirée car considérée comme peu fiable. Il y a des indications données sur cette page du forum sur le sujet si l’on veut activer cette option du daemon MPD. Il s’agit d’activer un paramètre en utilisant un mode « Developer tweaks » avec l’outil moodeutl (voir ci-dessous) puis de modifier le fichier /etc/mpd.conf, et le faire prendre en compte. Voilà les instructions à suivre :
# List feature availability
moodeutl -a
# Enable dev tweaks feature
moodeutl -A add 32768
sudo reboot
# Create custom mpd.conf
sudo cp /etc/mpd.conf /etc/mpd.custom.conf
# Make changes to custom mpd.conf
sudo nano /etc/mpd.custom.conf
# Changes are automatically merged when config is saved
Menu, Configure, MPD
SAVE
# View changes and #change_comments
cat /etc/mpd.conf
# Disable dev tweaks and revert to normal config
moodeutl -A rm 32768
sudo rm /etc/mpd.custom.conf
sudo reboot
Menu, Configure, MPD
SAVE
Cette manip est particulière car le fichier mpd.conf est contrôlé par moOde et ne peut par défaut être modifié directement. Les paramètres MPD à activer sont auto_update et éventuellement auto-update_depth.
auto_update
This specifies the whether to support automatic update of music database when files are changed in music_directory. The default is to disable autoupdate of database. (Only implemented on Linux.)
auto_update_depth
Limit the depth of the directories being watched, 0 means only watch the music directory itself. There is no limit by default.
On peut aussi taper la commande mpv -V pour afficher les settings en cours.
Bon, pour l’instant, je n’ai pas essayé d’implémenter cette fonctionnalité, si le dev de moode dit que ce n’est pas fiable, je veux bien le croire, et je ne fais pas de changements trop souvent dans ma musique.
Backup & Logs
Très pratique, l’interface de moOde propose aussi de sauvegarder votre configuration et d’activer et récupérer les logs. Bien pensé et très pratique.

moodeutl
Il existe aussi un outil en mode command line : moodeutl qui peut se révéler utile (une fois connecté en SSH sur le Raspberry) pour le dépannage. Taper moodeutl --help pour obtenir une liste des options possibles, il y en a pas mal concernant les logs, le réseau, etc…
NFS
Comme je le disais en début d’article, j’ai installé récemment un serveur Navidrome (en mode Docker sur le NAS) afin de pouvoir tester et utiliser le lecteur Feishin sur le PC. Ce lecteur est très beau, et j’aime bien l’affichage automatique des paroles…
Concernant Navidrome, ça m’embêtait de dupliquer ma bibliothèque musicale sur le NAS. Aussi quand j’ai vu que moOde offrait des options de partage réseau, j’ai vite activé l’option NFS :

Ensuite, de mon PC, j’ai vérifié le partage :
$ showmount -e 192.168.1.17
Export list for 192.168.1.17:
/media/Music 192.168.1.0/24
Il ne restait plus qu’à activer ce partage sur le NAS :
$ mkdir -p /mnt/RpiMusic
$ sudo mount -t nfs 192.168.1.17:/media/Music /mnt/RpiMusic/
Sans oublier de le rajouter au fichier /etc/fstab. Et voilà, il ne restait qu’à modifier dans le fichier compose de Navidrome le chemin d’accès au volume « music », et à redémarrer : ma bibliothèque était directement scannée ! 😎
Ce partage NFS de moOde (mais il y a aussi SMB ou DLNA de possible) est en tout cas bien pratique, et tout a fonctionné immédiatement.
Pochettes
Comme toujours, quand on installe un système audio, vient le problème d’affichage des pochettes ! 😉
J’ai donc plein de pochettes en erreur quand je parcours la librairie, c’est même à peu près n’importe quoi (par contre si je joue un morceau, c’est la bonne pochette qui est affichée) :

Cela concernait en fait les pistes de mes playlists où je rassemble dans un dossier dédié plusieurs morceaux, déjà existants ou pas dans ma bibliothèque, chaque piste ayant sa pochette d’intégrée (embedded album art) grâce au tag ID3 « Picture ».
En fait, MoOde a pour la génération des miniatures (thumbnails) une stratégie Album-Dossier. Voilà la logique appliquée à la génération des thumbnails :
- Moode recherche d’abord la pochette intégrée ou le fichier de la pochette, selon le paramètre défini dans les préférences. Si ces options échouent, moode utilise la solution de secours.
- Le dernier fichier du dossier de l’album est utilisé comme pochette intégrée.
- Les fichiers de pochette portant des noms spécifiques sont recherchés en premier
[cover|Cover|Folder|folder] . [gif|jpg|jpeg|png|tif|tiff|webp] - Si aucun n’est trouvé, le premier fichier de type « image » présent dans le dossier de l’album est utilisé
Cette approche « vue par dossier » n’est pas pour me déplaire, c’est comme ça que ma bibliothèque musicale est globalement organisée… sauf pour les fameuse playlists : dans mon cas, moOde prenait la pochette intégrée du dernier fichier du dossier comme « pochette de l’album. »
Cela m’a m’obligé à revoir un peu tout ça : j’ai d’abord ajouté un fichier ZZZZZ_cover.jpg de ce type dans chaque dossier de playlist :

Pour réaliser ces « pochettes », j’ai demandé l’aide de Mistral AI, plutôt que de faire le script à la main : on choisit quatre fichiers au hasard dans le dossier de la playlist, puis on extrait les pochettes intégrées aux fichiers (avec exiftool), et on crée une image composée avec ces 4 pochettes (avec imagemagick). Après quelques essais infructueux dus aux espaces dans les noms de fichiers et la commande printf, le script a fini par fonctionner. Malgré ces erreurs, il faut quand même reconnaître que c’est assez génial de pouvoir obtenir rapidement un script comme ça, qui m’aurait pris « un peu de temps » à réaliser moi-même !
Il faut aussi s’assurer que dans les Préférences, « Search priority » soit bien positionné à « Embedded », et « Audio formats » à « Default+ » comme mentionné sur la page « Quick Help » :
Note that some Albums for example « Nine Inch Nails – The Slip » have a main cover image file and also embedded covers in each track. To display the covers correctly first add the cover image file named so its the last file in the album directory, then set Prefs > « Cover search priority » to « Embedded » and Prefs > « Audio formats » to « Default+ »

Et voilà, les Playlists affichent la pochette composée (ZZZZZ_cover.jpg) en mode navigation, mais quand on la joue, c’est bien la pochette de la piste courante qui est affichée. Top !
Autre petit problème
J’ai aussi pas mal de dossiers comprenant des compilations des Inrocks. Là aussi, chaque morceau est d’un artiste différent, mais cette fois sans « album art embedded », un simple fichier cover.jpg complétant le dossier.
Pour la plupart des dossiers, cela fonctionnait comme attendu :

Sauf pour deux dossiers, dont le contenu semblait pourtant similaire aux autres. Ci-dessous, pour l’album 04 – Octobre 2021, chaque morceau est affiché séparément :

La solution était dans les Tags ID3 : il fallait ajouter le tag albumartist avec la valeur « Various Artists » (par exemple) pour que l’affichage redevienne correct.
Les Playlists
Une fois ceci fait, il ne reste plus qu’à créer les Playlists dans moOde : il faut utiliser la vue par dossier, sélectionner le dossier de playlist et en cliquant sur la pochette l’ajouter à la file de lecture avec un « Clear/Play » :

En procédant ainsi, seule le contenu du dossier de la Playlist se retrouve dans la file de lecture. Il ne reste alors plus qu’à choisir « Save Queue to Playlist » pour créer notre playlist (à partir de la vue lecture) :

Simple et efficace. Je retrouve vite toutes mes playlists dans la vue dédiée :
Radios
MoOde peut bien sûr jouer des radios. La liste de radios fournie est d’ailleurs bien fournie. Certaines affichent le titre et l’artiste du morceau en cours, c’est un vrai plus, mais apparemment, en Europe, on n’y est pas encore, quelle misère ! 🙁
J’ai cherché des infos là-dessus sans grand succès : le RDS fournit ces infos (les metadata) mais concerne les ondes radio FM. Idem pour le DAB+, mais pour les ondes en version numérique. Pour les radios « internet », je n’ai rien trouvé… si ce n’est que certaines stations « protègent » leur metadata pour privilégier leurs propres lecteurs/applications, comme l’application « Radio France », par ailleurs infectée de trackers et que je n’installerai jamais sur mon tel.
Comme je me contente en général d’afficher les principales stations de Radio France, j’ai créé ces stations en les liens en m3u8 pour éviter les 30 secondes de publicité (voir cet article). Comme elles se retrouvaient perdues dans la liste des radios fournies, j’ai du jouer avec le paramètre « moOde stations » :
- j’ai d’abord passé ce paramètre à « Hide All », de façon à cacher toutes les radios existantes.
- Puis j’ai ajouté mes stations Radio-France, en laissant le type par défaut (regular) :

- Je me retrouve ainsi avec uniquement les radios que j’ai ajouté qui sont visibles :

- Si par la suite, je souhaite ajouter à ma liste des radios qui étaient fournies par moOde, il me suffira de passer dans les paramètres à « Edit Hidden » : dans ce cas les radios cachées redeviennent visibles :

Et l’on change le Type à « Regular » pour celles que l’on souhaite afficher. Une fois les radios souhaitées activées, on repasse en mode « No Action » et l’on a le filtre souhaité :

On peut aussi en définir certaines comme « Favorites » et activer le mode « Favorite first » pour afficher ses radios préférées en premier.
Client android
Il n’y a pas de client Android officiel, l’interface Web de moOde fonctionnant très bien sur le smartphone. D’après le dev, la plupart des applis android des concurrents (Volumio, RuneAudio) ne sont que d’ailleurs que de simples wrappers de la page web.
Le plus simple pour piloter moOde est donc d’ouvrir la page de moOde (http://moode.lan par exemple, ou l’adresse IP du Raspberry), et de créer un lanceur avec l’option « Ajouter à l’écran d’accueil » du navigateur sur le smartphone. On est bien d’accord qu’aucune musique ne sera jouée sur le tel, hein ? C’est une télécommande en quelque sorte.
Il existe toutefois une petite appli écrite par par un fan, Moodroid, qui essentiellement permet le contrôle du volume via les boutons volumes du tel (en plus du réglage du volume via l’interface) ! Plus quelques améliorations et optimisations, ainsi que sa petite icône… Pour l’instant, je l’ai installée, ça a l’air fonctionnel avec un splash screen sympa :
Conclusion
Je ne regrette pas d’être passé de Volumio à moOde. Déjà, mon Raspberry tourne la dernière version de Debian « stable », et en x64, ce qui est appréciable (je peux installer un paquet supplémentaire si je le souhaite, ce qui n’était plus le cas avec la version x32 de Volumio).
Mais surtout, on se rend vite compte de la différence entre un soft open-source et une solution mi-propriétaire : moOde propose de base plein d’options qui se révèlent bien utiles quand le besoin s’en fait sentir, que ce soit en terme d’affichage que de solution techniques.



