Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
W
WebRadioPi
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Thorfin89
WebRadioPi
Commits
6fe78d84
Commit
6fe78d84
authored
Jan 14, 2023
by
Thorfin89
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Importation des données des radios au format CSV
parent
56417da9
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
92 additions
and
18 deletions
+92
-18
README.md
README.md
+19
-1
main.py
main.py
+19
-6
poub.py
poub.py
+36
-0
rw_pupitre.py
rw_pupitre.py
+17
-10
webradiopi.cfg
webradiopi.cfg
+1
-1
No files found.
README.md
View file @
6fe78d84
...
@@ -4,6 +4,21 @@ Lecteur de radios internet
...
@@ -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
...
@@ -14,7 +29,10 @@ Pour toute information : thorfin89@free.fr
...
@@ -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
...
...
main.py
View file @
6fe78d84
...
@@ -2,11 +2,11 @@
...
@@ -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
...
@@ -32,19 +32,32 @@ class Radio(Pupitre):
...
@@ -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
lectur
e
=
open
(
"webradiopi.cfg"
,
"r"
)
# on charge configuration sauvegardée
config_fil
e
=
open
(
"webradiopi.cfg"
,
"r"
)
# on charge configuration sauvegardée
volume_init
=
int
(
lectur
e
.
read
())
volume_init
=
int
(
config_fil
e
.
read
())
lectur
e
.
close
()
config_fil
e
.
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
View file @
6fe78d84
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
View file @
6fe78d84
...
@@ -6,8 +6,7 @@
...
@@ -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 ---------------------------------
...
@@ -31,9 +30,6 @@ class Pupitre:
...
@@ -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
...
@@ -48,13 +44,15 @@ class Pupitre:
...
@@ -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"
)
...
@@ -67,9 +65,11 @@ class Pupitre:
...
@@ -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
)
...
@@ -80,17 +80,24 @@ class Pupitre:
...
@@ -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
View file @
6fe78d84
43
100
\ No newline at end of file
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment