AudioBuffer

基线 广泛可用

此功能已得到良好确立,可在许多设备和浏览器版本中使用。它自以下时间起在浏览器中可用: 2021 年 4 月.

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 存储库中找到完整的源代码;也提供了 正在运行的实时 版本。

js
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 的浏览器中加载。

另请参阅