Inhoudsopgave:
- Benodigdheden
- Stap 1: Het breadboard neerleggen
- Stap 2: Bedrading van de SD-kaart
- Stap 3: De softwarebibliotheken
- Stap 4: Plot MP3-gegevens op de seriële monitor
Video: Arduino-bibliotheek voor MP3-decodering: 4 stappen
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:15
Door de toegenomen prevalentie van snelle microcontrollers zoals de ESP32 en de ARM M-serie is het decoderen van MP3 niet langer vereist door gespecialiseerde hardware. De decodering kan nu in software worden gedaan.
Er is een geweldige bibliotheek beschikbaar van earlephilhower die laat zien hoe een breed scala aan audiobestanden kan worden gedecodeerd en afgespeeld op ESP-microcontrollers. Hierdoor geïnspireerd heb ik een deel van de code aangepast om een modulaire methode te creëren voor het lezen van MP3-bestanden op microcontrollers.
Ik hoop dat deze methode generiek genoeg zal zijn voor gebruik op elke microcontroller die snel genoeg is (niet alleen een ESP32-bord), maar vanaf nu heb ik alleen getest op een ESP32.
Benodigdheden
Zoals ik al eerder zei, hoop ik dat deze methode zal werken voor elke snelle microcontroller, maar misschien niet. Daarom heb je nodig om mijn resultaten te repliceren:
- Een ESP32-bord
- SD breakout-bord
- SD-kaart
- Doorverbindingsdraden
- broodplankje
- micro-USB-kabel (voor het uploaden van schets)
- Arduino IDE
Stap 1: Het breadboard neerleggen
Plaats ESP32 en SD-kaart breakout op het breadboard.
Stap 2: Bedrading van de SD-kaart
De SD-kaartaansluitingen (ESP32 SD breakout) zijn als volgt:
GND GND
3v3 VDD
23 DI (MOSI)
19 DOEN (MISO)
18 SCLK
5 CS
Houd er rekening mee dat deze verbindingen anders zijn als u een andere microcontroller gebruikt.
Stap 3: De softwarebibliotheken
als je de ESP-IDF niet hebt geïnstalleerd, ga dan naar hun website en installeer het.
Installeer vervolgens de microdecoder-bibliotheek. U kunt dit doen door de repository te downloaden en in uw Arduino Libraries-map te plaatsen. De microdecoder-bibliotheek ondersteunt momenteel.wav- en.mp3-bestanden.
Ongeacht het formaat zijn er een paar veelvoorkomende methoden die aan elke klasse zijn gekoppeld en deze worden behandeld in de onderstaande code. Deze omvatten het ophalen van enkele metagegevens van de bestanden en het afdrukken naar de seriële monitor.
#include "SD.h" // invoer
#include "mp3.h" // decoder #include "pcm.h" // raw audio data container mp3 MP3; void setup() { Serial.begin(115200); // Seriële SD instellen.begin(); // SD-verbinding instellen Bestandsbestand = SD.open ("/cc.mp3"); // Open een MP3-bestand MP3.begin(bestand); // vertel de MP3-klasse welk bestand MP3.getMetadata(); // haal de metdadata Serial.print("Bits per Sample: "); Serial.println(MP3.bitsPerSample); // print bits per sample Serial.print("Sample Rate: "); Seriële.println(MP3. Fs); // en sample rate } void loop () { }
Stap 4: Plot MP3-gegevens op de seriële monitor
Met de onderstaande code kunt u enkele audiogegevens plotten op de seriële monitor. Dit gaat erg langzaam, maar laat je zien hoe je de MP3-bibliotheek gebruikt. Het verkleint ook de gegevens met een factor 16, zodat wanneer de gegevens worden geplot, het eruitziet als een audiogolfvorm. Deze code is afkomstig uit het voorbeeld SPI_MP3_Serial.ino dat bij de microdecoder-bibliotheek wordt geleverd. Natuurlijk wil je in de toekomst deze audiogegevens op de een of andere manier afspelen, maar dat is het onderwerp van een andere instructable.
#include "SD.h" // invoer
#include "mp3.h" // decoder mp3 MP3; // MP3-klasse pcm-audio; // onbewerkte audiogegevens void setup () {Serial.begin (115200); // Seriële SD instellen.begin(); // SD-verbinding instellen Bestandsbestand = SD.open ("/cc.mp3"); // Open een MP3-bestand MP3.begin(bestand); // Geef bestand door aan MP3-klasse} void loop () { audio = MP3.decode (); // Decodeer audiogegevens in pcm-klasse /* er zijn 32 samples in audio.interleaved (16 links en 16 rechts) * maar we gaan alleen het eerste gegevenspunt in elk kanaal plotten. * Dit reduceert de data effectief met een factor 16 (om * alleen de golfvorm te bekijken) */ Serial.print(audio.interleaved[0]); // linkerkanaal Serial.print (" "); Serial.println(audio.interleaved[1]); // rechter kanaal}
Aanbevolen:
Installatie voor externe Bluetooth GPS-provider voor Android-apparaten: 8 stappen
Installatie voor externe Bluetooth GPS-provider voor Android-apparaten: deze instructable legt uit hoe u uw eigen externe Bluetooth-compatibele GPS voor uw telefoon kunt maken, wat dan ook voor ongeveer $ 10. Materiaallijst: NEO 6M U-blox GPSHC-05 bluetooth-module Kennis van interface Blutooth Low energy-modulesArdui
Idee voor doe-het-zelf-activiteit voor weerstations voor 12+ jaar: 4 stappen
Idee voor doe-het-zelf-weerstationactiviteit voor 12-plussers: in deze activiteit zullen deelnemers hun weerstation opzetten, de lucht in sturen en de opnames (licht, temperatuur, vochtigheid) in realtime volgen via de Blynk-app. Bovendien leert u hoe u de geregistreerde waarden publiceert
Systeem voor het bewaken van de luchtkwaliteit voor fijnstofverontreiniging: 4 stappen
Systeem voor monitoring van luchtkwaliteit voor fijnstofverontreiniging: INTRO: 1 In dit project laat ik zien hoe ik een deeltjesdetector bouw met dataweergave, databack-up op SD-kaart en IOT. Visueel geeft een neopixels ringdisplay de luchtkwaliteit aan. 2 Luchtkwaliteit is een steeds belangrijker zorg t
Relaisbord voor Arduino voor minder dan $8: 5 stappen
Relaisbord voor Arduino voor minder dan $8.: Hallo vrienden, vandaag ga ik je vertellen hoe je een relaisbord voor Arduino maakt voor minder dan $8. In dit circuit gaan we geen IC of transistor gebruiken. Dus laten we het doen
3.3V Mod voor ultrasone sensoren (bereid HC-SR04 voor 3.3V Logic op ESP32/ESP8266, Particle Photon, enz.): 4 stappen
3.3V Mod voor ultrasone sensoren (bereid HC-SR04 voor 3.3V Logic op ESP32/ESP8266, Particle Photon, enz.): TL;DR: Knip op de sensor het spoor naar de Echo-pin en sluit het opnieuw aan met een spanningsdeler (Echo trace -> 2.7kΩ -> Echo pin -> 4.7kΩ -> GND). Bewerken: Er is enige discussie geweest over de vraag of de ESP8266 daadwerkelijk 5V-tolerant is op GPIO in