Chargement en cours README.md +19 −1 Numéro de ligne d'origine Ligne d'origine Numéro de ligne de diff Ligne de diff Chargement en cours @@ -4,6 +4,21 @@ Lecteur de radios internet Pour toute information : thorfin89@free.fr Pour toute information : thorfin89@free.fr ### Importation des radios au format CSV : ```python def radios_display(self): # récupération de la liste des radios (+infos) with open("./data/radios.csv", 'r', encoding='utf8') as radios_file: radios_list = csv.DictReader(radios_file) radios_list = [dict(ligne) for ligne in radios_list] # transforme en liste de dictionnaires # print(radios_dico) nb_radios = (len(radios_list)) # détermine le nombre de radios (dictionnaires) print(radios_list[3]['Nom']) # extrait le nom de la 4ème radio for c in range(nb_radios): # affiche la liste des 14 radios print(radios_list[c]['Nom']) ``` ### SOURCES : ### SOURCES : #### Doc python-vlc : #### Doc python-vlc : - https://www.olivieraubert.net/vlc/python-ctypes/doc/vlc.MediaPlayer-class.html - https://www.olivieraubert.net/vlc/python-ctypes/doc/vlc.MediaPlayer-class.html Chargement en cours @@ -14,7 +29,10 @@ Pour toute information : thorfin89@free.fr - https://www.youtube.com/watch?v=n1ucrkly2nc - https://www.youtube.com/watch?v=n1ucrkly2nc #### Afficher les informations sur la radio #### Afficher les informations sur la radio https://github.com/oaubert/python-vlc/issues/72 - https://github.com/oaubert/python-vlc/issues/72 #### Fichiers csv - https://www.youtube.com/watch?v=sgUSSa7N9ec #### Doc tkinter : #### Doc tkinter : - http://tkinter.fdex.eu/index.html - http://tkinter.fdex.eu/index.html Chargement en cours main.py +19 −6 Numéro de ligne d'origine Ligne d'origine Numéro de ligne de diff Ligne de diff Chargement en cours @@ -2,11 +2,11 @@ # Fichier : main.py # Fichier : main.py # Auteur : Daniel SAZERAT (thorfin89@free.fr) # Auteur : Daniel SAZERAT (thorfin89@free.fr) # import vlc > sudo pip3 install python-vlc # import ---------------------------------- # import ---------------------------------- import csv from rw_pupitre import Pupitre from rw_pupitre import Pupitre # installer le paquet python-vlc : sudo pip3 install python-vlc from vlc import Instance from vlc import Instance Chargement en cours @@ -32,19 +32,32 @@ class Radio(Pupitre): # on récupère la valeur du potentiomètre de volume # on récupère la valeur du potentiomètre de volume vol_audio = int(vol_potar) vol_audio = int(vol_potar) self.player.audio_set_volume(vol_audio) self.player.audio_set_volume(vol_audio) # le niveau du volume est enregistré dans webrafio.cfg # pour le le reprendre au prochain lancement de l'application sauvegarde = open("webradiopi.cfg", "w") sauvegarde = open("webradiopi.cfg", "w") sauvegarde.write(vol_potar) # le niveau du volume est enregistré sauvegarde.write(vol_potar) sauvegarde.close() sauvegarde.close() def radio_mute(self): # coupure du son def radio_mute(self): # coupure du son self.player.audio_set_volume(0) self.player.audio_set_volume(0) def radio_sound(self): # rétablissement du son def radio_sound(self): # rétablissement du son lecture = open("webradiopi.cfg", "r") # on charge configuration sauvegardée config_file = open("webradiopi.cfg", "r") # on charge configuration sauvegardée volume_init = int(lecture.read()) volume_init = int(config_file.read()) lecture.close() config_file.close() self.player.audio_set_volume(volume_init) self.player.audio_set_volume(volume_init) def radios_display(self): # récupération de la liste des radios (+infos) with open("./data/radios.csv", 'r', encoding='utf8') as radios_file: radios_list = csv.DictReader(radios_file) radios_list = [dict(ligne) for ligne in radios_list] # transforme en liste de dictionnaires # print(radios_dico) nb_radios = (len(radios_list)) # détermine le nombre de radios (dictionnaires) print(radios_list[3]['Nom']) # extrait le nom de la 4ème radio for c in range(nb_radios): # affiche la liste des 14 radios print(radios_list[c]['Nom']) app = Radio() # instancie l'application app = Radio() # instancie l'application app.boucle() app.boucle() poub.py 0 → 100644 +36 −0 Numéro de ligne d'origine Ligne d'origine Numéro de ligne de diff Ligne de diff 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.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) rw_pupitre.py +17 −10 Numéro de ligne d'origine Ligne d'origine Numéro de ligne de diff Ligne de diff Chargement en cours @@ -6,8 +6,7 @@ import tkinter as tk import tkinter as tk from tkinter import ttk, Scale, HORIZONTAL, CENTER, LEFT, RIGHT, TOP from tkinter import ttk, Scale, HORIZONTAL, CENTER, LEFT, RIGHT, TOP global mute mute = False # le son n'est pas coupé au démarrage mute = False # classes --------------------------------- # classes --------------------------------- Chargement en cours @@ -31,9 +30,6 @@ class Pupitre: self.zones() self.zones() def boucle(self): self.root.mainloop() # noinspection PyTypeChecker # noinspection PyTypeChecker def zones(self): def zones(self): # fenêtre Haute : Titre / Menu > dim 800x80 # fenêtre Haute : Titre / Menu > dim 800x80 Chargement en cours @@ -48,13 +44,15 @@ class Pupitre: menu = tk.Frame(self.root, width="300", height="400", bg="#D9D9D9") menu = tk.Frame(self.root, width="300", height="400", bg="#D9D9D9") menu.pack(side=RIGHT, expand='True') menu.pack(side=RIGHT, expand='True') # Position d'origine du menu x_menu = 0 x_menu = 0 y_menu = 240 y_menu = 240 # définition d'un style commun à tous les bouton style = ttk.Style() style = ttk.Style() style.configure("BW.TLabel", foreground="black", background="#D9D9D9") style.configure("BW.TLabel", foreground="black", background="#D9D9D9") # boutons de commande # affichage des boutons de commande : back, pause, play, stop, forward btn_play = ttk.Button(menu, image=self.icon_back, text="Back", command=None, style="BW.TLabel") btn_play = ttk.Button(menu, image=self.icon_back, text="Back", command=None, style="BW.TLabel") btn_play.place(width=30, height=30, x=x_menu + 45, y=y_menu + 0) btn_play.place(width=30, height=30, x=x_menu + 45, y=y_menu + 0) btn_play = ttk.Button(menu, image=self.icon_pause, text="Pause", command=self.radio_pause, style="BW.TLabel") btn_play = ttk.Button(menu, image=self.icon_pause, text="Pause", command=self.radio_pause, style="BW.TLabel") Chargement en cours @@ -67,9 +65,11 @@ class Pupitre: btn_stop.place(width=30, height=30, x=x_menu + 225, y=y_menu + 0) btn_stop.place(width=30, height=30, x=x_menu + 225, y=y_menu + 0) # potentiomètre de volume # potentiomètre de volume lecture = open("webradiopi.cfg", "r") # on charge configuration sauvegardée # - on charge la configuration du volume sauvegardée lecture = open("webradiopi.cfg", "r") volume_init = lecture.read() volume_init = lecture.read() lecture.close() lecture.close() # - affichage du potentiomètre de volume vol_potar = Scale(menu, from_=0, to=100, tickinterval=20, orient=HORIZONTAL, length=200, label="Volume", vol_potar = Scale(menu, from_=0, to=100, tickinterval=20, orient=HORIZONTAL, length=200, label="Volume", command=self.volume) command=self.volume) vol_potar.set(volume_init) vol_potar.set(volume_init) Chargement en cours @@ -80,17 +80,24 @@ class Pupitre: style="BW.TLabel") style="BW.TLabel") self.btn_mute.place(width=30, height=30, x=x_menu + 245, y=y_menu + 70) self.btn_mute.place(width=30, height=30, x=x_menu + 245, y=y_menu + 70) # info appli # affichage de l'info sur l'application dans le bas lbl_info = ttk.Label(menu, text="WebRadioPi © Thorfin89", anchor=CENTER) lbl_info = ttk.Label(menu, text="WebRadioPi © Thorfin89", anchor=CENTER) lbl_info.place(width=300, height=16, x=x_menu + 0, y=y_menu + 140) lbl_info.place(width=300, height=16, x=x_menu + 0, y=y_menu + 140) def switch_sound(self): def switch_sound(self): # bascule on/off du son global mute global mute if not mute: if not mute: self.radio_mute() self.radio_mute() self.btn_mute.config(image=self.icon_mute) self.btn_mute.config(image=self.icon_mute) # affichage "logo sound off" mute = True mute = True else: else: self.radio_sound() self.radio_sound() self.btn_mute.config(image=self.icon_sound) self.btn_mute.config(image=self.icon_sound) # affichage "logo sound on" mute = False mute = False def boucle(self): self.radios_display() self.root.mainloop() webradiopi.cfg +1 −1 Numéro de ligne d'origine Ligne d'origine Numéro de ligne de diff Ligne de diff 43 100 No newline at end of file No newline at end of file Chargement en cours
README.md +19 −1 Numéro de ligne d'origine Ligne d'origine Numéro de ligne de diff Ligne de diff Chargement en cours @@ -4,6 +4,21 @@ Lecteur de radios internet Pour toute information : thorfin89@free.fr Pour toute information : thorfin89@free.fr ### Importation des radios au format CSV : ```python def radios_display(self): # récupération de la liste des radios (+infos) with open("./data/radios.csv", 'r', encoding='utf8') as radios_file: radios_list = csv.DictReader(radios_file) radios_list = [dict(ligne) for ligne in radios_list] # transforme en liste de dictionnaires # print(radios_dico) nb_radios = (len(radios_list)) # détermine le nombre de radios (dictionnaires) print(radios_list[3]['Nom']) # extrait le nom de la 4ème radio for c in range(nb_radios): # affiche la liste des 14 radios print(radios_list[c]['Nom']) ``` ### SOURCES : ### SOURCES : #### Doc python-vlc : #### Doc python-vlc : - https://www.olivieraubert.net/vlc/python-ctypes/doc/vlc.MediaPlayer-class.html - https://www.olivieraubert.net/vlc/python-ctypes/doc/vlc.MediaPlayer-class.html Chargement en cours @@ -14,7 +29,10 @@ Pour toute information : thorfin89@free.fr - https://www.youtube.com/watch?v=n1ucrkly2nc - https://www.youtube.com/watch?v=n1ucrkly2nc #### Afficher les informations sur la radio #### Afficher les informations sur la radio https://github.com/oaubert/python-vlc/issues/72 - https://github.com/oaubert/python-vlc/issues/72 #### Fichiers csv - https://www.youtube.com/watch?v=sgUSSa7N9ec #### Doc tkinter : #### Doc tkinter : - http://tkinter.fdex.eu/index.html - http://tkinter.fdex.eu/index.html Chargement en cours
main.py +19 −6 Numéro de ligne d'origine Ligne d'origine Numéro de ligne de diff Ligne de diff Chargement en cours @@ -2,11 +2,11 @@ # Fichier : main.py # Fichier : main.py # Auteur : Daniel SAZERAT (thorfin89@free.fr) # Auteur : Daniel SAZERAT (thorfin89@free.fr) # import vlc > sudo pip3 install python-vlc # import ---------------------------------- # import ---------------------------------- import csv from rw_pupitre import Pupitre from rw_pupitre import Pupitre # installer le paquet python-vlc : sudo pip3 install python-vlc from vlc import Instance from vlc import Instance Chargement en cours @@ -32,19 +32,32 @@ class Radio(Pupitre): # on récupère la valeur du potentiomètre de volume # on récupère la valeur du potentiomètre de volume vol_audio = int(vol_potar) vol_audio = int(vol_potar) self.player.audio_set_volume(vol_audio) self.player.audio_set_volume(vol_audio) # le niveau du volume est enregistré dans webrafio.cfg # pour le le reprendre au prochain lancement de l'application sauvegarde = open("webradiopi.cfg", "w") sauvegarde = open("webradiopi.cfg", "w") sauvegarde.write(vol_potar) # le niveau du volume est enregistré sauvegarde.write(vol_potar) sauvegarde.close() sauvegarde.close() def radio_mute(self): # coupure du son def radio_mute(self): # coupure du son self.player.audio_set_volume(0) self.player.audio_set_volume(0) def radio_sound(self): # rétablissement du son def radio_sound(self): # rétablissement du son lecture = open("webradiopi.cfg", "r") # on charge configuration sauvegardée config_file = open("webradiopi.cfg", "r") # on charge configuration sauvegardée volume_init = int(lecture.read()) volume_init = int(config_file.read()) lecture.close() config_file.close() self.player.audio_set_volume(volume_init) self.player.audio_set_volume(volume_init) def radios_display(self): # récupération de la liste des radios (+infos) with open("./data/radios.csv", 'r', encoding='utf8') as radios_file: radios_list = csv.DictReader(radios_file) radios_list = [dict(ligne) for ligne in radios_list] # transforme en liste de dictionnaires # print(radios_dico) nb_radios = (len(radios_list)) # détermine le nombre de radios (dictionnaires) print(radios_list[3]['Nom']) # extrait le nom de la 4ème radio for c in range(nb_radios): # affiche la liste des 14 radios print(radios_list[c]['Nom']) app = Radio() # instancie l'application app = Radio() # instancie l'application app.boucle() app.boucle()
poub.py 0 → 100644 +36 −0 Numéro de ligne d'origine Ligne d'origine Numéro de ligne de diff Ligne de diff 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.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)
rw_pupitre.py +17 −10 Numéro de ligne d'origine Ligne d'origine Numéro de ligne de diff Ligne de diff Chargement en cours @@ -6,8 +6,7 @@ import tkinter as tk import tkinter as tk from tkinter import ttk, Scale, HORIZONTAL, CENTER, LEFT, RIGHT, TOP from tkinter import ttk, Scale, HORIZONTAL, CENTER, LEFT, RIGHT, TOP global mute mute = False # le son n'est pas coupé au démarrage mute = False # classes --------------------------------- # classes --------------------------------- Chargement en cours @@ -31,9 +30,6 @@ class Pupitre: self.zones() self.zones() def boucle(self): self.root.mainloop() # noinspection PyTypeChecker # noinspection PyTypeChecker def zones(self): def zones(self): # fenêtre Haute : Titre / Menu > dim 800x80 # fenêtre Haute : Titre / Menu > dim 800x80 Chargement en cours @@ -48,13 +44,15 @@ class Pupitre: menu = tk.Frame(self.root, width="300", height="400", bg="#D9D9D9") menu = tk.Frame(self.root, width="300", height="400", bg="#D9D9D9") menu.pack(side=RIGHT, expand='True') menu.pack(side=RIGHT, expand='True') # Position d'origine du menu x_menu = 0 x_menu = 0 y_menu = 240 y_menu = 240 # définition d'un style commun à tous les bouton style = ttk.Style() style = ttk.Style() style.configure("BW.TLabel", foreground="black", background="#D9D9D9") style.configure("BW.TLabel", foreground="black", background="#D9D9D9") # boutons de commande # affichage des boutons de commande : back, pause, play, stop, forward btn_play = ttk.Button(menu, image=self.icon_back, text="Back", command=None, style="BW.TLabel") btn_play = ttk.Button(menu, image=self.icon_back, text="Back", command=None, style="BW.TLabel") btn_play.place(width=30, height=30, x=x_menu + 45, y=y_menu + 0) btn_play.place(width=30, height=30, x=x_menu + 45, y=y_menu + 0) btn_play = ttk.Button(menu, image=self.icon_pause, text="Pause", command=self.radio_pause, style="BW.TLabel") btn_play = ttk.Button(menu, image=self.icon_pause, text="Pause", command=self.radio_pause, style="BW.TLabel") Chargement en cours @@ -67,9 +65,11 @@ class Pupitre: btn_stop.place(width=30, height=30, x=x_menu + 225, y=y_menu + 0) btn_stop.place(width=30, height=30, x=x_menu + 225, y=y_menu + 0) # potentiomètre de volume # potentiomètre de volume lecture = open("webradiopi.cfg", "r") # on charge configuration sauvegardée # - on charge la configuration du volume sauvegardée lecture = open("webradiopi.cfg", "r") volume_init = lecture.read() volume_init = lecture.read() lecture.close() lecture.close() # - affichage du potentiomètre de volume vol_potar = Scale(menu, from_=0, to=100, tickinterval=20, orient=HORIZONTAL, length=200, label="Volume", vol_potar = Scale(menu, from_=0, to=100, tickinterval=20, orient=HORIZONTAL, length=200, label="Volume", command=self.volume) command=self.volume) vol_potar.set(volume_init) vol_potar.set(volume_init) Chargement en cours @@ -80,17 +80,24 @@ class Pupitre: style="BW.TLabel") style="BW.TLabel") self.btn_mute.place(width=30, height=30, x=x_menu + 245, y=y_menu + 70) self.btn_mute.place(width=30, height=30, x=x_menu + 245, y=y_menu + 70) # info appli # affichage de l'info sur l'application dans le bas lbl_info = ttk.Label(menu, text="WebRadioPi © Thorfin89", anchor=CENTER) lbl_info = ttk.Label(menu, text="WebRadioPi © Thorfin89", anchor=CENTER) lbl_info.place(width=300, height=16, x=x_menu + 0, y=y_menu + 140) lbl_info.place(width=300, height=16, x=x_menu + 0, y=y_menu + 140) def switch_sound(self): def switch_sound(self): # bascule on/off du son global mute global mute if not mute: if not mute: self.radio_mute() self.radio_mute() self.btn_mute.config(image=self.icon_mute) self.btn_mute.config(image=self.icon_mute) # affichage "logo sound off" mute = True mute = True else: else: self.radio_sound() self.radio_sound() self.btn_mute.config(image=self.icon_sound) self.btn_mute.config(image=self.icon_sound) # affichage "logo sound on" mute = False mute = False def boucle(self): self.radios_display() self.root.mainloop()
webradiopi.cfg +1 −1 Numéro de ligne d'origine Ligne d'origine Numéro de ligne de diff Ligne de diff 43 100 No newline at end of file No newline at end of file