Lecteur Radio avec morceau joué et pochette de l'album

Message
Author
User avatar
fabrice_035
Posts: 765
Joined: Mon 28 Apr 2014, 17:54
Location: Bretagne / France

Lecteur Radio avec morceau joué et pochette de l'album

#1 Post by fabrice_035 »

#edit 22 Avril 2020#
Inutile d'utiliser ffprobe parce que MPV donne directement le titre... suffit de récupérer le résultat :)
Cette version utilise un slide pour régler le volume, le volume ne peut être changé en direct mais spécifie un volume du lecteur indépendamment du volume générale. Il faut stopper la lecture et relancer le titre pour prendre en compte un changement du volume.
Dans cette version j'utilise un fichier "art_def.jpg" pour une image par défaut si la pochette n'existe pas. A vous de mettre ce fichier image dans le dossier.
############

Hello

Il existe de nombreux programmes avec nos puppy's pour écouter des radios en ligne mais je n'en ai pas trouvé qui affichent le titre en cours de lecture et la pochette de l'album ou du disque. Alors après qq recherches je me suis demandé si je pouvais faire quelque chose par moi même.
Et en effet, les composants nécessaires sont présents, c'est à dire ffprobe pour extraire le titre joué et wget pour prendre la pochette sur le web (après une recherche automatisée) J'utilise MPV pour la lecture audio, vu qu'il est également dispo par défaut.


Alors voilà, si vous êtes curieux je partage mon petit programme, à améliorer mais il est tout à fait fonctionnel !

Une capture du résultat :
Image

Le programme :

Code: Select all

#!/bin/sh
# Nice Radio Player v.03 / 27 AVRIL 2020 / Fabrice_035
# 
# just trying to find the cover, 
# add your favorites radio with this program or edit radio.txt file
#
# New version, no need ffprob, much simpler pipe with MPV 

# Clean before start ##################

echo "" > pid.radio.txt
rm -f api.txt
echo "Select Radio and Play >" > bar.txt
##########################
cp -f art_def.jpg art.jpg
# play radio with mpv player
JOBCREATE(){

killpid=$(cat pid.radio.txt)

if [ "$killpid" != "" ] ; then

kill -9 "$killpid"
echo "" > pid.radio.txt
exit 0
fi
mpv --volume "$volume" "$BOX"  > /dev/null 2>&1 >title.txt &
P1=$!
echo $P1 > pid.radio.txt

}
export -f JOBCREATE

