mopidy est un serveur audio léger et modulaire.
L'installation décrite ici concerne
le serveur mopidy dans la version de base avec ses 4
extensions incluses
Mopidy-HTTP = un serveur http qui permet de contrôler mopidy
Mopidy-File = un lecteur audio à partir de fichiers
disponibles localement
le client PC Mopidy MusixBox- Webclient
Références
Sommaire
Library = partie de mopidy qui gère (recherche et exploration) la bibliothèque
Playback = État et piste en cours de lecture
Tracklist = Liste des pistes à lire qui peut-être soit une liste enregistrée et stockée soit "la queue définie par l'utilisateur"
Playlist = Liste de pistes enregistrées
History = Historique des pistes lues
que mopidy sera installé sur une carte Raspberry Pi 4.
Celle-ci
est équipée du système d'exploitation standard Raspberry en mode serveur (sans interface graphique ni bureau)
dispose d'une adresse ip fixe sur un réseau local
et que le client PC sera installés sur un PC sous Debian, connecté au même réseau local
L'installation s'effectue sur la distribution raspbian
Debian 10
pi@raspberrypi:~ $ cat /etc/issue
Raspbian GNU/Linux 10 \n \l
Mettre à jour le système du raspberry
pi@raspberrypi:~ $ sudo aptitude update && sudo aptitude upgrade -y
Noter l'adresse sur le réseau local du raspberry, dans
l'exemple suivant la carte dispose de deux adresses
192.168.0.19 (ethernet filaire) et 192.168.0.20 (wifi),
l'adresse wifi sera utilisée dans ce qui suit
pi@raspberrypi:~ $ ip route
default via 192.168.0.1 dev eth0 proto dhcp src 192.168.0.19 metric 202
default via 192.168.0.1 dev wlan0 proto dhcp src 192.168.0.20 metric 303
192.168.0.0/24 dev eth0 proto dhcp scope link src 192.168.0.19 metric 202
192.168.0.0/24 dev wlan0 proto dhcp scope link src 192.168.0.20 metric 303
Vérifier depuis le PC l'accès au raspberry
xxxxx@buster:~$ ping 192.168.0.20
xxxxx@buster:~$ ping 192.168.0.19
$ speaker-test -c2 -twav
Installer python3 python3-pip et vérifier que leur
installation s'est correctement effectuée
pi@raspberrypi:~ $ sudo aptitude install python3-pip
pi@raspberrypi:~ $ python3 -V
Python 3.7.3
pi@raspberrypi:~ $ pip3 -V
pip 18.1 from /usr/lib/python3/dist-packages/pip (python 3.7)
Bien que mopidy soit disponible dans les dépôts Debian, l'installation est effectuée à partir du dépôt mopidy afin de profiter de la dernière version stable
pi@raspberrypi:~ $ wget -q -O - https://apt.mopidy.com/mopidy.gpg | sudo apt-key add -
pi@raspberrypi:~ $ sudo aptitude update
pi@raspberrypi:~ $ sudo aptitude upgrade
pi@raspberrypi:~ $ sudo aptitude install mopidy
pi@raspberrypi:~ $ mopidy deps
Executable: /usr/bin/mopidy
Platform: Linux-5.4.72-v7l+-armv7l-with-debian-10.6
Python: CPython 3.7.3 from /usr/lib/python3.7
Mopidy: 3.0.2 from /usr/lib/python3/dist-packages
GStreamer: 1.14.4.0 from /usr/lib/python3/dist-packages/gi
Detailed information:
Python wrapper: python-gi 3.30.4
Relevant elements:
Found:
uridecodebin
souphttpsrc
appsrc
alsasink
.....
Not found:
flump3dec
mad
L'absence des codes flump3dec et mad ne semble pas poser de
problèmes .....
pi@raspberrypi:~ $ gst-launch-1.0 audiotestsrc ! autoaudiosink
pi@raspberrypi:~ $ gst-launch-1.0 audiotestsrc ! audioresample ! autoaudiosink
pi@raspberrypi:~ $ gst-launch-1.0 audiotestsrc ! audioconvert ! audioresample ! autoaudiosiknk
Dans le cas présent, la source audio est alsa et autoaudiosink
peut-être remplacé par alsasink
pi@raspberrypi:~ $ gst-launch-1.0 audiotestsrc ! alsasink
mopidy peut-être lancé soit comme une application
utilisateur, soit comme un service. En phase de mise au
point, le lancement en tant qu'application utilisateur est
intéressant : affichage direct dans la console des messages
d'erreur, commandes d'arrêt et redémarrage simplifiées. Il
est utilisé ci-après :
pi@raspberrypi:~ $ mopidy
Si le message d'erreur
ERROR 2020-11-23 00:22:05,134 [2206:MainThread] mopidy.commands
Frontend (HttpFrontend) initialization error: HTTP server startup failed: [Errno 98] Address already in use
s'affiche, il est probable qu'une autre instance de mopidy ait déjà été lancé, ce que l'on peut vérifier avec
pi@raspberrypi:~ $ ps -C mopidy
PID TTY TIME CMD
2117 pts/1 00:00:01 mopidy
la stopper avec l'une des commandes suivantes
Arrêt:
depuis la console ou le terminal de démarrage
pi@raspberrypi:~ $ Ctrl C
depuis une autre console ou un autre terminal
pi@raspberrypi:~ $ pkill mopidy
ou si l'on connait le PID (voir la commande ps -C mopidy ci-dessus)
pi@raspberrypi:~ $ kill 2717
Après avoir démarré le serveur mopidy, ouvrir une nouvelle
fenêtre de terminal ou une console et vérifier que le
serveur est en écoute sur le port 6680
pi@raspberrypi:~ $ lsof -i:6680
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mopidy 3001 pi 7u IPv4 29741 0t0 TCP localhost:6680 (LISTEN)
....
pi@raspberrypi:~ $ links2 http://localhost:6680
# équivalent à
pi@raspberrypi:~ $ links2 http://127.0.0.1:6680
La page d'accueil s'affiche et indique qu'aucune extension n'est installé
La configuration courante de mopidy est affichable avec
pi@raspberrypi:~ $ mopidy config
......
pi@raspberrypi:~ $ cat .config/mopidy/mopidy.conf
# For further information about options in this file see:
# https://docs.mopidy.com/
#
.....
.....
d'une part par l'utilisateur
Afin que le serveur web mopidy soit accessible depuis le réseau local, modifier le nom d'hôte, dans la section [http]. Remplacer la valeur par défaut,
[http]
....
#hostname = 127.0.0.1
par l'adresse du raspberry sur le réseau local, dans notre
exemple192.168.0.20
[http]
....
hostname = 192.168.0.20
Vérifier l'accès au serveur mopidy
depuis le raspberry
pi@raspberrypi:~ $ links2 http://192.168.0.20:6680
xxxx@buster :~ $ firefox http://192.168.0.20:6680
ou un smartphone sur le réseau également
Documentation : voir https://docs.mopidy.com/en/latest/ext/file/
Mopidy-File est une extension pour lire de la musique stockée localement. Elle est fournie dans la configuration de base de mopidy. Seuls les fichiers considérés comme audio lisible seront affichés. Définir le ou les répertoires qui contiennent des fichiers audio en modifiant la définition de $XDG_MUSIC_DIR dans la section [file]
[file]
....
# $XDG_MUSIC_DIR|Music
# ~/|Home
[file]
...
media_dirs = ~/Music
Documentation : voir https://docs.mopidy.com/en/latest/ext/m3u/
Mopidy m3u est une extension pour lire et écrire des playlists au format m3u stockées localement.
l'emplacement par défaut des playlists m3u est
.local/share/mopidy/m3u
les fichiers des playlists m3u ont pour extension m3u8
(format UTF8)
Les playlists au format m3u peuvent être créés
par les clients qui supportent la fonction (MusicBox par exemple)
$ cat .local/share/mopidy/m3u/mes_stations.m3u8
#EXTM3U
#EXTINF:-1,ANTENNE BAYERN Schlagersahne
http://stream.antenne.de/das-schlager-karussell
.....
-1 indique qu'il s'agit d'un flux sans durée limite
Il est possible de créer plusieurs playlists
Documentation : voir https://docs.mopidy.com/en/latest/ext/stream/
Mopidy stream est le lecteur de flux audio de mopidy, la liste des protocoles accepté est indiqué dans le fichier de configuration, dans la section [stream]
[stream]
#enabled = true
#protocols =
# http
# https
# mms
# rtmp
# rtmps
# rtsp
Documentation : voir https://pypi.org/project/Mopidy-Local/
pi@raspberrypi:~ $ sudo pip3 install Mopidy-Local
[local]
media_dir = ~/Music
Redémarrer mopidy
pi@raspberrypi:~ $ Ctrl C
pi@raspberrypi:~ $ mopidy
Pour générer ou mettre à jour l'index
pi@raspberrypi:~ $ mopidy local scan
Dans le fichier de configuration, les lignes du fichier commençant par un #, sont soit des lignes de commentaires, soit des rappels des paramètres par défaut. Il est donc possible de supprimer ces lignes, ainsi pour une configuration entièrement par défaut, le fichier sera entièrement vide.
Après avoir effectué les trois modifications indiquées
ci-dessus, le contenu du fichier se limite à
$ cat .config/mopidy/mopidy.conf
[http]
hostname = 192.168.0.20
[file]
media_dirs = ~/Music[local] media_dir = ~/Music
Le fichier .config/mopidy/mopidy.conf est remplacé par
/etc/mopidy/mopidy.conf
pi@raspberrypi:~ $ sudo cat /etc/mopidy/mopidy.conf
[http]
hostname = 192.168.0.20
[file]
media_dirs = /var/lib/mopidy/Music
[local] media_dir = /var/lib/mopidy/Music
$ sudo mkdir /var/lib/mopidy/Music
$ sudo chown -R mopidy:audio /var/lib/mopidy/Music
$ sudo mkdir /var/lib/mopidy/m3u
$ sudo chown -R mopidy:audio /var/lib/mopidy/m3u
par exemple
pi@raspberrypi:~ $ ls -l /var/lib/mopidy/m3u/
total 16
-rw------- 1 mopidy audio 614 nov. 28 15:16 '[Radio Streams].m3u8'
Les commandes deviennent
Démarrage, arrêt
pi@raspberrypi:~ $ sudo systemctl start mopidy
pi@raspberrypi:~ $ sudo systemctl stop mopidy
pi@raspberrypi:~ $ sudo systemctl enable mopidy
Liste des dépendances
pi@raspberrypi:~ $ sudo mopidyctl deps
pi@raspberrypi:~ $ sudo mopidyctl config
pi@raspberrypi:~ $ sudo mopidyctl local scan
Pilotage du mixer = Volume et mute
Browse = Exploration des fichiers audio stockés sur
le serveur
Queue = Création et gestion de la queue de lecture,
sauvegarde sous la forme de playlist m3u8
Now Playing = Affichage de la piste en cours de lecture,
navigation dans la queue (piste suivante, piste aléatoire,
...)
Streams = Ajout de pistes ou flux et enregistrement dans une playlist de nom
'[Radio Streams].m3u8'
pi@raspberrypi:~ $ sudo pip3 install Mopidy-MusicBox-Webclient
xxxx@buster:~ $ firefox http://192.168.0.20:6680/mopidy/
xxxx@buster:~ $ firefox http://192.168.0.20:6680/musicbox_webclient
de lire un fichier audio stocké >> Browse
de lire un flux radio >> Stream >> entrer un flux, par exemple
http://174.36.206.197:8000/listen.pls?sid=1
de lire une playlist au format m3u
A partir d'un fichier au format wav, dans cet exemple, le
fichier 447.wav téléchargé à partir de https://lasonotheque.org/UPLOAD/,
$ wget https://lasonotheque.org/UPLOAD/wav/1447.wav
$ for i in {flac,ogg,mp3}; do ffmpeg -i file_example_WAV_1MG.wav file_example_WAV_1MG.$i; done
$ ls file*
file_example_WAV_1MG.flac file_example_WAV_1MG.ogg file_example_WAV_1MG.mp3 file_example_WAV_1MG.wav
$ cat radio.m3u8
#EXTM3U
#EXTINF:-1,France Inter http://direct.franceinter.fr/live/franceinter-midfi.mp3?ID=76zqey582k
#EXTINF:-1,France Musique http://opml.radiotime.com/Tune.ashx?id=s50774
#EXTINF:-1,France Culture http://opml.radiotime.com/Tune.ashx?id=s50768
#EXTINF:-1,France Bleue Loire Océan
http://opml.radiotime.com/Tune.ashx?id=s36096
#EXTINF:-1,FIP Nantes
http://opml.radiotime.com/Tune.ashx?id=s50770
#EXTINF:-1,Radio Classique
http://opml.radiotime.com/Tune.ashx?id=s74355
#EXTINF:-1,Radio Venise
http://174.36.206.197:8000/listen.pls?sid=1
#EXTINF:-1,Radio Italie Classique
http://176.31.107.8:8204/listen.pls?sid=1
#EXTINF:-1,Radio Sympa
https://radio11.pro-fhi.net:19095/stream