Arduino-библиотека для воспроизведения MP3 файлов (со связанными сообщениями и очередями с приоритетами)

Библиотека MP3 плеера

В рамках другого проекта сделал библиотеку для поддержки модуля DFRobot Mini MP3 Player. Работает на Arduino Pro Mini 328p от 5V.
Она основана на драйвере DFPlayer_Mini_Mp3, который предоставляет низкоуровневые функции управления плеером (как обычно, частично глючные, или неподдерживаемые 😃).

Звуки воспроизводятся из mp3-файлов из каталога “mp3” sd-карты, вставленной в модуль плеера. Файлы должны иметь имена в виде номеров Vxxx.mp3, где V = voice (голос) (0…9), а xxx = номер звука (0…999).

Библиотека предоставляет 3 класса:

  • MP3Player - обертка над DFPlayer_Mini_Mp3 для поддержки статуса “занятости” (Busy);
  • SoundMessage - сообщение (внутренний класс, напрямую не используется), состоящее из нескольких звуков (файлов), имеющее ID и приоритет.
  • SoundQueue - очередь сообщений с приоритетным воспроизведением и удалением дубликатов по ID. При вставке звуков сообщения в очередь методом push, если сообщение с тем же ID уже есть в очереди и оно еще не воспроизводится, то оно заменяется новым; вставленное сообщение занимает положение в очереди в соответствии со своим приоритетом (сообщения с меньшим значением приоритета проигрываются первыми), при этом приоритет других сообщений в очереди уменьшается на 1, давая им шанс быть услышанными на фоне высокоприоритетных сообщений. Если очередь полна (у нее задается максимальное количество звуков и сообщений) при вставке раздается специальный звук soundOverflow.

Файл MP3_Serial_Player.ino содержит тесты-примеры работы с библиотекой и CLI (command line interface) для доступа к ее функциям из терминала на 57600 (см. TELEMETRY_SPEED).

*Вот краткая инструкция по подключению:
*

  1. Скопируйте содержимое каталога “sd-card.content.root” на SD карту (у карты должен появиться каталог mp3 в корне диска);

  2. Задейте скетч “MP3_Serial_Player” из source\MP3_Serial_Player в Arduino;

  3. Соедините DFPlayer модуль с Arduino и динамиком на 4-8 Ом как указано далее:

DFPlayer.SPK_1 -> Динамик (первый вывод, полярность не важна);
DFPlayer.SPK_2 -> Динамик (второй вывод);
DFPlayer.GND -> Arduino GND;
DFPlayer.VCC -> Arduino VCC (+5V);
DFPlayer.Busy -> Arduino D9;
DFPlayer.RX -> Arduino 11 через 1kOm резистор для совместимости входа с 3.3V;

  1. Вставьте SD карту в DFPlayer;

  2. Подключите Arduino к PC кабелем USB;

  3. Далее идет проверка. Запустите Arduino Serial Monitor на скорости 57600 бод.
    В течении 20 seconds после его открытия нажмите кнопку “Send” button в Serial Monitor с пустой стокой ввода.

  4. Откроется Command Line Interface (CLI). В нем Вы можете посылать команды, набирая их в строке ввода и нажимая кнопку “Send”. Наберите и пошлите следующую команду:

help

  1. Покажется меню:

reset - reboot the device.
exit - leave CLI and start working.
say <N> - play file mp3/<V>00<N>.mp3 (N=0…999) with current voice <V>.
Example: 0000.mp3 for voice 0 and file 0; 2123.mp3 for voice 2 and file 123.
play <N> - play file mp3/000<N>.mp3 regardless of current voice (N=0…2999).
queue <ID,P,S1,S2,…> - add message to queue; ID=message ID, P=Priority, S1,S2,…=sounds.
go - play all messages in queue.
clear - delete all messages from queue.
voice <V> - select voice (V=0,1,2). It is used as a 1st digit in file name.
volume <X> - set volume (X=0…31).
eq <EQ> - set equalizer (EQ=normal,pop,rock,jazz,classic,base).

  1. Пошлите следующую команду для проигрывания файла “mp3\0001.mp3”.

play 1

Исходники и тестовое содержимое SD-карты:
www.dropbox.com/sh/…/AACDYW2ovC7BXTctoeG-8Xi7a?dl=…

Назначение библиотеки
Библиотека задумывалась для “звукового OSD” и еще для чего-то.

  • 6475