# get icy-title with ffbrobe and download picture (wget)
getpicture(){

radio="$BOX"
titre=$(cat title.txt | grep -a "icy-title" | tail -1 | awk -F":" '{print $2}')
kr=$(cat pid.radio.txt)
if  [ "$kr" != "" ] ; then 
echo "[Play] $titre" > bar.txt
else
echo "[Stop] $titre" > bar.txt
fi

search=$(echo $titre   | tr '"' ' ' | tr ' ' '+')
old=$(cat titre.txt)
verif=${#search}
echo "$verif"
min="3"
echo "$search" > titre.txt

if (("$verif" < "$min")) ; then
echo " trop petit "

cp -f art_def.jpg art.jpg

exit 0

fi
echo "$old $search"
if [ "$old" != "$search" ] ; then 
echo "$old ? $search"
download

fi

exit 0
}
export -f getpicture

# search and download picture 
download() {
search=`cat titre.txt`
rm -f api.txt
wget "https://api.discogs.com/artists/1?callback="$search -O api.txt > /dev/null 2>&1
rm -f out.txt
wget "https://www.discogs.com/fr/search/?q=$search&type=all" -O out.txt  > /dev/null 2>&1
img=`grep /discogs-images/ out.txt | tail -n +1 |head -1`
lien=`echo $img | awk -F '"' '{print $2}'`
wget -q -O - $lien > art.jpg 



return 0
}
export -f download	


GTKDIALOG=gtkdialog

MAIN_DIALOG='
<window title="Nice Radio Player" icon_name="gtk-media-play"> 
	<vbox>
		<hbox>
			<frame>
				<pixmap>
				 <variable>PIXMAP</variable>
				<input file>art.jpg</input>
				<action>getpicture</action>
				</pixmap>
			</frame>
		</hbox>
		<hbox space-expand="true" space-fill="true">
			<button>
			    <input file stock="gtk-delete" tooltip-text="delete entry"></input>
						<action>removeselected:BOX</action>
						<action>save:BOX</action>
						<action>refresh:BOX</action>
					</button>
		<comboboxentry has-focus="true" tooltip-text="add favorite radio, press enter" >
						<variable>BOX</variable>
						<default>Select Radio</default>
						<input file>radio.txt</input>
						<output file>radio.txt</output>
							<action signal="activate">save:BOX</action>
						<action signal="activate">refresh:BOX</action>
							<action>JOBCREATE</action>
					</comboboxentry>
			        <button tooltip-text="Play/Stop">
    <input file stock="gtk-media-next"></input>
    <action>JOBCREATE</action>

    <action>refresh:LOG</action>
      <action>clear:SOURCE</action>
    </button>
		</hbox>
		<hbox>
			<hscale xalign="0" width="100" value-pos="1" space-expand="true" space-fill="true"  height-request="30" range-value="50">
		<variable>volume</variable>
		<action>set_volume '"$VLMCH"' "$volume"</action>
	</hscale>
	</hbox>
	<statusbar space-expand="true" space-fill="true" use-markup="true" has-resize-grip="false" auto-refresh="true">
	<variable>stb0</variable>
	<input file>bar.txt</input>
</statusbar>
		
	</vbox>
		<timer visible="true"  interval="4">
   <action>getpicture&</action>
    <action>refresh:PIXMAP</action>
    
  </timer> 
</window>
'

export MAIN_DIALOG

case $1 in
	-d | --dump) echo "$MAIN_DIALOG" ;;
	*) $GTKDIALOG --program=MAIN_DIALOG ;;
esac

# kill mpv pid !
kr=$(cat pid.radio.txt)
if [ "$kr" != "" ] ; then
kill -9 "$kr"
fi
# clean and exit , force to wait last process 

rm -f art.jpg
rm -f pid.radio.txt
rm -f titre.txt
rm -f bar.txt
rm -f out.txt
rm -f title.txt
Last edited by fabrice_035 on Mon 27 Apr 2020, 18:59, edited 10 times in total.
Bionicpup64-8.0 _ Kernel 5.4.27-64oz _ Asus Rog GL752

musher0
Posts: 14629
Joined: Mon 05 Jan 2009, 00:54
Location: Gatineau (Qc), Canada

#2 Post by musher0 »

Salut, Fabrice.

Intéressant.
Tu devrais aussi annoncer ton script du côté anglo.

À+
musher0
~~~~~~~~~~
"You want it darker? We kill the flame." (L. Cohen)

User avatar
fabrice_035
Posts: 765
Joined: Mon 28 Apr 2014, 17:54
Location: Bretagne / France

#3 Post by fabrice_035 »

Merci musher de ton intérêt. Je vais réfléchir à ta proposition. Bonne soirée / journée / nuit à nos amis québécois.
Bionicpup64-8.0 _ Kernel 5.4.27-64oz _ Asus Rog GL752

User avatar
Argolance
Posts: 3767
Joined: Sun 06 Jan 2008, 22:57
Location: PORT-BRILLET (Mayenne - France)
Contact:

#4 Post by Argolance »

Bonjour,
Merci pour ce petit script. :)
Quel type d'adresse faut-il utiliser? Les adresses de radios du genre "http://direct.fipradio.fr/live/fip-midfi.mp3" ne semblent pas prévues pour fonctionner avec. Peux-tu en dire un peu plus et donner une adresse comme exemple, fonctionnelle et permettant de tester les images des pochettes?

