Lettore di stazioni radio da terminale, cross-platform (Linux ยท macOS ยท Windows), con interfaccia TUI colorata basata su Rich, metadati in tempo reale, registrazione stream e ricerca integrata su RadioBrowser.info.
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ ๐ต RADIO PLAYER M3U โฐ 14:32:18 00:47 ๐ Volume: 80% ๐ โ ๐ โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
โญโ Status โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ โถ IN RIPRODUZIONE โ ๐ก Radio Deejay โ
โ ๐ค The Weeknd ๐ผ Blinding Lights [01:23] โ
โ ๐ 128 kbps โข AAC โข ๐ฆ OK โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
โญโ ๐ป Stazioni (9 totali) โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ 1 IT::Venice Radio โ
โ 2 IT::Radio24 โ
โ ๐โถ๏ธ 3 IT::Radio Deejay โ
โ 4 IT::RDS โ
โ 5 IT::Radio Rai1 โ
โ 6 IT::Radio Rai2 โ
โ 7 IT::Radio Rai3 โ
โ 8 IT::Radio Rai5 Classica โ
โ 9 IT::Radio Classica CH โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
โญโ ๐ฎ Controlli โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ โ/โ Seleziona p/Space Play/Pausa +/= Vol+ -/_ Vol- m Muto b Sfoglia โ
โ r Rec l Log t Notifiche h Cronologia s Salva 1-9+โต Vai a # q Esci โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ ๐ต RADIO PLAYER M3U โฐ 14:33:05 01:34 ๐ Volume: 80% ๐ โ ๐ โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
โญโ ๐ RadioBrowser.info โ
20 stazioni trovate โโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ radio italia_ โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
โญโ Risultati (20) โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ Nome Paese kbps Codec โ
Voti โ
โ ๐ Virgin Radio Italia Italy 128 MP3 16116 โ
โ Radio Italia Solo Musica Italy 0 MP3 9276 โ
โ CLASSIC HITS RADIO Italia Italy 192 AAC 5844 โ
โ NEW HITS RADIO Italia Italy 320 MP3 3849 โ
โ Radio Italia Anni 60 Italy 64 MP3 2998 โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
โญโ ๐ฎ Comandi ricerca โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ โ/โ Naviga โต Aggiungi a M3U p Ascolta anteprima โซ Cancella Esc Torna โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
| Funzionalitร | |
|---|---|
| ๐ป | Riproduzione di qualsiasi stream radio supportato da MPV (MP3, AAC, OGG, HLSโฆ) |
| ๐ฅ๏ธ | Interfaccia TUI con 10 stazioni sempre visibili, nessuno scroll necessario |
| ๐ต | Metadati automatici via ICY: artista, titolo del brano e timer in tempo reale |
| ๐ | Statistiche live: bitrate, codec e stato del buffer |
| ๐ | Controllo volume istantaneo senza interrompere la riproduzione |
| ๐ | Ricerca su RadioBrowser.info โ 40.000+ stazioni, ordinabili per popolaritร |
| โ | Aggiunta stazioni al M3U da RadioBrowser con controllo duplicati automatico |
| ๐ | Anteprima di una stazione trovata prima di salvarla |
| ๐ด | Registrazione dello stream in MP3 tramite ffmpeg |
| ๐ | Cronologia brani (ultimi 100), esportabile in JSON |
| ๐ | Notifiche desktop native al cambio brano (notify-send su Linux, Toast su Windows) |
| ๐ | Logging su file rotante, attivabile/disattivabile a runtime senza riavvio |
| โฑ๏ธ | Uptime di sessione persistente (non si resetta al cambio stazione) |
| ๐ฅ๏ธ | Cross-platform: Linux, macOS, Windows |
| ๐ผ๏ธ | Icona nel system tray con menu contestuale (play/pausa, volume, cambio stazione) |
# 1. Clona il repository
git clone https://github.com/buzzqw/radio-player-m3u.git
cd radio-player-m3u
# 2. Installa le dipendenze Python
pip3 install -r requirements.txt
# 3. Installa mpv (vedi sotto per il tuo sistema)
# 4. Avvia con il file M3U di esempio incluso
python3 radio_player.py radio.m3usudo apt update
sudo apt install mpv python3 python3-pip libnotify-bin ffmpeg
pip3 install -r requirements.txtsudo dnf install mpv python3 python3-pip libnotify ffmpeg
pip3 install -r requirements.txtbrew install mpv python ffmpeg
pip3 install -r requirements.txt- Installa Python 3.8+ da python.org (spunta "Add to PATH")
- Installa MPV da mpv.io e aggiungi la cartella al PATH di sistema
- (Opzionale) Installa ffmpeg da ffmpeg.org per la registrazione
- Installa le dipendenze:
pip install -r requirements.txt
pip install pywin32 win10toast# Avvia con un file M3U specifico
python3 radio_player.py mie_radio.m3u
# Auto-rileva il primo file .m3u nella cartella corrente
python3 radio_player.pyAll'avvio viene selezionata automaticamente la prima stazione. Premi p o Spazio per iniziare ad ascoltare.
Il player supporta il formato M3U esteso (#EXTM3U) con attributi opzionali:
#EXTM3U
#EXTINF:-1 group-title="Italiana" tvg-logo="https://example.com/logo.png",Radio Deejay
http://deejay.example.com/stream.mp3
#EXTINF:-1 group-title="Classica",Radio Classica
http://classica.example.com/stream
#EXTINF:-1,IT::Radio Rai1
http://icestreaming.rai.it/1.mp3Suggerimento: Premi
bper cercare stazioni su RadioBrowser.info e aggiungerle automaticamente al tuo file M3U con un solo tasto.
| Tasto | Azione |
|---|---|
โ โ |
Seleziona stazione (senza avviarla) |
p ยท Spazio ยท Invio |
Play / Pausa |
+ = |
Volume +5% |
- _ |
Volume -5% |
m |
Muto / Riattiva audio |
1โ9 poi Invio |
Salta direttamente alla stazione numero N |
b |
Apre la ricerca RadioBrowser.info |
r |
Avvia / ferma registrazione stream (richiede ffmpeg) |
t |
Attiva / disattiva notifiche cambio brano |
l |
Attiva / disattiva log su file |
h |
Mostra gli ultimi brani ascoltati |
s |
Esporta la cronologia brani in JSON |
q |
Esci |
| Tasto | Azione |
|---|---|
| (digita) | Cerca stazioni per nome โ ricerca automatica dopo 0,3 s |
โ โ |
Naviga tra i risultati |
Invio |
Aggiunge la stazione selezionata al file M3U |
p |
Ascolta anteprima senza salvare nel M3U |
Spazio |
Ferma l'anteprima in corso |
โซ |
Cancella l'ultimo carattere digitato |
Esc |
Torna alla lista stazioni |
Il player integra la API pubblica di RadioBrowser.info, un database aperto con oltre 40.000 stazioni da tutto il mondo.
Come funziona:
- Premi
bper aprire la modalitร sfoglia - Digita il nome (anche parziale) โ la ricerca parte automaticamente dopo 0,3 secondi
- I risultati sono ordinati per popolaritร (โ voti della community)
- Per ogni stazione vengono mostrati: nome, paese, bitrate, codec e voti
- Le stazioni giร presenti nel tuo M3U sono segnalate con
โ Invioaggiunge la stazione al file M3U (controlla automaticamente i duplicati per URL e nome)pavvia un'anteprima istantanea โSpazioper fermarlaEscper tornare alla lista
Feedback visivo dello stato:
| Stato | Colore bordo | Indicatore |
|---|---|---|
| Ricerca in corso | ๐ก Giallo | Spinner animato + query cercata |
| Risultati trovati | ๐ข Verde | Numero stazioni trovate |
| Nessun risultato | ๐ด Rosso | Query esatta che non ha prodotto risultati |
| Pacchetto | Versione | Uso |
|---|---|---|
rich |
โฅ 13.7 | Interfaccia TUI โ obbligatoria |
requests |
โฅ 2.31 | Metadati ICY e API RadioBrowser |
pystray |
โฅ 0.19.5 | Icona system tray con menu contestuale |
Pillow |
โฅ 10.0 | Generazione immagine icona tray |
pip3 install -r requirements.txt| Strumento | Necessario | Uso |
|---|---|---|
mpv |
โ Obbligatorio | Engine di riproduzione audio |
ffmpeg |
โฌ Opzionale | Registrazione stream (r) |
libnotify |
โฌ Opzionale | Notifiche desktop su Linux |
pywin32 + win10toast |
โฌ Opzionale | Notifiche Toast su Windows |
mpv --version # verifica che mpv sia installato e nel PATH
which mpv # percorso binario (Linux/macOS)Alcuni stream non espongono metadati ICY standard. Il player prova due metodi:
- Lettura diretta dell'header ICY (
icy-metaint) - Interrogazione tramite IPC MPV (
metadata)
Se entrambi falliscono, lo stream non trasmette metadati โ รจ normale per alcune stazioni.
ffmpeg -version # deve rispondere con la versione
# Ubuntu/Debian: sudo apt install ffmpeg
# macOS: brew install ffmpeg
# Windows: scarica da https://ffmpeg.org/download.htmlnotify-send "Test" "Funziona?"
# Se il comando fallisce:
sudo apt install libnotify-bin # Ubuntu/Debian
sudo dnf install libnotify # FedoraLa ricerca usa l'API pubblica di radio-browser.info su HTTPS (con fallback HTTP). Se la rete blocca il traffico esterno, la ricerca non sarร disponibile ma il player funzionerร normalmente.
Assicurati di eseguire il player in un terminale che supporta le sequenze ANSI (qualsiasi terminale moderno). Evita di lanciarlo da IDE o editor senza terminale integrato.
Distribuito sotto la GNU General Public License v3.0.
Copyright (C) 2025โ2026 Andres Zanzani <azanzani@gmail.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Andres Zanzani
- ๐ง azanzani@gmail.com
- ๐ GitHub: @buzzqw
I contributi sono benvenuti!
- Fai un fork del repository
- Crea un branch per la tua modifica (
git checkout -b feature/nuova-funzione) - Fai commit delle modifiche (
git commit -m 'Aggiunge nuova funzione') - Fai push del branch (
git push origin feature/nuova-funzione) - Apri una Pull Request
Per bug e richieste di funzionalitร usa la sezione Issues.
๐ต Buon ascolto! ๐ต
Fatto con โค๏ธ e Python