Obsah:
2025 Autor: John Day | [email protected]. Naposledy změněno: 2025-01-13 06:57
Vzhledem ke zvýšené prevalenci rychlých mikrokontrolérů, jako jsou ESP32 a ARM řady M, již dekódování MP3 nemusí provádět specializovaný hardware. Dekódování lze nyní provádět softwarově.
Z Earlephilhower je k dispozici skvělá knihovna, která ukazuje, jak dekódovat širokou škálu zvukových souborů a přehrávat je na mikrokontrolérech ESP. Inspirován tímto jsem upravil část kódu k vytvoření modulární metody čtení souborů MP3 na mikrokontrolérech.
Doufám, že tato metoda bude dostatečně obecná pro použití na jakémkoli dostatečně rychlém mikrokontroléru (nejen na desce ESP32), ale zatím jsem testoval pouze na ESP32.
Zásoby
Jak jsem již řekl, doufám, že tato metoda bude fungovat pro jakýkoli rychlý mikrokontrolér, ale nemusí. K replikaci mých výsledků tedy budete potřebovat:
- Deska ESP32
- Breakout deska SD
- SD karta
- Propojovací dráty
- prkénko
- kabel micro USB (pro nahrávání skici)
- Arduino IDE
Krok 1: Rozložení Breadboardu
Umístěte ESP32 a SD kartu na prkénko.
Krok 2: Zapojení karty SD
Připojení karty SD (ESP32 SD breakout) je následující:
GND GND
3v3 VDD
23 DI (MOSI)
19 DO (MISO)
18 SCLK
5 CS
Upozorňujeme, že tato připojení se budou lišit, pokud používáte jiný mikrokontrolér.
Krok 3: Softwarové knihovny
pokud nemáte nainstalovaný ESP-IDF, přejděte na jejich web a nainstalujte jej.
Poté nainstalujte knihovnu mikrodekodérů. To lze provést stažením úložiště a umístěním do složky Knihovny Arduino. Knihovna mikrodekodérů aktuálně podporuje soubory.wav a.mp3.
Bez ohledu na formát je ke každé třídě přidruženo několik běžných metod, které jsou popsány v níže uvedeném kódu. Mezi ně patří získání některých metadat souborů a jejich tisk na sériový monitor.
#include "SD.h" // vstup
#include "mp3.h" // dekodér #include "pcm.h" // kontejner surových zvukových dat mp3 MP3; neplatné nastavení () {Serial.begin (115200); // Nastavení Serial SD.begin (); // Nastavit připojení SD Soubor souboru = SD.open ("/cc.mp3"); // Otevřete soubor MP3 MP3.begin (soubor); // řekněte třídě MP3, jaký soubor má zpracovat MP3.getMetadata (); // získejte metadata Serial.print ("Bity na vzorek:"); Serial.println (MP3.bitsPerSample); // tisk bitů na vzorek Serial.print ("Sample Rate:"); Serial.println (MP3. Fs); // a vzorkovací frekvence} void loop () {}
Krok 4: Vykreslení dat MP3 na sériový monitor
Pomocí níže uvedeného kódu můžete vykreslit některá zvuková data na sériovém monitoru. To bude velmi pomalé, ale ukáže vám, jak používat knihovnu MP3. Rovněž převzorkuje data o faktor 16, takže když jsou data vykreslena, vypadá jako zvukový průběh. Tento kód je převzat z příkladu SPI_MP3_Serial.ino, který je dodáván s knihovnou mikrodekodérů. Samozřejmě, při pohybu vpřed budete chtít tato zvuková data nějak přehrát, ale to je téma jiné instrukce.
#include "SD.h" // vstup
#include "mp3.h" // dekodér mp3 MP3; // Třída MP3 pcm audio; // nastavení neplatných zvukových dat () {Serial.begin (115200); // Nastavení Serial SD.begin (); // Nastavit připojení SD Soubor souboru = SD.open ("/cc.mp3"); // Otevřete soubor MP3 MP3.begin (soubor); // Předání souboru třídě MP3} void loop () {audio = MP3.decode (); // Dekódování zvukových dat do třídy pcm / * ve zvuku je 32 vzorků. Prokládaný (16 vlevo a 16 vpravo) *, ale v každém kanálu budeme vykreslovat pouze první datový bod. * Toto efektivně downampluje data o faktor 16 (pouze pro * prohlížení průběhu) */ Serial.print (audio.interleaved [0]); // levý kanál Serial.print (""); Serial.println (audio.interleaved [1]); // pravý kanál}