Idée/propostion:
  • - une image sympa de substitution lorsque l'image n'est pas disponible (voir image jointe).
    - pid.radio, bar, titre et working dans un dossier dédié dans /tmp/nrp?
Cordialement.
Attachments
200420_124526_269x144_easyshot.png
(15.53 KiB) Downloaded 182 times

User avatar
fabrice_035
Posts: 765
Joined: Mon 28 Apr 2014, 17:54
Location: Bretagne / France

#5 Post by fabrice_035 »

Salut Argolance,
Elle est sympa ton image de substitution, ça pourrait être une amélioration à faire en effet.
L'adresse du stream audio que tu proposes ne renvoie pas de Metada avec le titre, c'est regrettable que FIP ne propose pas cela!

Code: Select all

# ffprobe http://icecast.radiofrance.fr/fip-midfi.mp3

Input #0, mp3, from 'http://icecast.radiofrance.fr/fip-midfi.mp3':
  Metadata:
    icy-br          : 128
    icy-name        : fip-midfi.mp3
    icy-pub         : 1
  Duration: N/A, start: 0.000000, bitrate: 128 kb/s
    Stream #0:0: Audio: mp3, 48000 Hz, stereo, s16p, 128 kb/s
D'ailleurs le lien suivant pour fip * ne propose pas de titre dans la Metadata :
https://stream.radiofrance.fr/fip/fip_hifi.m3u8
En auscultant la page web de FIP je découvre que les titres joués s'affichent mais il y a une astuce, leur lecteur utilise un API qui va chercher le titre indépendamment

Image

On le voit dans l'analyse réseau de l'outil d'un navigateur, ci-dessus Firefox.

Bref, si le stream ne propose pas de Metadata le titre ne s'affichera pas donc pas de pochette !

Cdt
Bionicpup64-8.0 _ Kernel 5.4.27-64oz _ Asus Rog GL752

User avatar
Argolance
Posts: 3767
Joined: Sun 06 Jan 2008, 22:57
Location: PORT-BRILLET (Mayenne - France)
Contact:

#6 Post by Argolance »

Merci pour les renseignements.
fabrice_035 wrote:Elle est sympa ton image de substitution, ça pourrait être une amélioration à faire en effet.
Au cas où, voici l'image ainsi qu'une icône, éventuellement... :roll:
L'adresse du stream audio que tu proposes ne renvoie pas de Metada avec le titre, c'est regrettable que FIP ne propose pas cela!
Peux-tu nous en donner une?
Attachments
nrp.png
(2.05 KiB) Downloaded 153 times
art.jpg
(6.11 KiB) Downloaded 154 times

User avatar
fabrice_035
Posts: 765
Joined: Mon 28 Apr 2014, 17:54
Location: Bretagne / France

#7 Post by fabrice_035 »

Bionicpup64-8.0 _ Kernel 5.4.27-64oz _ Asus Rog GL752

User avatar
Argolance
Posts: 3767
Joined: Sun 06 Jan 2008, 22:57
Location: PORT-BRILLET (Mayenne - France)
Contact:

#8 Post by Argolance »

J'ai bien la musique, mais le titre ne s'affiche pas dans la status bar (je suppose que ça doit être normalement le cas?), et puis pas d'image de la pochette non plus... Y a t-il quelque chose que je pige pô? :oops:
Attachments
200420_180631_593x581_easyshot.jpg
(55.55 KiB) Downloaded 142 times
Last edited by Argolance on Fri 24 Apr 2020, 18:08, edited 2 times in total.

User avatar
fabrice_035
Posts: 765
Joined: Mon 28 Apr 2014, 17:54
Location: Bretagne / France

#9 Post by fabrice_035 »

Ta regardé si tu avais ffprobe ?

Code: Select all

