This page was translated from English by the community. Learn more and join the MDN Web Docs community.
AudioBuffer
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since июль 2015 г..
Сводка
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();
};
Спецификации
| Specification |
|---|
| Web Audio API> # AudioBuffer> |
Совместимость с браузерами
Enable JavaScript to view this browser compatibility table.