Bonjour,
Je me suis attaqué depuis quelques jours au développement d'un programme d'écoute de radios internet sur mon PC, et ça marche vraiment très bien! J'ai pensé que ça pouvait en intéresser certains, et je dédie même cette application à ceux qui pensent encore que Python n'est qu'un langage de script...
Voilà une version basique. Vous voyez que la partie purement écoute prend... 3 lignes! Et en fait, il a fallu créer une petite fenêtre uniquement pour pouvoir arrêter le programme.
L'écoute de la radio internet utilise le module QtMultimedia de PyQt5.
A noter qu'il y a très peu de modifications à faire pour que le même programme lise un fichier audio mp3: il suffit de faire QUrl.fromLocalFile(url) au lieu de QUrl(url), ce qui ajoutera simplement "file:///" au début de l'adresse disque du fichier.
Le programme est prévu pour être lancé avec l'url de la radio internet en argument de la ligne de commande. Avec un bureau graphique (Windows, Linux, MacOS), on peut créer une icône sur le bureau, qui lancera le programme avec la radio souhaité en argument.
Voilà le code proposé, très largement documenté (testé avec Python v3.5 et PyQt5 v5.9):
Voilà la petite fenêtre qui s'affiche (avec l'option icône):
Code : 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
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81 #!/usr/bin/python # -*- coding: utf-8 -*- # Python3 v3.5 PyQt5 v5.9 """ Lecteur basique d'une radio internet Auteur: Jean-Paul Vidal dit "Tyrtamos" (mai 2018) Pour les adresses web des radios francophones, voir par exemple: http://fluxradios.blogspot.fr/ Exemple pour la radio "Frequence 3": http://ice.stream.frequence3.net/frequence3-128.mp3 Pour télécharger une icône, voir par exemple: https://icones8.fr/icon/2308/tour-de-radio """ import sys import os from PyQt5.QtWidgets import (QApplication, QWidget, QPushButton, QGridLayout, QMessageBox, QStyleFactory) #from PyQt5.QtGui import QIcon # à mettre s'il y a une icône pour la fenêtre from PyQt5.QtCore import Qt, QUrl from PyQt5.QtMultimedia import QMediaPlayer, QMediaContent ############################################################################# class RadioWeb(QWidget): def __init__(self, qurlradio, parent=None): super().__init__(parent) self.setWindowTitle("Radio internet") self.resize(250,50) self.setAttribute(Qt.WA_DeleteOnClose, True) # ajoute un bouton pour arrêter le programme (et l'écoute) self.bouton = QPushButton("Arrêter", self) self.bouton.setStyleSheet("background-color:lightgreen;") self.bouton.clicked.connect(self.close) # fermeture layout = QGridLayout() layout.addWidget(self.bouton, 0, 0) # bouton au milieu de fenêtre self.setLayout(layout) # crée le player self.player = QMediaPlayer() # et lance l'écoute de la radio demandée self.player.setMedia(QMediaContent(qurlradio)) self.player.play() ############################################################################# if __name__ == "__main__": # active la bibliothèque graphique app = QApplication(sys.argv) # met un style pour toute l'application app.setStyle(QStyleFactory.create("Fusion")) # option: met une icone pour l'application #icone = os.path.join(os.path.dirname(os.path.abspath(__file__)), "icons8-tour-de-radio-50.png") #app.setWindowIcon(QIcon(icone)) # récupére l'argument en ligne de commande if len(sys.argv)>1: url = sys.argv[1] qurl = QUrl(url) else: QMessageBox.information(None, "Chargement de la radio", "Aucune radio n'a été demandée") app.quit() sys.exit() # lance la fenêtre pour l'écoute de la radio radioweb = RadioWeb(qurl) radioweb.show() # boucle de traitement des évènements et sortie du programme sys.exit(app.exec_())
Il s'agit ici d'une version minimale pour l'écoute d'une seule radio. Mais on peut faire plus complet et plus confortable en ajoutant une "playlist", alimentée par une liste de radios prédéfinie, et un moyen pour sélectionner la radio à écouter. Pour cela, j'utilise un simple fichier texte "radioweb.txt" pour la liste des radios qui m'intéressent, et un QTableWidget pour sélectionner la radio à écouter dans cette liste avec un simple double-clic. En ajoutant une "pause" et un "reprendre" avec un menu popup, on peut s'adapter rapidement à un coup de téléphone... Voilà une copie d'écran:
Pour être encore plus pratique, ce dernier lecteur est chez moi intégré dans un "QSystemTrayIcon" qui permet à ce programme de ne prendre que la place d'une icône dans la zone de notification. Ce programme est chargé automatiquement à l’allumage du PC, et je n'ai que 2 clic de souris à faire pour lancer l'écoute de la radio qui m'intéresse. En écrivant ce message, j'écoute la radio "Fréquence 3" (url = "http://ice.stream.frequence3.net/frequence3-128.mp3").
Et, cerise sur le gâteau, on peut facilement créer un exécutable autonome avec pyinstaller. C'est ce que je fais sous Windows, et j'utilise même l'option "onefile" pour n'avoir qu'un seul fichier "radioweb.exe" qui contient tout, y compris l'interpréteur Python, et qui peut donc être exécuté sur un PC qui n'a pas Python installé.
Je n'ai pas encore eu le temps de mettre ces extensions sur mon site web, mais ça va venir... Et ça irait plus vite si je savais que des personnes de ce forum étaient intéressées.
Partager