Lien du repo : https://github.com/urlab/musicman
Le but de ce projet est de regrouper tous les services de musique qui sont sur hal1 pour les porter en docker (avec un joli docker-compose) sur hal2.
La liste des services est la suivante :
- Bard (Jukebox pour qu'on puisse avoir une playlist en commun)
- Sound Via LAN (stream son depuis un device jusqu'à la machine)
- UrSoundDownloader (Téléchargement automatique de musiques)
- UrSpotify (Compatibilité Spotify)
Au départ on voulait setup navidrome en jukebox mais il faut un client pour s'y connecter et navidrome web ui supporte pas encore (c'est un peu du troll je trouve mais bon). Ce repo compte le faire dans le futur : https://github.com/dweymouth/supersonic donc à surveiller, y'aura peut-être la possibilité de changer dans le futur si on préfère.
Comme ça marche pas on a cherché plusieurs autres serveurs (Jellyfin, etc.) mais finalement on est retombé sur Mopidy qu'on voulait un peu fuir à la base parce que vieux et pythonesque. Sauf qu'en fait le projet est bien bien maintenu on avait juste des vieilles versions. Ils ont pas d'image docker donc on en a créé une et ça marche nickel.
On a utilisé l'installation de base de mopidy sur debian et on a rajouté Mopidy-Iris pour avoir une belle interface web sur le port 6680. Mopidy a une liste d'extensions et y en a toute une série pour se connecter à d'autres service donc c'est plutôt pratique.
Il suffit de rebuild/modifier l'image docker pour mettre à jour dans le futur, les musiques sont dans le mountpoint via une share nfs de UrNAS (https://urlab.be/projects/121) donc n'importe qui peux mount la share pour ajouter des fichiers, ils apparaissent sur Iris directement, il suffit de rouvrir le Browse dans l'interface.
A noter qu'il existe une extension Mopidy-Spotify pour faire UrSpotify mais ça demande une connection avec un compte client donc à voir si quelqu'un est chaud. Sinon l'install est toute bête tout est sur leur repo.
Note : Concernant SoundViaLAN qui est un sound server avec pulseaudio, c'est fastidieux et inutile de passer par un docker, puisque pulseaudio fait ça très bien (voir doc pulseaudio) et que le mettre dans un docker reviendra à faire discuter pulseaudio dans le docker avec pulseaudio en dehors du docker, tout ça pour une ligne de config.
Après moult tests, utiliser la direct connection est une mauvaise idée surtout que si on lit la documentation ça demande de restart pulseaudio côté client dès qu'on veut changer en plus de devoir setup un tunnel avec ssh ou pulse. Cependant, il y a une super technologie de tunnel qui fait tout très bien et aussi mentionnée dans la doc : Zeroconf
Et l'installation est toute simple.
Des deux côtés installer pulseaudio et pulseaudio-module-zeroconf
Côté serveur :
Dans /etc/pulse/default.pa.d/soundViaLAN.pa
ajouter :
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;172.23.100.0/24
et
load-module module-zeroconf-publish
Côté client :
Dans /etc/pulse/default.pa.d/soundViaLAN.pa
ajouter :
load-module module-zeroconf-discover
Puis faut relancer pulseaudio des deux côtés et avahi-daemon si nécessaire. (Attention pulseaudio est un service user)
J'ai ajouté un tuto d'install client dans le wiki music.lan.
Si ça marche pas quand vous coupez la connection ssh au serveur de son, ça vient d'une histoire de user et le plus simple est de passer pulseaudio au niveau system côté serveur, voir archwiki pour ça et attention mv /etc/pulse/default.pa.d/soundViaLAN.pa /etc/pulse/system.pa.d/soundViaLAN.pa
La partie UrSongDownloader est basé actuellement sur le framework Django en python Doc Django. Actuellement le framework est setup.
Lancer le serveur web:
python manage.py runserver
Dans UrSongDownloader/
Settings\
Contient les urls et settings globales a la partie UrSongDownloader
app\
Contient l'application web, la vue, la logique et les templates
manage.py
C'est un fichier utilitaire généré par Django.
setup.sh
Setup le projet en une commande