Float32Array AudioBuffer.getChannelData(number channel)

微信小程序插件:不支持

微信 Windows 版:支持

微信 Mac 版:支持

功能描述

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

参数

number channel

要获取特定通道数据的索引

返回值

Float32Array

示例代码

示例代码


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

AudioBuffer.copyToChannel(Float32Array source, number channelNumber, number startInChannel)

微信小程序插件:不支持

微信 Windows 版:支持

微信 Mac 版:支持

功能描述

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

参数

Float32Array source

需要复制的源数组

number channelNumber

需要复制到的目标通道编号

number startInChannel

复制的偏移数据量

示例代码

示例代码请参考 AudioBuffer.copyFromChannel

AudioBuffer.copyFromChannel()

微信小程序插件:不支持

微信 Windows 版:支持

微信 Mac 版:支持

功能描述

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

示例代码

示例代码


const audioCtx = wx.createWebAudioContext()
wx.request({
  url: 'xx.mp3', // 音频 url
  responseType: 'arraybuffer',
  success: res => {
    audioCtx.decodeAudioData(res.data, audioBuffer => {
      const channels = audioBuffer.numberOfChannels;
      const frameCount = audioCtx.sampleRate * 2.0;
      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);
        console.log('copyFromChannel 成功')
        newAudioBuffer.copyToChannel(anotherArray, channel, offset);
      }
    }, err => {
      console.error('decodeAudioData fail', err)
    })
  }
})

AudioBuffer

基础库 2.19.0 开始支持,低版本需做兼容处理。

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

属性

number sampleRate

存储在缓存区的 PCM 数据的采样率(单位为 sample/s)

number length

返回存储在缓存区的 PCM 数据的采样帧率

number duration

返回存储在缓存区的 PCM 数据的时长(单位为秒)

number numberOfChannels

储存在缓存区的 PCM 数据的通道数

方法

Float32Array AudioBuffer.getChannelData(number channel)

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

AudioBuffer.copyFromChannel()

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

AudioBuffer.copyToChannel(Float32Array source, number channelNumber, number startInChannel)

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