title: AudioBuffer

sidebar_label: AudioBuffer

AudioBuffer 接口表示存在内存里的一段短小的音频资源,利用 WebAudioContext.decodeAudioData 方法从一个音频文件构建,或者利用 AudioContext.createBuffer.html) 从原始数据构建。把音频放入 AudioBuffer 后,可以传入到一个 AudioBufferSourceNode 进行播放。

支持情况:AudioBuffer - 图1 AudioBuffer - 图2 AudioBuffer - 图3

参考文档

方法

参数 类型 说明
sampleRate number 存储在缓存区的PCM数据的采样率(单位为sample/s)
length number 返回存储在缓存区的PCM数据的采样帧率
duration number 返回存储在缓存区的PCM数据的时长(单位为秒)
numberOfChannels number 储存在缓存区的PCM数据的通道数

getChannelData

返回一个 Float32Array,包含了带有频道的PCM数据,由频道参数定义(有0代表第一个频道)

支持情况:AudioBuffer - 图4 AudioBuffer - 图5 AudioBuffer - 图6

参考文档

  1. (channel: number) => Float32Array
参数 类型
channel number

示例代码

  1. const audioCtx = Taro.createWebAudioContext()
  2. const myArrayBuffer = audioCtx.createBuffer(2, frameCount, audioCtx.sampleRate);
  3. const nowBuffering = myArrayBuffer.getChannelData(channel);

copyFromChannel

从 AudioBuffer 的指定频道复制到数组终端。

支持情况:AudioBuffer - 图7 AudioBuffer - 图8 AudioBuffer - 图9

参考文档

  1. () => void

示例代码

  1. const audioCtx = Taro.createWebAudioContext()
  2. const audioBuffer = audioCtx.createFromAudioFile({
  3. filePath:'/pages/res/bgm.mp3', // 静态资源
  4. mixToMono:true,
  5. sampleRate:44100
  6. });
  7. const channels = audioBuffer.numberOfChannels
  8. const anotherArray = new Float32Array(frameCount);
  9. const rate = audioBuffer.sampleRate
  10. const startOffSet = 0
  11. const endOffset = rate * 3;
  12. const newAudioBuffer = audioCtx.createBuffer(channels,endOffset - startOffset,rate)
  13. const offset = 0
  14. for (let channel = 0; channel < channels; channel++) {
  15. audioBuffer.copyFromChannel(anotherArray, channel, startOffset);
  16. newAudioBuffer.copyToChannel(anotherArray, channel, offset);
  17. }

copyToChannel

从指定数组复制样本到 audioBuffer 的特定通道

支持情况:AudioBuffer - 图10 AudioBuffer - 图11 AudioBuffer - 图12

参考文档

  1. (source: Float32Array, channelNumber: number, startInChannel: number) => void
参数 类型 说明
source Float32Array 需要复制的源数组
channelNumber number 需要复制到的目的通道号
startInChannel number 复制偏移数据量

API 支持度

API 微信小程序 H5 React Native
AudioBuffer ✔️
AudioBuffer.getChannelData ✔️
AudioBuffer.copyFromChannel ✔️
AudioBuffer.copyToChannel ✔️