Commit 76688c27 authored by Thorfin89's avatar Thorfin89

Ajout soluce info titre

parent a2964d88
......@@ -26,4 +26,10 @@ France Bleue Isère,FR,Régionale,http://direct.francebleu.fr/live/fbisere-midfi
France Bleu Armorique,FR,Régionale,http://direct.francebleu.fr/live/fbarmorique-midfi.mp3,fb-armorique.png
RTL,FR,Généraliste,http://icecast.rtl.fr/rtl-1-44-128,rtl.png
Europe 1,FR,Généraliste,http://stream.europe1.fr/europe1.mp3,europe-1.png
Nostalgie,FR,Divers,http://scdn.nrjaudio.fm/adwz2/fr/30601/mp3_128.mp3,nostalgie.png
\ No newline at end of file
Nostalgie,FR,Divers,http://scdn.nrjaudio.fm/adwz2/fr/30601/mp3_128.mp3,nostalgie.png
Celtic Music Radio,GB-SCT,Celtic,https://uksoutha.streaming.broadcast.radio/celtic,CelticMusicRadio.png
Smooth Scotland,GB-SCT,Celtic,https://media-ice.musicradio.com/SmoothScotlandMP3,SmoothScotland.png
Expat Radio Scotland,GB-SCT,Oldies,https://everestcast.shoutcastservices.com:1355/stream,ExpatRadioScotland.png
Linn Jazz,GB,Jazz,http://radio.linn.co.uk:8000/autodj,LinnJazz.png
Pure Radio Scotland,GB-SCT,Scotland,https://listen-pureradio.sharp-stream.com/pure_radio.mp3?Device=LivePlayer&_=532281&awparams=companionAds%3Atrue&listenerid=8196d2c78a734f244852a3f8bbbecbcb,PureRadioScotland.png
Irish Pub Radio,IR,Irish,http://solid24.streamupsolutions.com:8026/stream,IrishPubRadio.png
......@@ -100,46 +100,79 @@ Il est également possible de passer des arguments à la fonction directement en
### Affichage des informations sur la radio en cours d'écoute :
Source :
- https://github.com/oaubert/python-vlc/issues/72
```python
from time import sleep
from vlc import EventType, Media, MediaPlayer, MediaParseFlag, Meta
def _media_cb(event, *unused):
# XXX callback ... never called
print(event)
p = MediaPlayer()
# cmd1 = "sout=file/ts:%s" % outfile
#media = Media("http://live.leanstream.co/CJOTFM-MP3") # , cmd1)
media = Media("http://scdn.nrjaudio.fm/adwz2/fr/30601/mp3_128.mp3?origine=fluxradios")
# media.get_mrl()
p.set_media(media)
p.play()
e = p.event_manager()
e.event_attach(EventType.MediaMetaChanged, _media_cb, media)
e.event_attach(EventType.MediaParsedChanged, _media_cb, media)
# define the meta data to show
meta = {Meta.Album: None,
Meta.Genre: None,
Meta.NowPlaying: None}
while True: # loop forever
# XXX using MediaParseFlag.local is not any different
media.parse_with_options(MediaParseFlag.network, 2) # 2 sec timeout
# XXX media.get_parsed_status() always returns .skipped
for k in meta.keys():
v = media.get_meta(k)
if v != meta[k]:
# print("{} - {}".format(k, v))
print("{}".format(v))
meta[k] = v
sleep(2)
player = MediaPlayer()
radio_flux = Media("http://live.leanstream.co/CJOTFM-MP3") # on définit le flux
player.set_media(radio_flux) # on charge le flux
player.play() # on lance l'écoute de la radio
info_flux = player.event_manager() # on récupère l'information du flux
# définition des types d'infos à afficher
infos_selected = { # Meta.Album: None,
# Meta.AlbumArtist: None,
# Meta.Artist: None,
# Meta.Title: None,
# Meta.Genre: None,
# Meta.URL: None,
Meta.NowPlaying: None
}
while True: # boucle principale
# using MediaParseFlag.local is not any different
radio_flux.parse_with_options(MediaParseFlag.network, 2) # 2 sec timeout
# analyse des infos avec saut systématique si info nulle ou inchangée
for type_d_info in infos_selected.keys(): # pour chaque type d'info
info = radio_flux.get_meta(type_d_info) # on récupère l'info
if info != infos_selected[type_d_info]: # si l'info est différente de 'None'
print(info[4:len(info)-3]) # affiche de l'info 'nettoyée'
# mémorisation de l'info
infos_selected[type_d_info] = info
'''
on charge l'info dans la clé correspondante de
infos_selected[type_d_info]
l'info ne sera pas différente au prochain passage
=> la fonction print n'est plus traitée
jusqu'à ce que l'info change (changement de morceau)
'''
sleep(2) # on relance le test toutes 2 secondes
```
### Affichage du titre écouté (vesion simplifiée de la précédente)
```python
from time import sleep
from vlc import Media, MediaPlayer, Meta
player = MediaPlayer()
radio_flux = Media("http://live.leanstream.co/CJOTFM-MP3") # on définit le flux
player.set_media(radio_flux) # on charge le flux
player.play() # on lance l'écoute de la radio
info_flux = player.event_manager() # on récupère l'information du flux
memo_info = "" # pour mémoriser le titre
while True: # boucle principale
flux_info = radio_flux.get_meta(Meta.NowPlaying) # on récupère l'info sur le titre actuel
if flux_info and flux_info != memo_info: # si le titre donné et est différent de celui mémorisé
print(flux_info[3:len(flux_info) - 2]) # on 'nettoie' le titre
memo_info = flux_info # on mémorise le titre
sleep(2) # on relance le test toutes 2 secondes
```
### Problème de chemin courant
......
......@@ -8,7 +8,8 @@ from vlc import Instance
''' installer le paquet python-vlc :
$ sudo pip3 install python-vlc
installer aussi l'application VLC '''
from pupitre import Pupitre
from pupitre import Pupitre # gestion de l'interface sous Tkinter
# classes ---------------------------------
......
# Projet : WebRadioPi
# Fichier : pupitre.py
# Auteur : Daniel SAZERAT (thorfin89@free.fr)
import vlc
from time import sleep
from vlc import EventType, Media, MediaPlayer, MediaParseFlag, Meta
# classes ---------------------------------
class Mediainfo:
def __init__(self, flux):
self.flux = flux
print(flux)
self.play()
self.info()
sleep(50)
def play(self):
self.media_player = vlc.MediaPlayer()
radio = vlc.Media(self.flux)
self.media_player.set_media(radio)
self.media_player.play()
def info(self):
info = self.media_player.event_manager()
print(info)
radio1 = Mediainfo("http://live.leanstream.co/CJOTFM-MP3")
\ No newline at end of file
from time import sleep
from vlc import Media, MediaPlayer, Meta
player = MediaPlayer()
radio_flux = Media("http://live.leanstream.co/CJOTFM-MP3") # on définit le flux
player.set_media(radio_flux) # on charge le flux
player.play() # on lance l'écoute de la radio
info_flux = player.event_manager() # on récupère l'information du flux
memo_info = "" # pour mémoriser le titre
while True: # boucle principale
flux_info = radio_flux.get_meta(Meta.NowPlaying) # on récupère l'info sur le titre actuel
if flux_info and flux_info != memo_info: # si le titre donné et est différent de celui mémorisé
info_display = flux_info[4:len(flux_info) - 3] # on 'nettoie' le titre (caractères au début et à la fin)
if info_display[0:3] == " - ":
print("** "+info_display[3:]+" **")
else:
print(info_display)
memo_info = flux_info # on mémorise le titre
sleep(2) # on relance le test toutes 2 secondes
from time import sleep
from vlc import EventType, Media, MediaPlayer, MediaParseFlag, Meta
player = MediaPlayer()
radio_flux = Media("http://live.leanstream.co/CJOTFM-MP3") # on définit le flux
player.set_media(radio_flux) # on charge le flux
player.play() # on lance l'écoute de la radio
info_flux = player.event_manager() # on récupère l'information du flux
# définition des types d'infos à afficher
infos_selected = { # Meta.Album: None,
# Meta.AlbumArtist: None,
# Meta.Artist: None,
# Meta.Title: None,
# Meta.Genre: None,
# Meta.URL: None,
Meta.NowPlaying: None
}
while True: # boucle principale
# using MediaParseFlag.local is not any different
# radio_flux.parse_with_options(MediaParseFlag.network, 2) # 2 sec timeout
# analyse des infos avec saut systématique si info nulle ou inchangée
for type_d_info in infos_selected.keys(): # pour chaque type d'info
info = radio_flux.get_meta(type_d_info) # on récupère l'info
if info != infos_selected[type_d_info]: # si l'info est différente de 'None'
print(info[3:len(info)-2]) # affiche de l'info 'nettoyée'
# mémorisation de l'info
infos_selected[type_d_info] = info
'''
on charge l'info dans la clé correspondante de
infos_selected[type_d_info]
l'info ne sera pas différente au prochain passage
=> la fonction print n'est plus traitée
jusqu'à ce que l'info change (changement de morceau)
'''
sleep(2) # on relance le test toutes 2 secondes
......@@ -4,17 +4,16 @@
# import ----------------------------------
import tkinter as tk
from tkinter import ttk, Scale, HORIZONTAL, CENTER
from tkinter import ttk, Scale, HORIZONTAL
from PIL import Image, ImageTk
import csv
mute = False # le son n'est pas coupé au démarrage
bg_color = "#2F7082"
bg_color, bg_color_light = "#206080", "#2F6F8F" # couleur de fond
# Chargement du fichier CSV contenant les informations : Nom, Pays, Type, Url, Logo
with open("./data/radios.csv", 'r', encoding='utf-8-sig') as radios_file:
# utf-8-sig au lieu de utf-8 pour éviter l'erreur sur le nom du 1er champ "\ufeffNom"
# 'utf-8-sig' au lieu de 'utf-8' pour éviter l'erreur sur le nom du 1er champ '\ufeffNom'
radios_list = csv.DictReader(radios_file)
radios_list = [dict(ligne) for ligne in radios_list] # transforme en liste de dictionnaires
......@@ -108,7 +107,7 @@ class Pupitre:
def menu_droite(self):
# affiche du logo de la radio sélectionnée >>> placer ici l'icone de la radio en 200x200
self.lbl_radio_selected = ttk.Label(self.menu)
self.lbl_radio_selected = ttk.Label(self.menu, background=bg_color_light)
self.lbl_radio_selected.place(width=225, height=225, x=33, y=33)
# potentiomètre de volume
......@@ -166,7 +165,7 @@ class Pupitre:
def radio_stop(self): # arrête le flux radio et réinitialise la zone de droite
self.flux_stop()
self.lbl_radio_selected.config(image="")
self.lbl_radio_selected.config(image="", background=bg_color_light)
self.lbl_info_radio.config(text="")
def radio_selected(self, num_radio): # active la radio choisie et affiche le log et le nom
......@@ -182,7 +181,7 @@ class Pupitre:
img = img.resize((logo_size, logo_size), Image.ANTIALIAS) # redimensionne le logo
self.logo_selected = ImageTk.PhotoImage(img)
self.lbl_radio_selected.config(image=self.logo_selected) # affiche le logo à droite
self.lbl_radio_selected.config(image=self.logo_selected, background="white") # affiche le logo à droite
# affiche le nom de la radio sélectionnée
self.lbl_info_radio.config(text=radios_list[num_radio]['Nom'],
......
32
\ No newline at end of file
38
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment