Cuprins:
2025 Autor: John Day | [email protected]. Modificat ultima dată: 2025-01-13 06:58
Datorită prevalenței crescute a microcontrolerelor rapide, cum ar fi ESP32 și seria ARM M, decodarea MP3 nu mai este necesară pentru a fi făcută de hardware specializat. Decodarea se poate face acum în software.
Există o bibliotecă excelentă disponibilă de la earlephilhower care arată cum să decodezi o mare varietate de fișiere audio și să le joci pe microcontrolere ESP. Inspirat de acest lucru, am adaptat o parte din cod pentru a crea o metodă modulară de citire a fișierelor MP3 pe microcontrolere.
Speranța mea este că această metodă va fi suficient de generică pentru a fi utilizată pe orice microcontroler suficient de rapid (nu doar pe o placă ESP32), dar de acum am testat doar pe un ESP32.
Provizii
După cum am spus mai înainte, sper că această metodă va funcționa pentru orice microcontroler rapid, dar poate că nu. Prin urmare, pentru a reproduce rezultatele mele, veți avea nevoie de:
- O placa ESP32
- Placă SD Breakout
- card SD
- Sârme jumper
- panou de masă
- cablu micro USB (pentru încărcarea schiței)
- IDE Arduino
Pasul 1: așezarea panoului de calcul
Așezați ESP32 și cardul SD breakout pe panou.
Pasul 2: Cablarea cardului SD
Conexiunile cardului SD (ESP32 SD breakout) sunt următoarele:
GND GND
3v3 VDD
23 DI (MOSI)
19 DO (MISO)
18 SCLK
5 CS
Vă rugăm să rețineți că aceste conexiuni vor fi diferite dacă utilizați un microcontroler diferit.
Pasul 3: Bibliotecile software
dacă nu aveți ESP-IDF instalat pe site-ul lor și instalați-l.
Apoi instalați biblioteca microdecoder. Puteți face acest lucru descărcând depozitul și plasându-l în folderul Arduino Libraries. Biblioteca de microdecodare acceptă în prezent fișiere.wav și.mp3.
Indiferent de format, există câteva metode comune asociate fiecărei clase și sunt acoperite în codul de mai jos. Acestea includ obținerea unor metadate de fișiere și imprimarea lor pe monitorul serial.
#includeți „SD.h” // intrare
#include "mp3.h" // decoder #include "pcm.h" // container de date audio brute mp3 MP3; void setup () {Serial.begin (115200); // Configurare Serial SD.begin (); // Configurare conexiune SD Fișier fișier = SD.open ("/ cc.mp3"); // Deschideți un fișier MP3 MP3.begin (fișier); // spuneți clasei MP3 ce fișier să proceseze MP3.getMetadata (); // obțineți metdadatele Serial.print ("Bits per Sample:"); Serial.println (MP3.bitsPerSample); // imprimați biți pe eșantion Serial.print ("Sample Rate:"); Serial.println (MP3. Fs); // și rata de eșantionare} void loop () {}
Pasul 4: Plasați date MP3 pe monitorul serial
Cu codul de mai jos puteți parcela câteva date audio pe monitorul serial. Acest lucru va fi foarte lent, dar vă va arăta cum să utilizați biblioteca MP3. De asemenea, reduce eșantionarea datelor cu un factor de 16, astfel încât atunci când datele sunt reprezentate grafic să arate ca o formă de undă audio. Acest cod este preluat din exemplul SPI_MP3_Serial.ino care vine cu biblioteca de microdecoder. Desigur, înainte, veți dori să redați cumva aceste date audio, dar acesta este subiectul unui alt instructable.
#includeți „SD.h” // intrare
#include "mp3.h" // decodor mp3 MP3; // MP3 Class pcm audio; // configurare nulă a datelor audio brute () {Serial.begin (115200); // Configurare Serial SD.begin (); // Configurare conexiune SD Fișier fișier = SD.open ("/ cc.mp3"); // Deschideți un fișier MP3 MP3.begin (fișier); // Treceți fișierul la clasa MP3} void loop () {audio = MP3.decode (); // Decodează datele audio în clasa pcm / * există 32 de eșantioane în audio.interleaved (16 stânga și 16 dreapta) *, dar vom urmări doar primul punct de date din fiecare canal. * Aceasta reduce în mod eficient datele cu un factor de 16 (pentru * vizualizarea numai a formei de undă) * / Serial.print (audio.interleaved [0]); // canal stâng Serial.print (""); Serial.println (audio.interleaved [1]); // canal dreapta}