Innholdsfortegnelse:
2025 Forfatter: John Day | [email protected]. Sist endret: 2025-01-13 06:58
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
Plasser ESP32 og SD -kortbrudd på brødbrettet.
Trinn 2: Koble til 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
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}