Spisu treści:

Biblioteka Arduino do dekodowania MP3: 4 kroki
Biblioteka Arduino do dekodowania MP3: 4 kroki

Wideo: Biblioteka Arduino do dekodowania MP3: 4 kroki

Wideo: Biblioteka Arduino do dekodowania MP3: 4 kroki
Wideo: Arduino 43: RADIO Z RDS-em 2024, Lipiec
Anonim
Biblioteka Arduino do dekodowania MP3
Biblioteka Arduino do dekodowania MP3
Biblioteka Arduino do dekodowania MP3
Biblioteka Arduino do dekodowania MP3

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

Układanie deski do krojenia chleba
Układanie deski do krojenia chleba

Umieść końcówkę ESP32 i karty SD na płytce stykowej.

Krok 2: Okablowanie karty SD

Okablowanie karty SD
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

Drukuj dane MP3 na monitorze szeregowym
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ł }

Zalecana: