AudioBuffer
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()
-
将样本从
source
数组复制到AudioBuffer
的指定通道中。
示例
以下简单的示例演示了如何创建 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 音频 API # AudioBuffer |
浏览器兼容性
BCD 表仅在启用 JavaScript 的浏览器中加载。