Inhaltsverzeichnis:

Arduino-Bibliothek für die MP3-Decodierung - Gunook
Arduino-Bibliothek für die MP3-Decodierung - Gunook

Video: Arduino-Bibliothek für die MP3-Decodierung - Gunook

Video: Arduino-Bibliothek für die MP3-Decodierung - Gunook
Video: Sound und akustische Signale für deine Projekte mit Arduino und ESP32 2024, Juli
Anonim
Arduino-Bibliothek für die MP3-Decodierung
Arduino-Bibliothek für die MP3-Decodierung
Arduino-Bibliothek für die MP3-Decodierung
Arduino-Bibliothek für die MP3-Decodierung

Aufgrund der zunehmenden Verbreitung von schnellen Mikrocontrollern wie dem ESP32 und der ARM M-Serie muss die MP3-Decodierung nicht mehr von spezieller Hardware durchgeführt werden. Die Dekodierung kann nun in Software erfolgen.

Es gibt eine großartige Bibliothek von earlephilhower, die zeigt, wie man eine Vielzahl von Audiodateien dekodiert und auf ESP-Mikrocontrollern abspielt. Inspiriert davon habe ich einen Teil des Codes angepasst, um eine modulare Methode zum Lesen von MP3-Dateien auf Mikrocontrollern zu erstellen.

Ich hoffe, dass diese Methode generisch genug ist, um auf jedem schnell genug Mikrocontroller (nicht nur auf einem ESP32-Board) verwendet zu werden, aber bis jetzt habe ich nur auf einem ESP32 getestet.

Lieferungen

Wie ich bereits sagte, hoffe ich, dass diese Methode für jeden schnellen Mikrocontroller funktioniert, aber möglicherweise nicht. Um meine Ergebnisse zu replizieren, benötigen Sie daher:

  • Ein ESP32-Board
  • SD-Breakout-Board
  • SD-Karte
  • Überbrückungsdrähte
  • Steckbrett
  • Micro-USB-Kabel (zum Hochladen der Skizze)
  • Arduino-IDE

Schritt 1: Auslegen des Steckbretts

Das Steckbrett auslegen
Das Steckbrett auslegen

Platzieren Sie ESP32 und SD-Karten-Breakout auf dem Steckbrett.

Schritt 2: Verdrahten der SD-Karte

Verkabelung der SD-Karte
Verkabelung der SD-Karte

Die SD-Kartenanschlüsse (ESP32 SD Breakout) sind wie folgt:

GND GND

3v3 VDD

23 DI (MOSI)

19 DO (MISO)

18 SCLK

5 CS

Bitte beachten Sie, dass diese Verbindungen unterschiedlich sind, wenn Sie einen anderen Mikrocontroller verwenden.

Schritt 3: Die Softwarebibliotheken

Wenn Sie ESP-IDF nicht installiert haben, gehen Sie zu deren Website und installieren Sie es.

Installieren Sie dann die Mikrodecoder-Bibliothek. Sie können dies tun, indem Sie das Repository herunterladen und in Ihren Arduino Libraries-Ordner legen. Die Mikrodecoder-Bibliothek unterstützt derzeit.wav- und.mp3-Dateien.

Unabhängig vom Format gibt es für jede Klasse einige gängige Methoden, die im folgenden Code behandelt werden. Dazu gehören das Abrufen einiger Metadaten der Dateien und das Drucken auf den seriellen Monitor.

#include "SD.h" // Eingabe

#include "mp3.h" // Decoder #include "pcm.h" // Audio-Rohdatencontainer mp3 MP3; Void setup () { Serial.begin (115200); // Einrichten der seriellen SD.begin (); // SD-Verbindung einrichten Dateidatei = SD.open("/cc.mp3"); // Öffnen einer MP3-Datei MP3.begin(file); // der MP3-Klasse mitteilen, welche Datei sie verarbeiten soll MP3.getMetadata(); // Holen Sie sich die Metdadaten Serial.print ("Bits pro Sample: "); Serial.println (MP3.bitsPerSample); // Bits pro Probe drucken Serial.print ("Sample Rate: "); Serial.println (MP3. Fs); // und Abtastrate} void loop() {}

Schritt 4: Plotten von MP3-Daten auf dem seriellen Monitor

Plotten von MP3-Daten auf dem seriellen Monitor
Plotten von MP3-Daten auf dem seriellen Monitor

Mit dem folgenden Code können Sie einige Audiodaten auf dem seriellen Monitor darstellen. Dies wird sehr langsam sein, zeigt Ihnen aber, wie Sie die MP3-Bibliothek verwenden. Außerdem werden die Daten um den Faktor 16 heruntergerechnet, sodass die Daten beim Plotten wie eine Audiowellenform aussehen. Dieser Code stammt aus dem Beispiel SPI_MP3_Serial.ino, das mit der Mikrodecoder-Bibliothek geliefert wird. Natürlich möchten Sie diese Audiodaten in Zukunft irgendwie abspielen, aber das ist das Thema eines anderen anweisbaren.

#include "SD.h" // Eingabe

#include "mp3.h" // Decoder mp3 MP3; // MP3-Klasse PCM-Audio; // rohe Audiodaten Void setup () { Serial.begin (115200); // Einrichten der seriellen SD.begin (); // SD-Verbindung einrichten Dateidatei = SD.open("/cc.mp3"); // Öffnen einer MP3-Datei MP3.begin(file); // Datei an MP3-Klasse übergeben aufrechtzuerhalten. Void loop () { Audio = MP3.decode (); // Audiodaten in die PCM-Klasse decodieren /* es gibt 32 Samples in audio.interleaved (16 links und 16 rechts) * aber wir werden nur den ersten Datenpunkt in jedem Kanal zeichnen. * Dies reduziert die Daten effektiv um einen Faktor von 16 (für * nur die Anzeige der Wellenform) */ Serial.print (audio.interleaved [0]); // linker Kanal Serial.print (" "); Serial.println (audio.interleaved[1]); // rechter Kanal }

Empfohlen: