Avoir des notifications sur une radio lue avec mpv
par
, 06/09/2020 à 21h57 (836 Affichages)
Bonjour,
J'aime écouter une radio : Nectarine. C'est une radio diffusant les musiques en rapport avec la demoscene. On y retrouve donc des musiques oldskool (SID (Commodore 64), des MOD (Amiga)) et des trucs plus récents. Bref, du bonheur pour moi.
Dernièrement, et pour ne pas installer un lecteur dédié à cet usage, j'ai opté pour mpv.
Peut être il faut mieux l'indiquer maintenant que jamais : Je suis sous Linux.
Lorsque la radio est lue, la sortie est la suivante :
À chaque changement de titre, un nouveau « File tags » apparaît. Comme je laisse mon terminal dans un coin, en minimiser, il serait super cool d'avoir une petite notification affichant le titre de la musique.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 mpv http://necta.pedroja.tech/necta192.mp3 (+) Audio --aid=1 (mp3 2ch 44100Hz) AO: [pulse] 44100Hz stereo 2ch float A: 00:00:00 / 00:00:03 (19%) Cache: 2.5s/108KB File tags: icy-title: Hunz, Malmen - No Way Out But The Sky (Malmen remix) A: 00:00:07 / 00:00:10 (73%) Cache: 2.6s/110KB
Je sais que je peux faire des notifications avec la commande notify-send. Rien de nouveau pour moi de ce côté la. En bref, cela s'utilise ainsi :
Par contre, on ne peux pas afficher un message en le pipant dans notify-send.
Code : Sélectionner tout - Visualiser dans une fenêtre à part notify-send -a "MPV Nectarine Radio" -i dialog-information -- "Nectarine Radio" "Message"
Aussi, si on étudie légèrement mpv, on remarque :
- la sortie standard est utilisée pour les messages ;
- la sortie d'erreur est utilisée pour les informations sur la lecture (position dans le fichier...) ;
- si on redirige la sortie standard, on ne peux plus contrôler mpv (par exemple 'q' pour quitter le lecteur) ;
- si on grep la sortie pour la rediriger dans un fichier, le fichier est toujours vide (sûrement à cause des caractère spéciaux pour la gestion de la position de la lecture).
Du coup, en l'état, cela nous limite à faire :
À partir de là, je ne vois qu'une solution : placer une surveillance du fichier dans lequel la sortie de mpv est redirigée, c'est-à-dire inotify (plus précisément, inotifywait). En lisant la documentation, on peut trouver un exemple qu'il suffit d'adapter :
Code : Sélectionner tout - Visualiser dans une fenêtre à part mpv http://necta.pedroja.tech/necta192.mp3 > /tmp/titles
Amusant, eux aussi ils veulent envoyer des notifications .
Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 while ! inotifywait -e modify /var/log/messages; do if tail -n1 /var/log/messages | grep httpd; then kdialog --msgbox "Apache needs love!" fi done
Après quelques efforts, cela donne :
Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 #!/bin/bash MPVLOG="/tmp/titles" STOP_WATCHER=0 function watch-log { while [ ${STOP_WATCHER} -eq 0 ] ; do inotifywait -e modify ${MPVLOG} > /dev/null 2>&1 MESSAGE=$(cat ${MPVLOG} | grep "icy-title" | tail -n1 | cut -d " " -f 3-) if [ -n "${MESSAGE}" ] then notify-send -a "MPV Nectarine Radio" -i dialog-information -- "Nectarine Radio" "${MESSAGE}" fi done } watch-log & mpv http://necta.pedroja.tech/necta192.mp3 > ${MPVLOG} STOP_WATCHER=1
C'est une solution fonctionnelle. La documentation de mpv indique qu'il n'est absolument pas conseillé de reposer sur la sortie du programme. Le mieux est d'utiliser l'API de script, dont nous pouvons trouver une solution ici : https://unix.stackexchange.com/quest...gh-notify-send.
Notamment, avec un tel script, on perd le contrôle au clavier de mpv. Pour arrêter la lecture, il faut passer par un Ctrl-C.
Bref, c'était un petit script, d'un dimanche soir. Ça marche et c'est ce qui compte.