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):

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_())
Voilà la petite fenêtre qui s'affiche (avec l'option icône):

Nom : radiointernet.jpg
Affichages : 2066
Taille : 20,1 Ko

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:

Nom : radioweb.jpg
Affichages : 2270
Taille : 48,7 Ko

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.