Kazalo:
2025 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2025-01-13 06:58
Zaradi povečane razširjenosti hitrih mikrokrmilnikov, kot sta ESP32 in ARM M serije, dekodiranja MP3 ni potrebno več izvajati s specializirano strojno opremo. Dekodiranje je zdaj mogoče izvesti v programski opremi.
Earlephilhower ponuja veliko knjižnico, ki prikazuje, kako dekodirati najrazličnejše zvočne datoteke in jih predvajati na mikrokontrolerjih ESP. Navdihnjen s tem sem prilagodil nekaj kode za ustvarjanje modularne metode branja datotek MP3 na mikrokrmilnikih.
Upam, da bo ta metoda dovolj splošna za uporabo na katerem koli dovolj hitrem mikrokrmilniku (ne le na plošči ESP32), vendar sem zaenkrat preizkusil le na ESP32.
Zaloge
Kot sem že rekel, upam, da bo ta metoda delovala za kateri koli hitri mikrokrmilnik, vendar morda ne. Zato boste za ponovitev mojih rezultatov potrebovali:
- Plošča ESP32
- Odklopna plošča SD
- sD kartice
- Mostične žice
- deska
- kabel mikro USB (za nalaganje skice)
- Arduino IDE
1. korak: Polaganje ploščice
ESP32 in kartico SD postavite na mizo.
2. korak: Ožičenje kartice SD
Povezave s kartico SD (prekinitev ESP32 SD) so naslednje:
GND GND
3v3 VDD
23 DI (MOSI)
19 DO (MISO)
18 SCLK
5 CS
Upoštevajte, da bodo te povezave drugačne, če uporabljate drug mikrokrmilnik.
3. korak: Knjižnice programske opreme
če nimate nameščenega ESP-IDF, pojdite na njihovo spletno mesto in ga namestite.
Nato namestite knjižnico mikrodekoderjev. To lahko storite tako, da prenesete skladišče in ga postavite v mapo Arduino Libraries. Knjižnica mikrodekoderjev trenutno podpira datoteke.wav in.mp3.
Ne glede na obliko je za vsak razred povezanih nekaj skupnih metod, ki so zajete v spodnji kodi. Ti vključujejo pridobivanje metapodatkov datotek in njihovo tiskanje na serijski monitor.
#include "SD.h" // input
#include "mp3.h" // dekoder #include "pcm.h" // vsebnik surovih avdio podatkov mp3 MP3; void setup () {Serial.begin (115200); // Nastavitev serijske SD.begin (); // Nastavitev povezave SD Datoteka = SD.open ("/cc.mp3"); // Odprite datoteko MP3 MP3.begin (datoteka); // povejte razredu MP3, katero datoteko naj obdela MP3.getMetadata (); // dobimo metdadata Serial.print ("Bits per Sample:"); Serial.println (MP3.bitsPerSample); // tiskanje bitov na vzorec Serial.print ("Sample Rate:"); Serial.println (MP3. Fs); // in vzorčenje} void loop () {}
4. korak: na serijski monitor vnesite podatke MP3
S spodnjo kodo lahko na serijski monitor vnesete nekaj zvočnih podatkov. To bo zelo počasno, vendar vam bo pokazalo, kako uporabljati knjižnico MP3. Podatke tudi zmanjša za faktor 16, tako da so podatki, ko so narisani, podobni zvočni valovni obliki. Ta koda je vzeta iz primera SPI_MP3_Serial.ino, ki je priložen knjižnici mikrodekoderjev. Seveda boste v prihodnje želeli nekako predvajati te zvočne podatke, vendar je to tema drugačnih navodil.
#include "SD.h" // input
#include "mp3.h" // dekoder mp3 MP3; // avdio MP3 razreda pcm; // surovi zvočni podatki void setup () {Serial.begin (115200); // Nastavitev serijske SD.begin (); // Nastavitev povezave SD Datoteka = SD.open ("/cc.mp3"); // Odprite datoteko MP3 MP3.begin (datoteka); // Prenesite datoteko v razred MP3} void loop () {audio = MP3.decode (); // dekodiramo zvočne podatke v razred pcm / * v zvoku je 32 vzorcev (16 levo in 16 desno) *, vendar bomo narisali samo prvo podatkovno točko v vsakem kanalu. * To učinkovito zniža vzorce podatkov za faktor 16 (samo za * ogled valovne oblike) */ Serial.print (audio.interleaved [0]); // levi kanal Serial.print (""); Serial.println (audio.interleaved [1]); // desni kanal}