Оглавление:

Библиотека Arduino для декодирования MP3: 4 шага
Библиотека Arduino для декодирования MP3: 4 шага

Видео: Библиотека Arduino для декодирования MP3: 4 шага

Видео: Библиотека Arduino для декодирования MP3: 4 шага
Видео: SH MP3 - модуль MP3 плеера для устройств Arduino 2024, Ноябрь
Anonim
Библиотека Arduino для декодирования MP3
Библиотека Arduino для декодирования MP3
Библиотека Arduino для декодирования MP3
Библиотека Arduino для декодирования MP3

Из-за все большего распространения быстрых микроконтроллеров, таких как ESP32 и ARM M series, декодирование MP3 больше не требуется с помощью специального оборудования. Теперь декодирование можно производить в программном обеспечении.

От Earlephilhower доступна отличная библиотека, которая показывает, как декодировать широкий спектр аудиофайлов и воспроизводить их на микроконтроллерах ESP. Вдохновленный этим, я адаптировал часть кода для создания модульного метода чтения файлов MP3 на микроконтроллерах.

Я надеюсь, что этот метод будет достаточно универсальным для использования на любом достаточно быстром микроконтроллере (не только на плате ESP32), но на данный момент я тестировал только на ESP32.

Запасы

Как я уже сказал, я надеюсь, что этот метод будет работать с любым быстрым микроконтроллером, но может и не работать. Поэтому для тиражирования моих результатов вам понадобятся:

  • Плата ESP32
  • Коммутационная плата SD
  • SD Card
  • Провода перемычки
  • макет
  • кабель micro USB (для загрузки скетча)
  • IDE Arduino

Шаг 1: разметка макета

Макет макетной платы
Макет макетной платы

Поместите разъем для ESP32 и SD-карты на макетную плату.

Шаг 2: Подключение SD-карты

Подключение SD-карты
Подключение SD-карты

Подключения SD-карты (ESP32 SD breakout) следующие:

GND GND

3v3 VDD

23 DI (MOSI)

19 ДО (MISO)

18 SCLK

5 CS

Обратите внимание, что эти подключения будут другими, если вы используете другой микроконтроллер.

Шаг 3. Библиотеки программного обеспечения

если у вас не установлен ESP-IDF, перейдите на их веб-сайт и установите его.

Затем установите библиотеку микродекодера. Вы можете сделать это, загрузив репозиторий и поместив его в папку с библиотеками Arduino. Библиотека микродекодера в настоящее время поддерживает файлы.wav и.mp3.

Независимо от формата, с каждым классом связано несколько общих методов, которые описаны в приведенном ниже коде. К ним относятся получение некоторых метаданных файлов и их печать на последовательном мониторе.

#include "SD.h" // ввод

#include "mp3.h" // декодер #include "pcm.h" // контейнер сырых аудиоданных mp3 MP3; void setup () {Serial.begin (115200); // Настраиваем Serial SD.begin (); // Настраиваем SD-соединение File file = SD.open ("/ cc.mp3"); // Открываем MP3-файл MP3.begin (file); // сообщаем классу MP3, какой файл обрабатывать MP3.getMetadata (); // получаем метаданные Serial.print ("Bits per Sample:"); Serial.println (MP3.bitsPerSample); // печатаем бит на выборку Serial.print ("Sample Rate:"); Serial.println (MP3. Fs); // и частота дискретизации} void loop () {}

Шаг 4: отобразите данные MP3 на последовательном мониторе

Отображение данных MP3 на последовательном мониторе
Отображение данных MP3 на последовательном мониторе

С помощью приведенного ниже кода вы можете отобразить некоторые аудиоданные на последовательном мониторе. Это будет очень медленно, но покажет вам, как использовать библиотеку MP3. Он также выполняет субдискретизацию данных в 16 раз, так что при нанесении данных на график они выглядят как звуковая волна. Этот код взят из примера SPI_MP3_Serial.ino, который поставляется с библиотекой микродекодера. Конечно, в дальнейшем вам захочется как-нибудь воспроизвести эти аудиоданные, но это тема другого руководства.

#include "SD.h" // ввод

#include "mp3.h" // декодер mp3 MP3; // Класс MP3 pcm audio; // необработанные аудиоданные void setup () {Serial.begin (115200); // Настраиваем Serial SD.begin (); // Настраиваем SD-соединение File file = SD.open ("/ cc.mp3"); // Открываем MP3-файл MP3.begin (file); // Передаем файл в класс MP3} void loop () {audio = MP3.decode (); // Декодирование аудиоданных в класс pcm / * в audio.interleaved 32 отсчета (16 слева и 16 справа) *, но мы собираемся построить только первую точку данных в каждом канале. * Это эффективно понижает дискретизацию данных в 16 раз (* только для просмотра формы сигнала) * / Serial.print (audio.interleaved [0]); // левый канал Serial.print (""); Serial.println (audio.interleaved [1]); // правый канал}

Рекомендуемые: