Sommario:
2025 Autore: John Day | [email protected]. Ultima modifica: 2025-01-13 06:57
A causa della maggiore prevalenza di microcontrollori veloci come ESP32 e la decodifica MP3 della serie ARM M non è più necessario che venga eseguita da hardware specializzato. La decodifica può ora essere eseguita nel software.
C'è una grande libreria disponibile da Earlephilhower che mostra come decodificare un'ampia varietà di file audio e riprodurli su microcontrollori ESP. Ispirato da ciò, ho adattato parte del codice per creare un metodo modulare di lettura di file MP3 su microcontrollori.
La mia speranza è che questo metodo sia abbastanza generico per l'uso su qualsiasi microcontrollore abbastanza veloce (non solo una scheda ESP32) ma per ora ho testato solo su un ESP32.
Forniture
Come ho detto prima, spero che questo metodo funzioni per qualsiasi microcontrollore veloce, ma potrebbe non essere così. Pertanto per replicare i miei risultati avrai bisogno di:
- Una scheda ESP32
- Scheda breakout SD
- scheda SD
- Cavi per ponticelli
- tagliere
- cavo micro USB (per caricare lo schizzo)
- Arduino IDE
Passaggio 1: stendere il tagliere
Posiziona ESP32 e la scheda SD sulla breadboard.
Passaggio 2: cablaggio della scheda SD
Le connessioni della scheda SD (breakout SD ESP32) sono le seguenti:
GND GND
3v3 VDD
23 DI (MOSI)
19 DO (MISO)
18 SCLK
5 CS
Si prega di notare che queste connessioni saranno diverse se si utilizza un microcontrollore diverso.
Passaggio 3: le librerie software
se non hai installato ESP-IDF, vai sul loro sito Web e installalo.
Quindi installa la libreria del microdecoder. Puoi farlo scaricando il repository e inserendolo nella cartella Librerie Arduino. La libreria del microdecoder attualmente supporta file.wav e.mp3.
Indipendentemente dal formato, esistono alcuni metodi comuni associati a ciascuna classe e sono trattati nel codice seguente. Questi includono ottenere alcuni metadati dei file e stamparli sul monitor seriale.
#include "SD.h" // input
#include "mp3.h" // decoder #include "pcm.h" // contenitore di dati audio non elaborati mp3 MP3; void setup() { Serial.begin(115200); // Configura SD.begin(); // Imposta connessione SD File file = SD.open("/cc.mp3"); // Apri un file MP3 MP3.begin(file); // indica alla classe MP3 quale file elaborare MP3.getMetadata(); // ottiene i metadati Serial.print("Bits per Sample: "); Serial.println(MP3.bitsPerSample); // stampa bit per campione Serial.print("Sample Rate: "); Serial.println(MP3. Fs); // e frequenza di campionamento } void loop() { }
Passaggio 4: tracciare i dati MP3 sul monitor seriale
Con il codice qui sotto puoi tracciare alcuni dati audio sul monitor seriale. Questo sarà molto lento ma ti mostrerà come usare la libreria MP3. Inoltre, esegue il downsampling dei dati di un fattore di 16 in modo che quando i dati vengono tracciati assomiglino a una forma d'onda audio. Questo codice è tratto dall'esempio SPI_MP3_Serial.ino fornito con la libreria del microdecoder. Ovviamente, andando avanti vorrai riprodurre questi dati audio in qualche modo, ma questo è l'argomento di un altro istruibile.
#include "SD.h" // input
#include "mp3.h" // decodifica mp3 MP3; // Audio pcm di classe MP3; // dati audio grezzi void setup() { Serial.begin(115200); // Configura SD.begin(); // Imposta connessione SD File file = SD.open("/cc.mp3"); // Apri un file MP3 MP3.begin(file); // Passa il file alla classe MP3 } void loop() { audio = MP3.decode(); // Decodifica i dati audio nella classe pcm /* ci sono 32 campioni in audio.interleaved (16 a sinistra e 16 a destra) * ma tracceremo solo il primo punto dati in ogni canale. * Questo riduce efficacemente i dati di un fattore 16 (per * visualizzare solo la forma d'onda) */ Serial.print(audio.interleaved[0]); // canale sinistro Serial.print(" "); Serial.println(audio.interleaved[1]); //canale destro}