Как сделать плеер на ардуино
TMRpcm – Arduino библиотека для асинхронного воспроизведения PCM/WAV файлов напрямую с SD карты.
Использует стандартную библиотеку SD Arduino, SD карту и выходное устройство (громкоговоритель, наушники, усилитель и т.д.).
- все платы на базе ATmega328: Arduino Uno, Nano, Duemilanove и т.д.;
- платы Mega: 1280, 2560 и т.д..
Особенности
Подготовка аудиофайлов
Файлы конвертируются легко и просто:
Затем с помощью компьютера скопируйте файл на SD карту.
Известные ограничения
Данная библиотека сильно нагружает процессор, и выполнение кода во время воспроизведения будет медленнее, чем обычно. Нагрузка от обработки аудиофайлов может быть уменьшена за счет использования аудио более низкого качества, кодированного с меньшей частотой дискретизации (с минимальным значением 8 кГц).
Возможно влияние на другие библиотеки, которые используют прерывания. Функции isPlaying() , disable() или noInterrupts() могут использоваться для предотвращения параллельного выполнения кода.
Управление громкостью допускает хороший диапазон регулировки громкости, но при большой громкости возможно появление искажений.
Загрузка
Также проект можно найти на GitHub: ссылка.
Функции
Пример использования
Макет примера
Это простая схема для проигрывания wav файлов с помощью Arduino Nano v.3.0, она содержит 4 кнопки, при нажатии каждой из которых воспроизводится заданный wav файл, загруженный на SD карту.
Комплектующие
Комплектующие
Arduino Nano Arduino Nano
Адаптер SD карты для Arduino Адаптер SD карты для Arduino
- Arduino Nano v3.0 (я использовал китайскую версию под названием Funduino Nano);
- модуль SD карты;
- SD карта;
- макетная плата;
- четыре кнопки;
- четыре резистора 22 кОм;
- один резистор 4,7 кОм;
- NPN транзистор BC546B;
- динамик;
- перемычки.
Подготовка SD карты
Адаптер SD карты
Форматирование SD карты Конвертирование аудиофайлов
- Отформатируйте SD карту (убедитесь, что настройки форматирования совпадают с приведенными на скриншоте выше).
- Конвертируйте ваши аудиофайлы в .WAV файлы (я использовал программу Wav Sample rate converter) со следующими параметрами:
- частота дискретизации: 16000 Гц;
- количество каналов: моно;
- количество бит на отсчет: 8.
- Wav файлы для примера приведены ниже.
Схема
Схема макета wav плеера на Arduino Nano
Поиск неисправностей
Если у вас не получилось заставить эту схему работать, то ниже приведены два тестовых скетча для поиска неисправностей. Код был протестирован на Arduino Nano, Uno и Mega.
Подключать кнопки нет необходимости, файлы будут воспроизводится автоматически.
Нет необходимости подключать транзистор, подключите небольшой динамик или наушники напрямую к выводу 9 платы Arduino Nano или к выводу 11 платы Arduino Mega.
Скачанные по ссылке выше аудиофайлы скопируйте в корневой каталог SD карты.
Arduinio Nano
Arduino Nano | SD карта |
---|---|
12 | MISO |
11 | MOSI |
13 | SCK |
4 | CS |
9 | динамик |
GND | GND |
5V | VCC |
Arduino Mega
Arduino Mega | SD карта |
---|---|
50 | MISO |
51 | MOSI |
52 | SCK |
53 | CS |
11 | динамик |
GND | GND |
5V | VCC |
Если звука всё равно нет, то добавьте задержку между командами воспроизведения delay(1000); .
Дополнительные возможности
Данная библиотека предназначалась для простого и удобного пользователю использования в качестве проигрывателя wav аудиофайлов, использующего стандартные библиотеки Arduino и воспроизводящего файлы в простейшем wav формате. Многие дополнительные функции были добавлены по запросам пользователей и включены в pcmConfig.h , чтобы сохранить изначальную простоту.
Большинство дополнительных функций требуют больше памяти RAM, больше программной памяти и, в некоторых случаях, большей вычислительной мощности для воспроизведения. Некоторые из них до сих пор еще отлажены не полностью. Помните об этом при включении данных функций.
Смотрите pcmConfig.h для настройки следующих параметров:
Пользовательские определения
В pcmConfig.h настраиваются следующие параметры:
Второй громкоговоритель / двухтактный режим
Данная библиотека по умолчанию выводит данные на два вывода таймер, хотя по умолчанию полностью включен только один.
Для включения дополнительный вывод должен быть настроен на выход, например:
- Arduino Uno (один выход): audio.speakerPin = 9;
- Arduino Uno (двухтактный выход): audio.speakerPin = 9; pinMode(10,OUTPUT);
Режим Multi
Режим Multi включает одновременное воспроизведение двух треков.
Функции множественного режима немного отличаются от функций стандартного режима:
- по умолчанию: использует тот же таймер и выводы, что и в обычном режиме с двухтактным выходом;
- MODE2: использует два 16-разрядных таймера и до 4-х выводов.
- рекомендуемая частота дискретизации 16–20 кГц;
- размер буфера может быть увеличен для улучшения производительности;
- звуки, воспроизводимые одновременно, должны иметь одинаковые частоты дискретизации;
- для включения режима multi раскомментируйте определение в pcmConfig.h;
- переменная audio.speakerPin2 должна быть установлена в 4-выводном режиме для выбора дополнительного таймера / вывода, которые будут использоваться.
Стандартный режим (2 вывода, один трек) | 1 или 2 динамика |
Стандартный режим стерео (2 вывода, один трек) | 2 динамика, не двухтактные (нагрузка между выводом и корпусом) |
Стандартный режим стерео MODE2 (4 вывода, один трек) | 4 динамика ИЛИ двухтактные выходы (нагрузка между двумя выводами) на 2 динамика |
Режим Multi (2 вывода, два трека) | 1 или 2 динамика |
Режим Multi стерео (4 вывода, два трека) | 2 или 4 динамика, не двухтактные |
Режим Multi MODE2 (4 вывода, два трека) | 2 динамика на двухтактных выходах или 4 динамика на не двухтактных выходах |
Примечание: все 4-выводные режимы требуют платы с двумя и более 16-разрядными таймерами.
Воспроизведение стерео и 16-битного аудио
Эти режимы требуют дополнительных ресурсов и вычислительной мощности, так как с SD карты должны считываться удвоенные данные. Треки моно могут воспроизводиться в режиме стерео, но не наоборот.
В стандартном режиме:
Использование SDFAT
Библиотека SDFAT может использоваться для уменьшения использования оперативной памяти и памяти программ и для повышения производительности. Файлы должны быть включены в скетч. Смотрите пример в архиве с библиотекой.
Метаданные (теги ID3v2.3 и LIST)
Функции были добавлены для чтения данных о песне, артисте и альбоме из тегов ID3v2.3 и LIST в WAV файлах.
Примечание: добавление, модифицирование и редактирование метаданных поддерживает программа Audacity.
listInfo Прочитать теги LIST в символьный буфер, возвращает длину тега. id3Info Прочитать теги ID3 в символьный буфер, возвращает длину тега. getInfo Ищет оба тега и считывает в символьный буфер, возвращает длину тега. Первым ищется ID3.
Теги для запросов:
- 0 = название песни;
- 1 = имя артиста;
- 2 = название альбома.
- Найти только информацию LIST и напечать название песни через последовательный порт.
- Найти информацию ID3v2.3 и LIST и напечатать информацию о песне, артисте и альбоме через последовательный порт.
Использование TIMER2
Часто данная библиотека используется с платами Uno, Nano и т.д. только с одним 16-разрядным таймером. Когда TIMER1 необходим для других целей, для воспроизведения аудио может быть использован TIMER2.
Выводы динамика – на Uno, Nano и т.д. только вывод 3.
- этот вариант, как правило, является не самым лучшим решением;
- скорость воспроизведения будет слегка отличаться от использования 16-разрядных таймеров;
- воспроизведение на TIMER2 поддерживает нестандартные частоты дискретизации: 31,4 кГц, 23,5 кГц и 15,7 кГц;
- увеличение частоты дискретизации включено по умолчанию и в этом режиме не может быть изменено;
- рекомендуются частоты дискретизации 24–32 кГц при размере буфера 128.
ШИМ и опция rampMega
В попытках уменьшить шумы треска, создаваемые ШИМ, было опеределено четыре основных источника проблемы:
- включение ШИМ/таймеров на Arduino;
- выключение ШИМ/таймеров на Arduino;
- разница в значениях между треками;
- парсинг незвуковых данных.
Простое цифровое создание WAV файлов
Данные функции будут генерировать стандартные WAV файлы. Исходные данные с аналоговых входов или других датчиков могут быть записаны в файл для генерации цифрового звука, который может быть воспроизведен на любом устройстве, поддерживающем WAV файлы, или легко конвертирован в другие форматы.
Примечание: в дальнейшем будут добавлены и другие форматы wav.
Синтаксис:
Использование:
Смотрите пример, включенный в библиотеку. Создайте файл шаблона, затем запишите в него данные, начиная с 44 байта. Используйте команду finalizeWavTemplate , чтобы добавить данные о размере файла перед воспроизведением.
Примечания: Если указанный файл существует, он будет перезаписан при создании, но обновлен только при завершении. Эти функции при использовании функций записи вызываются автоматически.
Запись звука
Запись звука находится всё еще в тестировании и может работать не так, как ожидается.
Функции:
startRecording Начать запись с указанного аналогового вывода. stopRecording Остановить запись и финализировать wav файл.
Проходной режим – во время записи выдает звук на динамик.
Режимы: 0 – нормальный/нет; 1 – динамик включен; 2 – записи нет, вывод только на динамик.
Платформы Arduino с ядром Cortex-M0+ имеют в своём арсенале интерфейс I²S для передачи и приёма цифровых аудио файлов с другими внешними устройствами. При этом контроллер может спокойно заниматься своими делами и мигать светодиодами.
В качестве примера соберём простой плеер. Для этого подключим к платформе Arduino внешний I²S цифро-аналоговый преобразователь и модули управления.
Что понадобится?
Аудиофайл
Подготовьте файл для воспроизведения:
Как собрать?
Схема для Arduino MKR Zero
Пример кода
Для работы примера — установите библиотеку Arduino Sound из менеджера библиотек.
Если не указано иное, содержимое этой вики предоставляется на условиях следующей лицензии: CC Attribution-Noncommercial-Share Alike 4.0 International
Расскажу сейчас как с помощью Arduino и SD шилда сделать простой но рабочий плеер способный воспроизводить музыкальные файлы формата .wav. SD шилд подключается к Arduino следующим способом:
MOSI – pin 11
MISO – pin 12
CLK – pin 13
CS – pin 10
VCC – 5V
GND – GND
Динамик одним выводом подключается к земле (GND), а вторым к pin 9.
Сразу предлагаю загрузить библиотеку TMRpcm-master.
Устанавливаем 9 pin как выход для динамика
Далее устанавливаем уровень громкости
Тут мы инициализируем SD карту
Теперь в бесконечном цикле loop указываем длительность нашего .wav файла который будем воспроизводить. В моем случае я указал 5 секунд. Если пренебречь этой строкой, воспроизводится файл не будет.
Следующим шагом указываем команду на воспроизведение файла по указанному пути. Файл уже найдете сами.
А теперь все собрав воедино, у нас получится вот такая программа
File myFile;
TMRpcm tmrpcm;
void setup() tmrpcm.speakerPin = 9; // Динамик подключен на пин 9
tmrpcm.setVolume(7); // установка громкости от 0 до 7
tmrpcm.quality(1);
// Инициализация SD карты памяти
if (!SD.begin(SDPIN)) return;
>
>
void loop() delay(5000);
tmrpcm.play("sounds/son8bit.wav"); // воспроизведение файла "son8bit.wav"
>
void playSound(char *file) tmrpcm.play(file);
return;
>
Не пропустите обновления! Подписывайтесь на нашу группу Вконтакте и страницу в Instagram.
Так же у нас есть Telegram канал.
Вам понравился наш материал? Поделитесь с коллегами!
В этой статье я опишу основные нюансы работы с Arduino MP3 Shield v.2.0.
Саму плату MP3 Shield я купил у китайцев довольно давно, но только сегодня собрался с духом и начал разбираться с этим девайсом.
MP3 Shield может воспроизводить аудиофайлы с карты памяти размером до 2 Гб и файловыми системами FAT16 или FAT32. Поддерживаются следующие форматы аудиофайлов: MP3, WAV, WMA, MIDI, OGG.
Сразу скажу, что данный MP3 Shield не дружит с русскими буквами и спецсимволами в именах файлов.
Внешний вид Arduino MP3 Shield
Библиотека MusicPlayer для Arduino MP3 Shield
Для работы с MP3 Shield нам понадобится установить библиотеку MusicPlayer.
musicplayer.rar (54,4 KiB, 1 122 hits)
Скачайте архив и распакуйте его содержимое в \arduino-1.xx\libraries\
Проверочный скетч
Давайте загрузим тестовые скетчи для понятия общего принципа работы с MP3 Shield.
Для начала отформатируйте свою карту памяти в FAT16 или FAT32 и скопируйте на нее любой несколько mp3 файлов. Вставьте карту памяти в MP3 Shield. Подключите наушники или колонки к красному разъему на плате MP3 Shield.
Загрузите в Arduino следующий скетч:
Этот пример реализует воспроизведение mp3 файла test.mp3 с карты памяти и выводит информацию в Монитор порта.
Следующий пример добавляет в Play List все файлы из корня карты памяти и воспроизводит их.
Читайте также: