Innholdsfortegnelse:

Arduino -bibliotek for MP3 -dekoding: 4 trinn
Arduino -bibliotek for MP3 -dekoding: 4 trinn

Video: Arduino -bibliotek for MP3 -dekoding: 4 trinn

Video: Arduino -bibliotek for MP3 -dekoding: 4 trinn
Video: Control Position and Speed of Stepper motor with L298N module using Arduino 2024, Juli
Anonim
Arduino -bibliotek for MP3 -dekoding
Arduino -bibliotek for MP3 -dekoding
Arduino -bibliotek for MP3 -dekoding
Arduino -bibliotek for MP3 -dekoding

På grunn av den økte forekomsten av raske mikrokontrollere som ESP32 og ARM M -serien, er MP3 -dekoding ikke lenger nødvendig for spesialutstyr. Avkodingen kan nå gjøres i programvare.

Det er et flott bibliotek tilgjengelig fra earlephilhower som viser hvordan du kan dekode et stort utvalg av lydfiler og spille dem på ESP -mikrokontrollere. Inspirert av dette tilpasset jeg noe av koden for å lage en modulær metode for å lese MP3 -filer på mikrokontrollere.

Mitt håp er at denne metoden vil være generisk nok til bruk på en hurtig nok mikrokontroller (ikke bare et ESP32 -kort), men foreløpig har jeg bare testet på en ESP32.

Rekvisita

Som jeg sa før, håper jeg at denne metoden vil fungere for alle raske mikrokontroller, men det er det kanskje ikke. Derfor trenger du for å replikere resultatene mine:

  • Et ESP32 -kort
  • SD breakout board
  • SD kort
  • Jumper Wires
  • brødbrett
  • mikro -USB -kabel (for å laste opp skisse)
  • Arduino IDE

Trinn 1: Legge ut brødbrettet

Legge ut brødbrettet
Legge ut brødbrettet

Plasser ESP32 og SD -kortbrudd på brødbrettet.

Trinn 2: Koble til SD -kortet

Kabling av SD -kortet
Kabling av SD -kortet

SD -korttilkoblingene (ESP32 SD -breakout) er som følger:

GND GND

3v3 VDD

23 DI (MOSI)

19 DO (MISO)

18 SCLK

5 CS

Vær oppmerksom på at disse tilkoblingene vil være forskjellige hvis du bruker en annen mikrokontroller.

Trinn 3: Programvarebibliotekene

hvis du ikke har ESP-IDF installert, gå til nettstedet deres og installer det.

Installer deretter mikrodekoderbiblioteket. Du kan gjøre dette ved å laste ned depotet og plassere det i Arduino Libraries -mappen. Mikrodekoderbiblioteket støtter for tiden.wav- og.mp3 -filer.

Uansett format er det noen få vanlige metoder knyttet til hver klasse, og de er dekket i koden nedenfor. Disse inkluderer å få noen filmetadata og skrive dem ut på den serielle skjermen.

#include "SD.h" // input

#include "mp3.h" // decoder #include "pcm.h" // raw audio data container mp3 MP3; ugyldig oppsett () {Serial.begin (115200); // Setup Serial SD.begin (); // Oppsett SD -tilkobling Filfil = SD.open ("/cc.mp3"); // Åpne en MP3 -fil MP3.begin (fil); // fortell MP3 -klassen hvilken fil som skal behandles MP3.getMetadata (); // få metdadata Serial.print ("Bits per Sample:"); Serial.println (MP3.bitsPerSample); // skrive ut biter per prøve Serial.print ("Sample Rate:"); Serial.println (MP3. Fs); // og sample rate} void loop () {}

Trinn 4: Plott MP3 -data på den serielle skjermen

Plott MP3 -data på den serielle skjermen
Plott MP3 -data på den serielle skjermen

Med koden nedenfor kan du plotte noen lyddata på den serielle skjermen. Dette vil være veldig sakte, men vil vise deg hvordan du bruker MP3 -biblioteket. Det nedprøver også dataene med en faktor 16, slik at når dataene plottes ut, ser det ut som en lydbølgeform. Denne koden er hentet fra eksemplet SPI_MP3_Serial.ino som følger med mikrodekoderbiblioteket. Selvfølgelig, fremover vil du spille disse lyddata på en eller annen måte, men det er temaet for en annen instruerbar.

#include "SD.h" // input

#inkludere "mp3.h" // dekoder mp3 MP3; // MP3 -klasse pcm -lyd; // oppsett av ugyldige lyddata () {Serial.begin (115200); // Setup Serial SD.begin (); // Oppsett SD -tilkobling Filfil = SD.open ("/cc.mp3"); // Åpne en MP3 -fil MP3.begin (fil); // Send fil til MP3 -klasse} void loop () {audio = MP3.decode (); // Dekode lyddata til pcm klasse / * det er 32 prøver i audio.interleaved (16 venstre og 16 høyre) * men vi skal bare plotte det første datapunktet i hver kanal. * Dette nedprøver effektivt dataene med en faktor 16 (for * bare å se bølgeformen) */ Serial.print (audio.interleaved [0]); // venstre kanal Serial.print (""); Serial.println (audio.interleaved [1]); // høyre kanal}

Anbefalt: