Progettiamo un riproduttore audio .MP3 con Python

riproduttore audio

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.

Riproduttore audio

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.

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

Seguici per non perdere le prossime novità!

 

Definire ciò che si è non risulta mai semplice o intuitivo, in specie quando nella vita si cerca costantemente di migliorarsi, di crescere tanto professionalmente quanto emotivamente. Lavoro per contribuire al mutamento dei settori cardine della computer science e per offrire sintesi ragionate e consulenza ad aziende e pubblicazioni ICT, ma anche perche’ ciò che riesco a portare a termine mi dà soddisfazione, piacere. Così come mi piace suonare (sax, tastiere, chitarra), cantare, scrivere (ho pubblicato 350 articoli scientfici e 3 libri sinora, ma non ho concluso ciò che ho da dire), leggere, Adoro la matematica, la logica, la filosofia, la scienza e la tecnologia, ed inseguo quel concetto di homo novus rinascimentale, cercando di completare quelle sezioni della mia vita che ancora appaiono poco ricche.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.