#13.2 Arduino SD карта. Воспроизводим звуки и музыку в wav формате.
Продолжаем
работу с
SD картой в среде Ardino IDE. И
сегодня мы будем
воспроизводить мелодии
и уведомления с карты памяти
.
Качество
воспроизводимой музыки не очень хорошее
. Смотрите пример в виде. Звук
тихий так как мелодии и оповещения
воспроизводятся без какого либо усиления.
Так звук воспроизводит Arduino. Не забудьте
добавить звук при просмотре видео.
Это связанно
с вычислительными способностями
Arduino.
Поэтому требования к
аудио файлам будут
напрямую зависеть от возможности
микроконтроллера данной отладочной
платы:
частота
дискретизации: 16000 Гц;
количество
каналов: моно;
количество
бит: 8.
Давайте
подготовим файлы для нашего проекта. Скачаем нужные нам треки
или уведомления и конвертируем их. Для
этого я использую
онлайн конвектором аудио
файлов.
Выбираем
файл настраиваем параметры и конвертируем.
По моему опыту
можно использовать достаточно большие
файлы в несколько десятков Мб.
После
чего скачиваем полученный трек и
загружаем его на флешку.
Я
подготовил 6 различных файлов. Скачать
их можно внизу
страницы
урока. В разделе файлы для скачивания.
music.play("sound.wav"); // Воспроизвести файл на выходе 0
music.play("sound.wav",30,1); // Воспроизвести файл, начиная с 30-ой секунды, на выходе 1
music.play("sound.wav",0); // play(имя_файла, выход 0 или 1) определяется speakerpin или speakerpin2
music.stopPlayback(0); // Может принимать номер выхода 0 или 1
music.volume(0,1); // Уменьшить громкость на выходе 1
Давайте
сделаем на основе предыдущего урока
небольшую программу воспроизведения
6 файлов.
#include <SD.h> // необходимо включить SD библиотеку
#include <TMRpcm.h> // также необходимо включить данную библиотеку...
#include <SPI.h>
// Измените это в соответствии с вашей платой расширения или модулем;
const int chipSelect = 4;
TMRpcm music; // создать объект для использования в данном скетче
void setup()
{
// Открыть последовательное соединение и ждать открытия порта:
Serial.begin(9600);
Serial.println("Initializing SD card...");
if (!SD.begin(chipSelect))
{
Serial.println("initialization failed!");
while (1);
}
Serial.println("initialization done.");
music.speakerPin = 9; // 11 на Mega, 9 на Uno, Nano и т.д.
music.setVolume(5); // от 0 до 7. Установка уровня громкости
music.quality(1); // 1 для 2x передескритезации, 0 for для нормального режима
}
void loop()
{
music.play("sounds/2.wav");
Serial.println("Play 2.wav");
delay(30000);
music.play("sounds/1.wav");
Serial.println("Play 1.wav");
delay(10000);
music.play("sounds/3.wav");
Serial.println("Play 3.wav");
delay(10000);
music.play("sounds/4.wav");
Serial.println("Play 4.wav");
delay(3000);
music.play("sounds/5.wav");
Serial.println("Play 5.wav");
delay(3000);
music.play("sounds/6.wav");
Serial.println("Play 6.wav");
delay(3000);
}
Как
видим наши уведомления и музыка
воспроизводятся. В мониторе порта можно увидить какя мелодия сейчас воспроизводиться.
Самый
большой трек у меня под номером 2. Сейчас
сделаем
скетч который будет включать,
ставить паузу, изменять
громкость
звука
и выключать композицию
.
Управлять
будем через Монитор порта.
Команды:
1
- воспроизводим трек
2
- воспроизвести трек, начиная с 30-ой
секунды
3
- поставить воспроизведение на паузу /
продолжить воспроизводить
4
- устанавливает уровень громкости 0 —
выключаем.
5
- устанавливает уровень громкости 5
-включаем (макс. 7).
0
- выключаем воспроизведение трека.
#include <SD.h> // необходимо включить SD библиотеку
#include <TMRpcm.h> // также необходимо включить данную библиотеку...
#include <SPI.h>
// Измените это в соответствии с вашей платой расширения или модулем;
const int chipSelect = 4;
int ser = 0; // значение из порта
TMRpcm music; // создать объект для использования в данном скетче
void setup()
{
// Открыть последовательное соединение и ждать открытия порта:
Serial.begin(9600);
Serial.println("Initializing SD card...");
if (!SD.begin(chipSelect))
{
Serial.println("initialization failed!");
while (1);
}
Serial.println("initialization done.");
music.speakerPin = 9; // 11 на Mega, 9 на Uno, Nano и т.д.
music.setVolume(5); // от 0 до 7. Установка уровня громкости
music.quality(1); // 1 для 2x передескритезации, 0 for для нормального режима
}
void loop()
{
if (Serial.available() > 0) // пришли данные
{
ser = Serial.read();
if (ser =='1')
{
music.play("sounds/2.wav");
Serial.println("Play 2.wav");
//delay(30000);
}
else if (ser =='2')
{
music.play("sounds/2.wav",30); // воспроизвести файл, начиная с 30-ой секунды
Serial.println("Play 2.wav starting at 30 sec.");
}
else if (ser =='3')
{
music.pause(); // поставить воспроизведение на паузу / снять с паузы
Serial.println("Pause");
}
else if (ser =='4')
{
music.setVolume(0); // от 0 до 7. Устанавливает уровень громкости.
Serial.println("Set volume 0");
}
else if (ser =='6')
{
music.setVolume(5); // от 0 до 7. Устанавливает уровень громкости.
Serial.println("Set volume 5");
}
else if (ser =='0')
{
music.disable(); // выключить таймер на выходном выводе и остановить воспроизведение
Serial.println("Stop");
}
}
}
В
мониторе порта видим что у нас все
работает отлично.
Комментарии
Войдите или Зарегистрируйтесь И Вы сможете общаться на форуме и оставлять комментарии без капчи.