Вернуться к библиотеке Audio

 

prepare()

Описание

Функция осуществляет подготовку сэмплов в аудио-буфере для последующего воспроизведения, а также задает громкость.

Синтаксис

Audio.prepare(buffer, samples, volume);

Параметры

buffer (short) : имя буфера, содержащего данные из аудио-файла.

samples (int) : количество обрабатываемых сэмплов

volume (int) : 10-битное число, характеризующее громкость воспроизводимого аудио. 0 - минимальная громкость (нет звука), 1023 - максимальная.

Возвращаемые значения

нет

Пример

/*

 Демонстрация возможностей библиотеки Audio на Arduino Due

 Системные требования :
 *Плата расширения Arduino с SD-картой, активируемой 4 выводом (подойдет Arduino Ethernet)
 *Аудио-усилитель с динамиком, подключенный к выводу DAC0

 Автор - Massimo Banzi 20 сентября 2012
 Изменено - Scott Fitzgerald 19 октября 2012
*/

#include <SD.h>
#include <SPI.h>
#include <Audio.h>

void setup()
{
  // настраиваем последовательный интерфейс на скорость 9600 бод
  // для вывода отладочных данных
  Serial.begin(9600);

  // инициализируем SD-карту
  Serial.print("Initializing SD card...");
  if (!SD.begin(4)) {
    Serial.println(" failed!");
    return;
  }
  Serial.println(" done.");
  // задаем скорость передачи по интерфейсу SPI
  SPI.setClockDivider(4);

  // 44100КГц стерео => частота дискретизации 88200
  // размер буфера - 100 мс.
  Audio.begin(88200, 100);
}

void loop()
{
  int count=0;

  // открываем wav-файл на SD-карте
  File myFile = SD.open("test.wav");
  if (!myFile) {
    // если открыть файл не удалось - выводим ошибку и завершаем программу
    Serial.println("error opening test.wav");
    while (true);
  }

  const int S=1024; // количество сэмплов в одном блоке
  short buffer[S];

  Serial.print("Playing");
  // пока не достигли конца файла
  while (myFile.available()) {
    // считываем данные из файла в буфер
    myFile.read(buffer, sizeof(buffer));

    // подготовка сэмплов
    int volume = 1024;
    Audio.prepare(buffer, S, volume);
    // отправляем сэмплы на аудио-выход
    Audio.write(buffer, S);

    // каждые 100 блоков выводим '.'
    count++;
    if (count == 100) {
      Serial.print(".");
      count = 0;
    }
  }
  myFile.close();

  Serial.println("End of file. Thank you for listening!");
  while (true) ;
}