Как сделать плеер на ардуино

Обновлено: 05.07.2024

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

  1. Arduino Nano v3.0 (я использовал китайскую версию под названием Funduino Nano);
  2. модуль SD карты;
  3. SD карта;
  4. макетная плата;
  5. четыре кнопки;
  6. четыре резистора 22 кОм;
  7. один резистор 4,7 кОм;
  8. NPN транзистор BC546B;
  9. динамик;
  10. перемычки.

Подготовка SD карты

Адаптер SD карты

Адаптер SD карты

Форматирование SD карты Конвертирование аудиофайлов

  1. Отформатируйте SD карту (убедитесь, что настройки форматирования совпадают с приведенными на скриншоте выше).
  2. Конвертируйте ваши аудиофайлы в .WAV файлы (я использовал программу Wav Sample rate converter) со следующими параметрами:
    • частота дискретизации: 16000 Гц;
    • количество каналов: моно;
    • количество бит на отсчет: 8.
  3. Wav файлы для примера приведены ниже.

Схема

Схема макета wav плеера на Arduino Nano

Схема макета wav плеера на Arduino Nano

Поиск неисправностей

Если у вас не получилось заставить эту схему работать, то ниже приведены два тестовых скетча для поиска неисправностей. Код был протестирован на Arduino Nano, Uno и Mega.

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

Нет необходимости подключать транзистор, подключите небольшой динамик или наушники напрямую к выводу 9 платы Arduino Nano или к выводу 11 платы Arduino Mega.

Скачанные по ссылке выше аудиофайлы скопируйте в корневой каталог SD карты.

Arduinio Nano

Соединение выводов
Arduino NanoSD карта
12MISO
11MOSI
13SCK
4CS
9динамик
GNDGND
5VVCC

Arduino Mega

Соединение выводов
Arduino MegaSD карта
50MISO
51MOSI
52SCK
53CS
11динамик
GNDGND
5VVCC

Если звука всё равно нет, то добавьте задержку между командами воспроизведения 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.

Теги для запросов:

  1. 0 = название песни;
  2. 1 = имя артиста;
  3. 2 = название альбома.
  1. Найти только информацию LIST и напечать название песни через последовательный порт.
  2. Найти информацию ID3v2.3 и LIST и напечатать информацию о песне, артисте и альбоме через последовательный порт.

Использование TIMER2

Часто данная библиотека используется с платами Uno, Nano и т.д. только с одним 16-разрядным таймером. Когда TIMER1 необходим для других целей, для воспроизведения аудио может быть использован TIMER2.

Выводы динамика – на Uno, Nano и т.д. только вывод 3.

  1. этот вариант, как правило, является не самым лучшим решением;
  2. скорость воспроизведения будет слегка отличаться от использования 16-разрядных таймеров;
  3. воспроизведение на TIMER2 поддерживает нестандартные частоты дискретизации: 31,4 кГц, 23,5 кГц и 15,7 кГц;
  4. увеличение частоты дискретизации включено по умолчанию и в этом режиме не может быть изменено;
  5. рекомендуются частоты дискретизации 24–32 кГц при размере буфера 128.

ШИМ и опция rampMega

В попытках уменьшить шумы треска, создаваемые ШИМ, было опеределено четыре основных источника проблемы:

  1. включение ШИМ/таймеров на Arduino;
  2. выключение ШИМ/таймеров на Arduino;
  3. разница в значениях между треками;
  4. парсинг незвуковых данных.

Простое цифровое создание 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.

arduino плеер

Сразу предлагаю загрузить библиотеку 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

В этой статье я опишу основные нюансы работы с Arduino MP3 Shield v.2.0.

Саму плату MP3 Shield я купил у китайцев довольно давно, но только сегодня собрался с духом и начал разбираться с этим девайсом.

MP3 Shield может воспроизводить аудиофайлы с карты памяти размером до 2 Гб и файловыми системами FAT16 или FAT32. Поддерживаются следующие форматы аудиофайлов: MP3, WAV, WMA, MIDI, OGG.

Сразу скажу, что данный MP3 Shield не дружит с русскими буквами и спецсимволами в именах файлов.

Внешний вид Arduino MP3 Shield

arduino mp3

arduino mp3

Библиотека 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 с карты памяти и выводит информацию в Монитор порта.

arduino mp3

arduino mp3

Следующий пример добавляет в Play List все файлы из корня карты памяти и воспроизводит их.

Читайте также: