Turinys:

„Arduino“biblioteka MP3 dekodavimui: 4 žingsniai
„Arduino“biblioteka MP3 dekodavimui: 4 žingsniai

Video: „Arduino“biblioteka MP3 dekodavimui: 4 žingsniai

Video: „Arduino“biblioteka MP3 dekodavimui: 4 žingsniai
Video: Как использовать SSD1306 128x32 OLED-дисплей I2C с кодом Arduino 2024, Lapkritis
Anonim
„Arduino“biblioteka MP3 dekodavimui
„Arduino“biblioteka MP3 dekodavimui
„Arduino“biblioteka MP3 dekodavimui
„Arduino“biblioteka MP3 dekodavimui

Dėl padidėjusio greitų mikrovaldiklių, tokių kaip ESP32 ir ARM M serijos MP3, dekodavimo nebereikia specialios aparatūros. Dabar dekodavimą galima atlikti programine įranga.

„Earlephilhower“yra puiki biblioteka, kurioje parodyta, kaip iššifruoti įvairius garso failus ir juos paleisti naudojant ESP mikrovaldiklius. Įkvėptas to, pritaikiau dalį kodo, kad sukurtų modulinį MP3 failų skaitymo metodą mikrokontroleriuose.

Tikiuosi, kad šis metodas bus pakankamai universalus, kad jį būtų galima naudoti bet kokiame pakankamai greitam mikrovaldikliui (ne tik ESP32 plokštėje), bet kol kas išbandžiau tik su ESP32.

Prekės

Kaip jau sakiau anksčiau, tikiuosi, kad šis metodas veiks bet kuriam greitam mikrovaldikliui, bet gali ne. Taigi, norėdami pakartoti mano rezultatus, jums reikės:

  • ESP32 plokštė
  • SD pertraukimo lenta
  • SD kortelė
  • Trumpieji laidai
  • Bandomoji Lenta
  • mikro USB kabelis (eskizui įkelti)
  • „Arduino IDE“

1 žingsnis: Duonos lentos išdėstymas

Duonos lentos išdėstymas
Duonos lentos išdėstymas

Padėkite ESP32 ir SD kortelės pertraukas ant duonos lentos.

2 veiksmas: SD kortelės prijungimas

SD kortelės prijungimas
SD kortelės prijungimas

SD kortelės jungtys (ESP32 SD pertrauka) yra šios:

GND GND

3v3 VDD

23 DI (MOSI)

19 DARYTI (MISO)

18 SCLK

5 CS

Atminkite, kad jei naudojate kitą mikrovaldiklį, šios jungtys bus skirtingos.

3 žingsnis: programinės įrangos bibliotekos

jei neturite įdiegto ESP-IDF, eikite į jų svetainę ir įdiekite ją.

Tada įdiekite mikrodekoderių biblioteką. Tai galite padaryti atsisiųsdami saugyklą ir įdėję ją į aplanką „Arduino Libraries“. Mikrodekoderių biblioteka šiuo metu palaiko.wav ir.mp3 failus.

Nepriklausomai nuo formato, yra keletas bendrų metodų, susijusių su kiekviena klase, ir jie aprašyti toliau pateiktame kode. Tai apima kai kurių failų metaduomenų gavimą ir spausdinimą į nuoseklųjį monitorių.

#include "SD.h" // įvestis

#include "mp3.h" // dekoderis #include "pcm.h" // neapdoroto garso duomenų konteineris mp3 MP3; void setup () {Serial.begin (115200); // Sąrankos serijos SD.begin (); // Nustatyti SD ryšį Failo failas = SD.open ("/cc.mp3"); // Atidaryti MP3 failą MP3.begin (failas); // nurodykite MP3 klasei, kokį failą apdoroti MP3.getMetadata (); // gauti metaduomenis Serial.print ("Bits per Sample:"); Serial.println (MP3.bitsPerSample); // spausdinti bitus per pavyzdį Serial.print ("Sample Rate:"); Serial.println (MP3. Fs); // ir mėginio dažnis} void loop () {}

4 žingsnis: Nubrėžkite MP3 duomenis serijiniame monitoriuje

Nubraižykite MP3 duomenis serijiniame monitoriuje
Nubraižykite MP3 duomenis serijiniame monitoriuje

Naudodami toliau pateiktą kodą, serijiniame monitoriuje galite nubraižyti kai kuriuos garso duomenis. Tai bus labai lėta, bet parodys, kaip naudotis MP3 biblioteka. Jis taip pat sumažina duomenų pavyzdžius 16 kartų, kad nubraižant duomenis jie atrodytų kaip garso bangos forma. Šis kodas paimtas iš pavyzdžio SPI_MP3_Serial.ino, kuris pateikiamas kartu su mikrodekoderių biblioteka. Žinoma, judėdami į priekį norėsite kažkaip paleisti šiuos garso duomenis, tačiau tai yra kita pamokoma tema.

#include "SD.h" // įvestis

#include "mp3.h" // dekoderis mp3 MP3; // MP3 klasė pcm audio; // neapdorotų garso duomenų void setup () {Serial.begin (115200); // Sąrankos serijos SD.begin (); // Nustatyti SD ryšį Failo failas = SD.open ("/cc.mp3"); // Atidaryti MP3 failą MP3.begin (failas); // Perduoti failą MP3 klasei} void loop () {audio = MP3.decode (); // Garso duomenų dekodavimas į pcm klasę / * garso įraše yra 32 pavyzdžiai.interleaved (16 kairėje ir 16 dešinėje) *, bet mes ketiname nubrėžti tik pirmąjį kiekvieno kanalo duomenų tašką. * Tai efektyviai sumažina duomenų koeficientą 16 kartų (* tik bangos formai peržiūrėti) */ Serial.print (garso įrašas. // kairysis kanalas Serial.print (""); Serial.println (audio.interleaved [1]); // dešinysis kanalas}

Rekomenduojamas: