Звуковой буфер
Базовая Широко доступная
Эта функция хорошо отработана и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с апреля 2021 года.
Интерфейс AudioBuffer представляет собой небольшой аудио-фрагмент в памяти, созданный из аудиофайла с помощью метода AudioContext.decodeAudioData(), или из исходных данных с помощью AudioContext.createBuffer(). После размещения в AudioBuffer, аудио можно воспроизвести, передав его в AudioBufferSourceNode.
Объекты этих типов предназначены для хранения коротких аудио-фрагментов, обычно менее 45 секунд. Для более длинных звуков более подходящими являются объекты, реализующие MediaElementAudioSourceNode. Буфер содержит форму волны аудиосигнала, закодированную как серия амплитуд в формате: неинтерлированный IEEE754 32-битный линейный PCM с номинальным диапазоном между -1 и +1, то есть 32-битный буфер с плавающей точкой, где каждый образец находится между -1.0 и 1.0. Если у AudioBuffer несколько каналов, они хранятся в отдельных буферах.
Конструктор
AudioBuffer()-
Создает и возвращает новый экземпляр объекта
AudioBuffer.
Свойства экземпляра
-
AudioBuffer.sampleRateТолько для чтения -
Возвращает число с плавающей точкой, представляющее частоту дискретизации данных PCM, хранящихся в буфере, в образцах в секунду.
-
AudioBuffer.lengthТолько для чтения -
Возвращает целое число, представляющее длину данных PCM, хранящихся в буфере, в образцах-кадрах.
-
AudioBuffer.durationТолько для чтения -
Возвращает число с плавающей точкой двойной точности, представляющее длительность данных PCM, хранящихся в буфере, в секундах.
-
AudioBuffer.numberOfChannelsТолько для чтения -
Возвращает целое число, представляющее количество дискретных аудиоканалов, описываемых данными PCM, хранящимися в буфере.
Методы экземпляра
AudioBuffer.getChannelData()-
Возвращает
Float32Array, содержащий данные PCM, связанные с каналом, определенным параметромchannel(причем0представляет первый канал). AudioBuffer.copyFromChannel()-
Копирует образцы из указанного канала
AudioBufferв массивdestination. AudioBuffer.copyToChannel()-
Копирует образцы в указанный канал
AudioBuffer, из массиваsource.
Пример
Следующий простой пример демонстрирует, как создать AudioBuffer и заполнить его случайным белым шумом. Полный исходный код можно найти в нашем репозитории webaudio-examples; также доступна рабочая онлайн-версия.
const audioCtx = new AudioContext();
// Create an empty three-second stereo buffer at the sample rate of the AudioContext
const myArrayBuffer = audioCtx.createBuffer(
2,
audioCtx.sampleRate * 3,
audioCtx.sampleRate,
);
// Fill the buffer with white noise;
// just random values between -1.0 and 1.0
for (let channel = 0; channel < myArrayBuffer.numberOfChannels; channel++) {
// This gives us the actual array that contains the data
const nowBuffering = myArrayBuffer.getChannelData(channel);
for (let i = 0; i < myArrayBuffer.length; i++) {
// Math.random() is in [0; 1.0]
// audio needs to be in [-1.0; 1.0]
nowBuffering[i] = Math.random() * 2 - 1;
}
}
// Get an AudioBufferSourceNode.
// This is the AudioNode to use when we want to play an AudioBuffer
const source = audioCtx.createBufferSource();
// set the buffer in the AudioBufferSourceNode
source.buffer = myArrayBuffer;
// connect the AudioBufferSourceNode to the
// destination so we can hear the sound
source.connect(audioCtx.destination);
// start the source playing
source.start();
Спецификации
| Спецификация |
|---|
| Web Audio API # Звуковой буфер |
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
AudioBuffer |
55Параметрcontext поддерживался до версии 57, но теперь удален. |
79 | 53 | 42Параметрcontext поддерживался до версии 44, но теперь удален. |
14.1 | 55Параметрcontext поддерживался до версии 57, но теперь удален. |
53 | 42Параметрcontext поддерживался до версии 44, но теперь удален. |
14.5 | 6.0Параметрcontext поддерживался до Samsung Internet 7.0, но теперь удален. |
55Параметрcontext поддерживался до версии 57, но теперь удален. |
AudioBuffer |
14 | 12 | 25 | 15 | 6 | 18 | 25 | 14 | 6 | 1.0 | 4.4.3 |
copyFromChannel |
43 | 13 | 27 | 30 | 14.1 | 43 | 27 | 30 | 14.5 | 4.0 | 43 |
copyToChannel |
43 | 13 | 27 | 30 | 14.1 | 43 | 27 | 30 | 14.5 | 4.0 | 43 |
duration |
14 | 12 | 25 | 15 | 6 | 18 | 25 | 14 | 6 | 1.0 | 4.4.3 |
getChannelData |
14 | 12 | 25 | 15 | 6 | 18 | 25 | 14 | 6 | 1.0 | 4.4.3 |
length |
14 | 12 | 25 | 15 | 6 | 18 | 25 | 14 | 6 | 1.0 | 4.4.3 |
numberOfChannels |
14 | 12 | 25 | 15 | 6 | 18 | 25 | 14 | 6 | 1.0 | 4.4.3 |
sampleRate |
14 | 12 | 25 | 15 | 6 | 18 | 25 | 14 | 6 | 1.0 | 4.4.3 |
См. также
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/AudioBuffer