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

方法
| 参数 | 类型 | 说明 |
|---|---|---|
| sampleRate | number | 存储在缓存区的PCM数据的采样率(单位为sample/s) |
| length | number | 返回存储在缓存区的PCM数据的采样帧率 |
| duration | number | 返回存储在缓存区的PCM数据的时长(单位为秒) |
| numberOfChannels | number | 储存在缓存区的PCM数据的通道数 |
getChannelData
返回一个 Float32Array,包含了带有频道的PCM数据,由频道参数定义(有0代表第一个频道)
支持情况:

(channel: number) => Float32Array
| 参数 | 类型 |
|---|---|
| channel | number |
示例代码
const audioCtx = Taro.createWebAudioContext()
const myArrayBuffer = audioCtx.createBuffer(2, frameCount, audioCtx.sampleRate);
const nowBuffering = myArrayBuffer.getChannelData(channel);
copyFromChannel
从 AudioBuffer 的指定频道复制到数组终端。
支持情况:

() => void
示例代码
const audioCtx = Taro.createWebAudioContext()
const audioBuffer = audioCtx.createFromAudioFile({
filePath:'/pages/res/bgm.mp3', // 静态资源
mixToMono:true,
sampleRate:44100
});
const channels = audioBuffer.numberOfChannels
const anotherArray = new Float32Array(frameCount);
const rate = audioBuffer.sampleRate
const startOffSet = 0
const endOffset = rate * 3;
const newAudioBuffer = audioCtx.createBuffer(channels,endOffset - startOffset,rate)
const offset = 0
for (let channel = 0; channel < channels; channel++) {
audioBuffer.copyFromChannel(anotherArray, channel, startOffset);
newAudioBuffer.copyToChannel(anotherArray, channel, offset);
}
copyToChannel
从指定数组复制样本到 audioBuffer 的特定通道
支持情况:

(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 | ✔️ |