AudioListener

空间音频监听器,代表在一个音频场景内唯一的位置和方向信息。

属性

number positionX

右手笛卡尔坐标系中X轴的位置。

number positionY

右手笛卡尔坐标系中Y轴的位置。

number positionZ

右手笛卡尔坐标系中Z轴的位置。

number forwardX

表示监听器的前向方向在同一笛卡尔坐标系中的水平位置,作为位置(位置x、位置y和位置z)值。

number forwardY

表示监听器的前向方向在同一笛卡尔坐标系中作为位置(位置x、位置y和位置z)值的垂直位置。

number forwardZ

表示与position (positionX、positionY和positionZ)值在同一笛卡尔坐标系下的监听器前进方向的纵向(前后)位置。

number upX

表示在与position (positionX、positionY和positionZ)值相同的笛卡尔坐标系中监听器向前方向的水平位置。

number upY

表示在与position (positionX、positionY和positionZ)值相同的笛卡尔坐标系中监听器向上方向的水平位置。

number upZ

表示在与position (positionX、positionY和positionZ)值相同的笛卡尔坐标系中监听器向后方向的水平位置。

function setOrientation

设置监听器的方向

function setPosition

设置监听器的位置

AudioContext

AudioContext 实例,可通过 wx.createAudioContext 获取。

AudioContext 通过 id 跟一个 audio 组件绑定,操作对应的 audio 组件。

方法

AudioContext.setSrc(string src)

设置音频地址

AudioContext.play()

播放音频。

AudioContext.pause()

暂停音频。

AudioContext.seek(number position)

跳转到指定位置。

示例代码

<!-- audio.wxml -->
<audio  src="{{src}}" id="myAudio" ></audio>

<button type="primary" bindtap="audioPlay">播放</button>
<button type="primary" bindtap="audioPause">暂停</button>
<button type="primary" bindtap="audio14">设置当前播放时间为14秒</button>
<button type="primary" bindtap="audioStart">回到开头</button>
// audio.js
Page({
  onReady (e) {
    // 使用 wx.createAudioContext 获取 audio 上下文 context
    this.audioCtx = wx.createAudioContext('myAudio')
    this.audioCtx.setSrc('http://ws.stream.qqmusic.qq.com/M500001VfvsJ21xFqb.mp3?guid=ffffffff82def4af4b12b3cd9337d5e7&uin=346897220&vkey=6292F51E1E384E06DCBDC9AB7C49FD713D632D313AC4858BACB8DDD29067D3C601481D36E62053BF8DFEAF74C0A5CCFADD6471160CAF3E6A&fromtag=46')
    this.audioCtx.play()
  },
  data: {
    src: ''
  },
  audioPlay () {
    this.audioCtx.play()
  },
  audioPause () {
    this.audioCtx.pause()
  },
  audio14 () {
    this.audioCtx.seek(14)
  },
  audioStart () {
    this.audioCtx.seek(0)
  }
})

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 的特定通道