ffprobe -v quiet -print_format json -show_format "http://stream.radio.co/s4360dbc20/listen" |  grep "StreamTitle" | awk -F':' '{print $2}'
ça arrive parfois que cette station n'affiche pas le titre mais ça dure juste 1 seconde.
La commande ci-dessus va t'afficher le morceau en cours.
Bionicpup64-8.0 _ Kernel 5.4.27-64oz _ Asus Rog GL752

User avatar
Argolance
Posts: 3767
Joined: Sun 06 Jan 2008, 22:57
Location: PORT-BRILLET (Mayenne - France)
Contact:

#10 Post by Argolance »

Oui, j'ai:

Code: Select all

root@puppypc9814 ~ 
# ffprobe
avprobe version 0.8.6-4:0.8.6-0ubuntu0.12.04.1, Copyright (c) 2007-2013 the Libav developers
  built on Apr  2 2013 17:00:59 with gcc 4.6.3
Simple multimedia streams analyzer
usage: avprobe [OPTIONS] [INPUT_FILE]
J'ai aussi réédité mon précédent message entre temps.
Le titre apparait bien dans la fenêtre de la console, mais pas dans celle de la GUI dans la barre de statut.

Code: Select all

ffprobe -v quiet -print_format json -show_format "http://stream.radio.co/s4360dbc20/listen" |  grep "StreamTitle" | awk -F':' '{print $2}' 
>>>>

Code: Select all

root@puppypc9814 ~ 
# ffprobe -v quiet -print_format json -show_format "http://stream.radio.co/s4360dbc20/listen" |  grep "StreamTitle" | awk -F':' '{print $2}' 
root@puppypc9814 ~ 
# 
Last edited by Argolance on Mon 20 Apr 2020, 16:30, edited 1 time in total.

User avatar
fabrice_035
Posts: 765
Joined: Mon 28 Apr 2014, 17:54
Location: Bretagne / France

#11 Post by fabrice_035 »

oui mais le résultat de

Code: Select all

ffprobe -v quiet -print_format json -show_format "http://stream.radio.co/s4360dbc20/listen" |  grep "StreamTitle" | awk -F':' '{print $2}' 
C'est quelle version ta puppy ?

Code: Select all

root# ffprobe
ffprobe version 3.4.4-0ubuntu0.18.04.1 Copyright (c) 2007-2018 the FFmpeg developers
  built with gcc 7 (Ubuntu 7.3.0-16ubuntu3)
Bionicpup64-8.0 _ Kernel 5.4.27-64oz _ Asus Rog GL752

User avatar
Argolance
Posts: 3767
Joined: Sun 06 Jan 2008, 22:57
Location: PORT-BRILLET (Mayenne - France)
Contact:

#12 Post by Argolance »

J'ai répondu à ta question dans le même temps ci-dessus.
Je tourne avec EasyPup, mais suis plus ou moins contraint de continuer avec ToOpPy (Precise 5.7.3) car j'ai du matos (scanner Mustek A3) dont j'ai très souvent besoin et que je ne parviens pas à faire marcher ailleurs!!!

User avatar
fabrice_035
Posts: 765
Joined: Mon 28 Apr 2014, 17:54
Location: Bretagne / France

#13 Post by fabrice_035 »

Ah oui, donc ta version de ffprobe est obsolète. Pas de solution donc. Dsl

Essaye pour voir

Code: Select all

ffprobe -v quiet -print_format json -show_format "http://stream.radio.co/s4360dbc20/listen"
Bionicpup64-8.0 _ Kernel 5.4.27-64oz _ Asus Rog GL752

User avatar
Argolance
Posts: 3767
Joined: Sun 06 Jan 2008, 22:57
Location: PORT-BRILLET (Mayenne - France)
Contact:

#14 Post by Argolance »

Du coup j'ai compilé la dernière version 4.2.2 de ffmpeg qui embarque ffprobe... et ça marche! :)
Merci.
Attachments
200420_193458_316x397_easyshot.png
(71.6 KiB) Downloaded 124 times

