AudioBuffer

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since April 2021.

Сводка

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 версия.

js
// Стерео
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();
};

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

Specification
Web Audio API
# AudioBuffer

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

Report problems with this compatibility data on GitHub
desktopmobile
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
AudioBuffer
AudioBuffer() constructor
copyFromChannel
copyToChannel
duration
getChannelData
length
numberOfChannels
sampleRate

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
See implementation notes.

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