
In questo articolo realizzeremo un semplicissimo riproduttore audio per files MP3 con una manciata di righe di Python e il modulo pygame.
Negli Anni Settanta chi aveva voglia di ascoltare musica fuori casa poteva approfittare del “mangiadischi”, un sistema elettromeccanico che consentiva di suonare dischi in formato 45 giri. Il problema erano gli ingombri e la necessità di portarsi dietro una serie di 45 giri da inserire nell’apparato per poterli ascoltare.
Una decina d’anni dopo, la Sony presenta un apparato tascabile (walkman) per poter ascoltare nastri di musica registrata in casa. Le “musicassette” audio consentivano di registrare una playlist di canzoni della durata di 60, 90 o 120 minuti. Purtroppo l’apparecchio funzionava a batterie, e spesso l’utilizzo di cassette da 120 minuti affaticava il motore di trascinamento sino a provocare rallentamenti del nastro (definiti wow dal tipo di effetto percepito dall’utente) e persino fuoriuscite del supporto magnetico, che andavano irrimediabilmente a danneggiare la cassetta e talvolta anche il riproduttore. Senza parlare dello stress percepito dalla testina magnetica di lettura, che a causa degli scossoni tendeva a perdere l’azimutyh, con drammatico calo delle frequenze acute riprodotte.
Sempre la Sony, stavolta associata alla Philips, decide di migliorare la robustezza e la qualità della sorgente sonora introducendo il CD. Anche in questo caso verranno prodotte unità di riproduzione portatili (a tracolla…) più o meno fedeli e più o meno robuste. Ma il problema è sempre lo stesso: occorre portare con sé la sorgente audio (i “dischetti) e il lettore.

Alla fine degli Anni Ottanta, l’Italiano Leonardo Chiariglione sviluppa lo standard MP3. Qesto standard consente di ridurre drasticamente il “peso” (in bytes) di un file audio, a scapito di una (minima) perdita di qualità del programma musicale. Questo significa che se un CD poteva contenere 74 minuti di musica “non compressa”, al massimo una quindicina di brani, con il formato MP3 il numero di brani contenuti poteva tranquillamente superare i 200 titoli. E scusate se è poco. Certo, restava sempre il problema di portartsi dietro almeno un paio di CD contenenti le playlist preferite…
E’ in questo frangente che, trascorsi i canonici 10 anni (siamo alla fine degli Anni Novanta) vengono presentati i primi sistemi di riproduzione digitale di musica compressa (in formato MP3). Se qualcuno sta pensando all’IPod Apple, ha pienamente ragione. L’IPod era un apparecchio leggerissimo, della grandezza di una carta di credito, con una memoria interna accessibile dall’utente per salvare la propria musica digitale senza preoccuparsi del supporto (disco, nastro, CD o altro). Il formato MP3 consentiva la memorizzazione di centinaia di brani digitali, la scelta per autore, titolo o tipo del brano (jazz, pop, rock) attraverso l’utilizzo di “metadati” relativi a ciascun file digitale.
Con l’aumento dell’efficienza dei processori disponibili, la velocità e la qualità dell’offerta musicale crebbe notevolmente.
Il nostro progetto
Oggi è possibile “leggere” ed eseguire file di musica digitale anche attraverso un computer (o magari un Raspberry PI Zero, piccolissimo, parco nei consumi ed efficiente). Tutto quel che occorre è una libreria (modulo, in Python) in grado di eseguire la decodifica audio in background e riprodurre l’audio attraverso il sistema utilizzato dal nostro computer.
In tutto merno di 15 righe di Python. Vediamo come fare.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import pygame pygame.mixer.pre_init(frequency = 48000, size = -16, channels = 2, buffer = 512) pygame.mixer.init() pygame.mixer.music.load("music.mp3") pygame.mixer.music.play() while pygame.mixer.music.get_busy(): pass |
Importiamo pygame, il modulo python specializzato nella produone di videogames. Al suo interno sono presenti metodi per la gestione dell’audio, che sfrutteremo a piene mani.
Per prima cosa definiremo un oggetto mixer, utilizzando una serie di parametri legati alla risoluzione audio richiesta (massima frequenza, bit di campionamento, canali stereo, oltre ad un buffer software utile per evitare “buchi” di riproduzione.
Inizializziamo quindi il nostro mixer. Carichiamo il file in formato MP3 che desideriamo riprodurre, ed eseguiamo il metodo .play(). Il ciclo while() controllerà per noi la continuità della riproduzione, sin quando il file sarà stato completamente eseguito; infine, il controllo viene tornato all’utente. Per bloccare la riproduzione, Control-C.
Ulteriori sviluppi
Il programma è davvero basico, ma consente all’utente astuto notevoli possibilità di estensione:
- E’ possibile caricare il nostro programma musicale in una lista di riproduzione, ed ascoltare più brani assieme.
- E’ possibile eseguire il sorting dei brani per autore, titolo, lunghezza, qualità
- E’ possibile definire un metodo “shuffling” per rendere random la riproduzione della lista
- E’ possibile utilizzare le funzioni grafiche di pygame e creare una interfaccina GUI
- E’ possibile creare un file di lancio batch con liste differenti, e lanciarlo in automatico ad una certa ora.
…e così via…
Fateci saapere come avete esteso le capacità di questo programma: pubblicheremo le idee più interressanti.
Iscriviti ai nostri gruppi Telegram
Link utili
- Arduino UNO R3
- Elegoo UNO R3
- Arduino Starter Kit per principianti
- Elegoo Advanced Starter Kit
- Arduino Nano
- Raspberry PI 5
- Raspberry PI 400
- Raspberry PI Pico
- Programmiamo il Pico