User avatar
fabrice_035
Posts: 765
Joined: Mon 28 Apr 2014, 17:54
Location: Bretagne / France

#15 Post by fabrice_035 »

Félicitation! Je mettrais à jour demain le code du premier message pour prendre en compte ta remarque d'absence d'image et utilisation d'une image par défaut si la pochette n'est pas trouvée. Bonne soirée.
Bionicpup64-8.0 _ Kernel 5.4.27-64oz _ Asus Rog GL752

User avatar
Argolance
Posts: 3767
Joined: Sun 06 Jan 2008, 22:57
Location: PORT-BRILLET (Mayenne - France)
Contact:

#16 Post by Argolance »

Bonjour,
J'ai pensé que ça pourrait t'intéresser?

Cordialement.
Attachments
start_stop.png
(891 Bytes) Downloaded 168 times

User avatar
fabrice_035
Posts: 765
Joined: Mon 28 Apr 2014, 17:54
Location: Bretagne / France

#17 Post by fabrice_035 »

Ah merci Argolance, ça pourrait servir, bien que ton bouton correspond au thème de ta puppy. Mais c'est vrai que mon petit programme c'est du one shoot et le coup le bouton qui fait lecture et stop c'est une approche minimaliste, comme le reste 8)
Idéalement ça serait de reprendre le programme par défaut dans les puppy's, c'est à dire "Simple GTK Radio" et de lui adjoindre ce qui a été développé plus haut.
Je vais plutôt tenter cela à l'occasion.
Cdt

Image
Bionicpup64-8.0 _ Kernel 5.4.27-64oz _ Asus Rog GL752

User avatar
Argolance
Posts: 3767
Joined: Sun 06 Jan 2008, 22:57
Location: PORT-BRILLET (Mayenne - France)
Contact:

#18 Post by Argolance »

Bonjour fabrice_35,
C'est du "one shoot" but c'est du tout bon! 8)
fabrice_035 wrote:Idéalement ça serait de reprendre le programme par défaut dans les puppy's, c'est à dire "Simple GTK Radio" et de lui adjoindre ce qui a été développé plus haut.
Je vais plutôt tenter cela à l'occasion.
Bon ben j'ai eu la même idée, d'autant que j'avais fait un petit programme appelé :arrow: myRadio. Je lui ai donc rajouté ton script modifié puisque la zone de saisie de l'URL est déjà présente sur l'interface principale. La fenêtre de nrp est du coup très dépouillée. Ça fonctionne correctement!

Cordialement.
Attachments
200421_165941_665x314_easyshot.jpg
(77.61 KiB) Downloaded 154 times

User avatar
fabrice_035
Posts: 765
Joined: Mon 28 Apr 2014, 17:54
Location: Bretagne / France

#19 Post by fabrice_035 »

Et par quelle miracle cette version modelée que tu as concocté dans ton antre de lili puppycien pourra venir égayer nos mornes journée ?
Bionicpup64-8.0 _ Kernel 5.4.27-64oz _ Asus Rog GL752

User avatar
Argolance
Posts: 3767
Joined: Sun 06 Jan 2008, 22:57
Location: PORT-BRILLET (Mayenne - France)
Contact:

#20 Post by Argolance »

fabrice_035 wrote:Et par quelle miracle cette version modelée que tu as concocté dans ton antre de lili puppycien pourra venir égayer nos mornes journée ?
Je ne sais pas ce que tu entends par là (j'espère avoir bien compris :oops: ), mais, à moins que tu y voies un inconvénient, cela devrait faire l'objet d'une mise à jour de myRadio version 2.2 à la version 2.3 sur le fil dont le lien est donné plus haut, ainsi qu'une mise à jour pour les utilisateurs de ToOpPy qui intègre myRadio par défaut. Mais pas tout de suite, j'attends voir à l'usage...
Marche également avec vlc.

Post Reply