Sommario:
- Forniture
- Passaggio 1: stendere il tagliere
- Passaggio 2: cablaggio della scheda SD
- Passaggio 3: le librerie software
- Passaggio 4: tracciare i dati MP3 sul monitor seriale
Video: Libreria Arduino per la decodifica di MP3: 4 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:00
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}
Consigliato:
Programmare un Arduino usando un altro Arduino per visualizzare un testo scorrevole senza una libreria: 5 passaggi
Programmazione di un Arduino utilizzando un altro Arduino per visualizzare un testo scorrevole senza una libreria: Sony Spresense o Arduino Uno non sono così costosi e non richiedono molta energia. Tuttavia, se il tuo progetto ha limitazioni di potenza, spazio o persino budget, potresti prendere in considerazione l'utilizzo di Arduino Pro Mini. A differenza di Arduino Pro Micro, Arduino Pro Mi
Creare una libreria Arduino per YouTube Sight: 7 passaggi
Creazione di una libreria Arduino per YouTube Sight: Ciao a tutti, ho recentemente creato un servizio chiamato YouTube Sight in grado di estrarre i dati degli abbonati dall'API di YouTube Analytics e fornirti un conteggio degli abbonati più accurato da quando YouTube ha iniziato ad aggregare i risultati. Con esso, ho costruito un esempio
Convertitore di sintesi vocale Arduino utilizzando LM386 - Progetto Arduino Parlante - Libreria Talkie Arduino: 5 passaggi
Convertitore di sintesi vocale Arduino utilizzando LM386 | Progetto Arduino Parlante | Talkie Arduino Library: Ciao ragazzi, in molti progetti richiediamo ad arduino di parlare qualcosa come l'orologio parlante o di dire alcuni dati, quindi in queste istruzioni convertiremo il testo in parlato usando Arduino
Libreria per BMP280 e BME280: 7 passaggi
Libreria per BMP280 e BME280: IntroduzioneNon ho deciso di scrivere questa libreria. "successo" come effetto collaterale di un progetto che ho iniziato che utilizza un BMP280. Quel progetto non è ancora finito, ma penso che la biblioteca sia pronta per condividerla con gli altri. Successivamente ho avuto un ne
Scheda di decodifica e codifica del protocollo NEC a infrarossi: 5 passaggi
Scheda codificatore e decodificatore protocollo NEC a infrarossi: riceve un segnale IR NEC modulato o demodulato grezzo e lo converte in byte che vengono inviati alla porta seriale. Il baud rate seriale è selezionabile tra due velocità predefinite. La modalità di utilizzo predefinita trasmette una sequenza di comandi con byte di framing