Spisu treści:
2025 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2025-01-13 06:58
Ze względu na rosnące rozpowszechnienie szybkich mikrokontrolerów, takich jak ESP32 i seria ARM M, dekodowanie MP3 nie jest już wymagane przez specjalistyczny sprzęt. Dekodowanie można teraz wykonać w oprogramowaniu.
Earlephilhower udostępnia świetną bibliotekę, która pokazuje, jak dekodować szeroką gamę plików audio i odtwarzać je na mikrokontrolerach ESP. Zainspirowany tym zaadaptowałem część kodu, aby stworzyć modułową metodę odczytu plików MP3 na mikrokontrolerach.
Mam nadzieję, że ta metoda będzie wystarczająco ogólna do użycia na każdym wystarczająco szybkim mikrokontrolerze (nie tylko na płycie ESP32), ale jak na razie testowałem tylko na ESP32.
Kieszonkowe dzieci
Jak powiedziałem wcześniej, mam nadzieję, że ta metoda zadziała dla każdego szybkiego mikrokontrolera, ale może nie. Dlatego aby powtórzyć moje wyniki, będziesz potrzebować:
- Płytka ESP32
- Tablica zaciskowa SD
- karta SD
- Przewody połączeniowe
- płytka do krojenia chleba
- kabel micro USB (do wgrania szkicu)
- IDE Arduino
Krok 1: Układanie deski do krojenia chleba
Umieść końcówkę ESP32 i karty SD na płytce stykowej.
Krok 2: Okablowanie karty SD
Połączenia karty SD (przebicie SD ESP32) są następujące:
GND GND
3v3 VDD
23 DI (MOSI)
19 DO (MISO)
18
5 CS
Pamiętaj, że połączenia te będą inne, jeśli używasz innego mikrokontrolera.
Krok 3: Biblioteki oprogramowania
jeśli nie masz zainstalowanego ESP-IDF, przejdź do ich witryny i zainstaluj go.
Następnie zainstaluj bibliotekę mikrodekodera. Możesz to zrobić, pobierając repozytorium i umieszczając je w folderze Arduino Libraries. Biblioteka mikrodekodera obecnie obsługuje pliki.wav i.mp3.
Niezależnie od formatu, istnieje kilka typowych metod powiązanych z każdą klasą i są one omówione w poniższym kodzie. Obejmują one pobranie niektórych metadanych plików i wydrukowanie ich na monitorze szeregowym.
#include "SD.h" // wejście
#include "mp3.h" // dekoder #include "pcm.h" // kontener surowych danych audio mp3 MP3; void setup() { Serial.begin(115200); // Ustaw Serial SD.begin(); // Konfiguracja połączenia SD Plik pliku = SD.open("/cc.mp3"); // Otwórz plik MP3 MP3.begin(plik); // powiedz klasie MP3, jaki plik ma przetworzyć MP3.getMetadata(); // pobierz metdadata Serial.print("Bity na próbkę: "); Serial.println(MP3.bitsPerSample); // wypisz bity na próbkę Serial.print("Częstotliwość próbkowania: "); Serial.println(MP3. Fs); // i częstotliwość próbkowania } void loop() { }
Krok 4: Drukuj dane MP3 na monitorze szeregowym
Za pomocą poniższego kodu możesz wykreślić niektóre dane audio na monitorze szeregowym. Będzie to bardzo powolne, ale pokaże Ci, jak korzystać z biblioteki MP3. Przeprowadza również próbkowanie w dół o współczynnik 16, dzięki czemu po wykreśleniu danych wyglądają one jak fala dźwiękowa. Ten kod pochodzi z przykładu SPI_MP3_Serial.ino, który jest dostarczany z biblioteką mikrodekodera. Oczywiście, idąc dalej, będziesz chciał jakoś odtworzyć te dane audio, ale to jest temat innej instrukcji.
#include "SD.h" // wejście
#include "mp3.h" // dekoder mp3 MP3; // dźwięk pcm klasy MP3; // surowe dane audio void setup() { Serial.begin(115200); // Ustaw Serial SD.begin(); // Konfiguracja połączenia SD Plik pliku = SD.open("/cc.mp3"); // Otwórz plik MP3 MP3.begin(plik); // Przekaż plik do klasy MP3 } void loop() { audio = MP3.decode(); // Dekoduj dane audio do klasy pcm /* w audio.interleaved są 32 próbki (16 po lewej i 16 po prawej) * ale narysujemy tylko pierwszy punkt danych w każdym kanale. * To skutecznie zmniejsza próbkowanie danych o współczynnik 16 (tylko do * przeglądania przebiegu) */ Serial.print(audio.interleaved[0]); // lewy kanał Serial.print(" "); Serial.println(audio.interleaved[1]); // prawy kanał }