Obsah:

Knihovna Arduino pro dekódování MP3: 4 kroky
Knihovna Arduino pro dekódování MP3: 4 kroky

Video: Knihovna Arduino pro dekódování MP3: 4 kroky

Video: Knihovna Arduino pro dekódování MP3: 4 kroky
Video: 3D printed Claptrap from Borderlands - Arduino LED + audio player tutorial 2024, Listopad
Anonim
Knihovna Arduino pro dekódování MP3
Knihovna Arduino pro dekódování MP3
Knihovna Arduino pro dekódování MP3
Knihovna Arduino pro dekódování MP3

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

Rozložení prkénka
Rozložení prkénka

Umístěte ESP32 a SD kartu na prkénko.

Krok 2: Zapojení karty SD

Zapojení karty SD
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

Vykreslete data MP3 na sériový monitor
Vykreslete data 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}

Doporučuje: