Сводка

AudioBuffer - это интерфейс короткого звукового ресура (audio asset), находящегося в памяти и созданного из аудиофайла методом AudioContext.decodeAudioData(), или из исходных данных с помощью метода AudioContext.createBuffer(). Помещенные в AudioBuffer звуковые данные могут быть воспроизведены в  AudioBufferSourceNode.

Объекты этого типа предназначены для хранения небольших звуковых фрагментов, обычно менее 45 секунд. Для более длинных звуков, объекты реализующие MediaElementAudioSourceNode являются более подходящими. Этот буфер содержит данные в формате неперемещаемого IEE754 32-битного линейного ИКМ с номинальным диапазоном от -1 до +1, то есть 32-битный буфер с плавающей точкой каждого звукового фрагмента (samples) от -1.0 до 1.0. Если AudioBuffer имеет несколько каналов, то они хранятся в отдельном буфере.

Конструктор

AudioBuffer()
 Создает и возвращает новый объект AudioBuffer.

 Свойства

AudioBuffer.sampleRate Только для чтения
Возвращает число с плавающей точкой - частоту дискретизации (sample rate), хранящих в буфере данных ИКМ в звуковых фрагментах (samples) в секунду.
AudioBuffer.length Только для чтения
Возвращает целое число - длину в кадрах, хранящихся в буфере данных ИКМ.
AudioBuffer.duration Только для чтения
Возвращает целое число или число с плавающей точкой - продолжительность в секундах данных ИКМ, хранящихся в буфере.
AudioBuffer.numberOfChannels Только для чтения
Возвращает целое число - количество аудиоканалов в буфере, описываемых данными ИКМ.

Методы

AudioBuffer.getChannelData()
Возвращает Float32Array, содержащий связанные с каналом данные ИКМ. Определяется параметром канала (с 0 - первого канала).
AudioBuffer.copyFromChannel()
Копирует звуковые фрагменты (samples) из указанного канала AudioBuffer в массив.
AudioBuffer.copyToChannel()
Копирует звуковые фрагменты (samples) из массива в указанный канал AudioBuffer.

Пример

В этом примере показывается как создать объект AudioBuffer и заполнить его случайными белыми шумами. Вы можете найти полный пример в репозитории webaudio-examples. Так же доступна live версия.

// Стерео
var channels = 2;

// Создает пустой двухсекундный стерео-буфер
// с частотой звука AudioContext (sample rate)
var frameCount = audioCtx.sampleRate * 2.0;
var myArrayBuffer = audioCtx.createBuffer(channels, frameCount, audioCtx.sampleRate);

button.onclick = function() {
  // Заполняет буфер белыми шумами;
  // просто случайные значения от -1.0 до 1.0
  for (var channel = 0; channel < channels; channel++) {
    // Получаем массив данных канала
    var nowBuffering = myArrayBuffer.getChannelData(channel);
    for (var i = 0; i < frameCount; i++) {
      // Math.random() находится в [0; 1.0]
      // аудио должно быть в интервале [-1.0; 1.0]
      nowBuffering[i] = Math.random() * 2 - 1;
    }
  }

  // Получает AudioBufferSourceNode.
  // AudioNode для проигрывания из AudioBuffer
  var source = audioCtx.createBufferSource();

  // устанавливает буфер в AudioBufferSourceNode
  source.buffer = myArrayBuffer;

  // присоединяет AudioBufferSourceNode к
  // destination, чтобы мы могли слышать звук
  source.connect(audioCtx.destination);

  // Начать воспроизведение с источника
  source.start();

}

Спецификация

Спецификация Статус Комментарий
Web Audio API
Определение 'AudioBuffer' в этой спецификации.
Рабочий черновик Исходное определение

Совместимость с браузерами

Возможность Chrome Edge Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Базовая поддержка 14.0 webkit (Да) 25 (25) Нет 15 webkit
22
6 webkit

copyFromChannel() и copyToChannel()

(Да) (Да) 27 (27) Нет ? Нет
constructor 55.0 ? ? ? 42 ?
Возможность Android Android Webview Edge Firefox Mobile (Gecko) Firefox OS IE Phone Opera Mobile Safari Mobile Chrome для Android
Базовая поддержка Нет (Да) (Да) 25.0 (25) 1.2 Нет (Да) webkit 28.0 webkit
copyFromChannel() и copyToChannel() Нет (Да) (Да) 27.0 (27)   Нет (Да) Нет (Да)
constructor Нет 55.0 ? ? ? ? 42 ? 55.0

 

См. также

Метки документа и участники

 Внесли вклад в эту страницу: rcanedu
 Обновлялась последний раз: rcanedu,