AudioBuffer

Сводка

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

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

Конструктор

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

Свойства

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

Методы

AudioBuffer.getChannelData() (en-US)
Возвращает Float32Array, содержащий связанные с каналом данные ИКМ. Определяется параметром канала (с 0 - первого канала).
AudioBuffer.copyFromChannel() (en-US)
Копирует звуковые фрагменты (samples) из указанного канала AudioBuffer в массив.
AudioBuffer.copyToChannel() (en-US)
Копирует звуковые фрагменты (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' в этой спецификации.
Рабочий черновик Исходное определение

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

We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help! (en-US)
Возможность Chrome Edge Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Базовая поддержка 14.0 webkit (en-US) (Да) 25 (25) Нет 15 webkit (en-US)
22
6 webkit (en-US)

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 (en-US) 28.0 webkit (en-US)
copyFromChannel() и copyToChannel() Нет (Да) (Да) 27.0 (27)   Нет (Да) Нет (Да)
constructor Нет 55.0 ? ? ? ? 42 ? 55.0

 

Смотрите также