AudioBufferSourceNode
Базовая версия Широко доступна
Эта функция хорошо отработана и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с апреля 2021 года.
Интерфейс AudioBufferSourceNode представляет собой AudioScheduledSourceNode, который представляет собой источник звука, состоящий из аудиоданных в памяти, хранящихся в AudioBuffer.
Этот интерфейс особенно полезен для воспроизведения звука, имеющего особенно строгие требования к точности временных характеристик, например, для звуков, которые должны соответствовать определённому ритму и могут храниться в памяти вместо воспроизведения с диска или сети. Для воспроизведения звуков, требующих точного времени, но которые должны передаваться по сети или воспроизводиться с диска, используйте AudioWorkletNode для реализации их воспроизведения.
У AudioBufferSourceNode нет входов и ровно один выход, имеющий такое же количество каналов, как и AudioBuffer, указанное свойством buffer. Если буфер не задан, то есть, если buffer равен null, на выходе присутствует один канал тишины (каждый образец равен 0).
AudioBufferSourceNode можно воспроизвести только один раз; после каждого вызова start() необходимо создать новый узел, если вы хотите воспроизвести тот же звук снова. К счастью, создание этих узлов очень недорого, и сами AudioBuffer могут быть повторно использованы для нескольких воспроизведений звука. Действительно, вы можете использовать эти узлы в режиме «выстрелил и забыл»: создайте узел, вызовите start() для начала воспроизведения звука и даже не беспокойтесь о том, чтобы удерживать ссылку на него. Он будет автоматически удален из памяти в соответствующее время, что не произойдёт, пока звук не закончится воспроизведение.
Разрешены несколько вызовов stop(). Последний вызов заменяет предыдущий, если AudioBufferSourceNode ещё не достиг конца буфера.
| Количество входов | 0 |
|---|---|
| Количество выходов | 1 |
| Количество каналов | определяется связанным AudioBuffer
|
Конструктор
AudioBufferSourceNode()-
Создаёт и возвращает новый объект
AudioBufferSourceNode. В качестве альтернативы можно использовать фабричный методBaseAudioContext.createBufferSource(); см. Создание AudioNode.
Свойства экземпляра
Наследует свойства от родительского элемента, AudioScheduledSourceNode.
AudioBufferSourceNode.buffer-
An
AudioBufferthat defines the audio asset to be played, or when set to the valuenull, defines a single channel of silence (in which every sample is 0.0). AudioBufferSourceNode.detune-
A k-скорость
AudioParamrepresenting detuning of playback in cents. This value is compounded withplaybackRateto determine the speed at which the sound is played. Its default value is0(meaning no detuning), and its nominal range is -∞ to ∞. AudioBufferSourceNode.loop-
A Boolean attribute indicating if the audio asset must be replayed when the end of the
AudioBufferis reached. Its default value isfalse. -
AudioBufferSourceNode.loopStartOptional -
A floating-point value indicating the time, in seconds, at which playback of the
AudioBuffermust begin whenloopistrue. Its default value is0(meaning that at the beginning of each loop, playback begins at the start of the audio buffer). -
AudioBufferSourceNode.loopEndOptional -
A floating-point number indicating the time, in seconds, at which playback of the
AudioBufferstops and loops back to the time indicated byloopStart, ifloopistrue. The default value is0. AudioBufferSourceNode.playbackRate-
A k-скорость
AudioParamthat defines the speed factor at which the audio asset will be played, where a value of 1.0 is the sound's natural sampling rate. Since no pitch correction is applied on the output, this can be used to change the pitch of the sample. This value is compounded withdetuneto determine the final playback rate.
Методы экземпляра
Наследует методы от родительского элемента, AudioScheduledSourceNode, и переопределяет следующие методы:.
start()-
Schedules playback of the audio data contained in the buffer, or begins playback immediately. Additionally allows the start offset and play duration to be set.
Примеры
В этом примере мы создаём буфер продолжительностью две секунды, заполняем его белым шумом, а затем воспроизводим его с помощью AudioBufferSourceNode. Комментарии должны ясно объяснять происходящее.
Примечание: Вы также можете запустить код онлайн, или просмотреть исходный код.
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 ArrayBuffer 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();
Примечание: Для примера с decodeAudioData() см. страницу AudioContext.decodeAudioData().
Спецификации
| Спецификация |
|---|
| Web Audio API # AudioBufferSourceNode |
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari на IOS | Samsung Internet | WebView Android | |
AudioBufferSourceNode |
55 | 79 | 53 | 42 | 14.1 | 55 | 53 | 42 | 14.5 | 6.0 | 55 |
AudioBufferSourceNode |
14 | 12 | 25 | 15 | 6 | 18 | 25 | 14 | 6 | 1.0 | 4.4.3 |
buffer |
14 | 12 | 25Firefox в настоящее время обрабатывает значениеnull неправильно. Вместо создания узла, генерирующего одноканальный звук без сигнала, узел становится непригодным к использованию и будет проигнорирован, если вы попытаетесь его подключить к чему-либо. |
15 | 6 | 18 | 25Firefox для Android в настоящее время обрабатывает значениеnull неправильно. Вместо создания узла, генерирующего одноканальный звук без сигнала, узел становится непригодным к использованию и будет проигнорирован, если вы попытаетесь его подключить к чему-либо. |
14 | 6 | 1.0 | 4.4.3 |
detune |
44 | 13 | 40 | 31 | 14.1 | 44 | 40 | 32 | 14.5 | 4.0 | 44 |
loop |
15 | 12 | 25 | 15 | 6 | 18 | 25 | 14 | 6 | 1.0 | 4.4.3 |
loopEnd |
24 | 12 | 25 | 15 | 7 | 25 | 25 | 14 | 7 | 1.5 | 4.4.3 |
loopStart |
24 | 12 | 25 | 15 | 7 | 25 | 25 | 14 | 7 | 1.5 | 4.4.3 |
playbackRate |
14 | 12 | 25 | 15 | 6 | 18 | 25 | 14 | 6 | 1.0 | 4.4.3 |
start |
24 | 12 | 25 | 15 | 7 | 25 | 25 | 14 | 7 | 1.5 | 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/AudioBufferSourceNode