微信小程序 wx.createAudioContext 创建音频上下文

从基础库 1.6.0 开始,本接口停止维护,请使用 wx.createInnerAudioContext 代替

微信小程序插件:支持,需要微信小程序基础库版本不低于 1.9.6

功能描述

创建 audio 上下文 AudioContext 对象。

参数

string id

audio 组件的 id

Object this

在自定义组件下,当前组件实例的this,以操作组件内 audio 组件

返回值

AudioContext

微信小程序wx.createInnerAudioContext创建内部音频上下文

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

微信小程序插件:支持,需要微信小程序基础库版本不低于 1.9.6

微信 Windows 版:支持

微信 Mac 版:支持

微信 鸿蒙 OS 版:支持

功能描述

创建内部 audio 上下文 InnerAudioContext 对象。

参数

Object object

属性 类型 默认值 必填 说明 最低版本
useWebAudioImplement boolean false 否 是否使用 WebAudio 作为底层音频驱动,默认关闭。对于短音频、播放频繁的音频建议开启此选项,开启后将获得更优的性能表现。由于开启此选项后也会带来一定的内存增长,因此对于长音频建议关闭此选项。 2.19.0

返回值

InnerAudioContext

注意事项

  • InnerAudioContext 音频资源不会自动释放,因此如果不再需要使用音频,请及时调用 InnerAudioContext.destroy() 释放资源,避免内存泄漏。

示例代码

const innerAudioContext = wx.createInnerAudioContext({
  useWebAudioImplement: false // 是否使用 WebAudio 作为底层音频驱动,默认关闭。对于短音频、播放频繁的音频建议开启此选项,开启后将获得更优的性能表现。由于开启此选项后也会带来一定的内存增长,因此对于长音频建议关闭此选项
})
innerAudioContext.src = 'https://wx_test.mp3'

innerAudioContext.play() // 播放

innerAudioContext.pause() // 暂停

innerAudioContext.stop() // 停止

innerAudioContext.destroy() // 释放音频资源

微信小程序 wx.createMediaAudioPlayer()

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

微信小程序插件:支持

功能描述

创建媒体音频播放器对象 MediaAudioPlayer 对象,可用于播放视频解码器 VideoDecoder 输出的音频。

返回值

MediaAudioPlayer

注意事项

  • iOS 7.0.15 mediaAudioPlayer 播放网络视频资源会出现音频卡顿,本地视频没有这个问题,将下一个客户端版本修复。

示例代码

  // 创建视频解码器,具体参数见 createVideoDecoder 文档
  const videoDecoder = wx.createVideoDecoder()
  // 创建媒体音频播放器
  const mediaAudioPlayer = wx.createMediaAudioPlayer()
  // 启动视频解码器
  videoDecoder.start()
  // 启动播放器
  mediaAudioPlayer.start().then(() => {
    // 添加播放器音频来源
    mediaAudioPlayer.addAudioSource(videoDecoder).then(res => {
      videoDecoder.getFrameData() // 建议在 requestAnimationFrame 里获取每一帧视频数据
      console.log(res)
    })

    // 移除播放器音频来源
    mediaAudioPlayer.removeAudioSource(videoDecoder).then()
    // 停止播放器
    mediaAudioPlayer.stop().then()
    // 销毁播放器
    mediaAudioPlayer.destroy().then()
    // 设置播放器音量
    mediaAudioPlayer.volume = 0.5
  })

完整demo(小游戏)

  • https://developers.weixin.qq.com/s/SF2duHmb7MjI

微信小程序 wx.createWebAudioContext()

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

微信小程序插件:不支持

微信 Windows 版:支持

微信 Mac 版:支持

功能描述

创建 WebAudio 上下文。

返回值

WebAudioContext

示例代码

一个简单的播放demo


const audioCtx = wx.createWebAudioContext()

const loadAudio = (url) => {
  return new Promise((resolve) => {
    wx.request({
      url,
      responseType: 'arraybuffer',
      success: res => {
        console.log('res.data', res.data)
        audioCtx.decodeAudioData(res.data, buffer => {
          resolve(buffer)
        }, err => {
          console.error('decodeAudioData fail', err)
          reject()
        })
      },
      fail: res => {
        console.error('request fail', res)
        reject()
      }
    })
  })
}

const play = () => {
  loadAudio('xxx-test.mp3').then(buffer => {
    let source = audioCtx.createBufferSource()
    source.buffer = buffer
    source.connect(audioCtx.destination)
    source.start()
  }).catch(() => {
    console.log('fail')
  })
}

play()

wx.getAvailableAudioSources(Object object)

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

以 Promise 风格 调用:支持

微信小程序插件:支持,需要微信小程序基础库版本不低于 2.15.0

功能描述

获取当前支持的音频输入源

参数

Object object

属性 类型 默认值 必填 说明
success function 否 接口调用成功的回调函数
fail function 否 接口调用失败的回调函数
complete function 否 接口调用结束的回调函数(调用成功、失败都会执行)

object.success 回调函数

参数
Object res
属性 类型 说明
audioSources Array.<string> 支持的音频输入源列表,可在 RecorderManager.start() 接口中使用。返回值定义参考 https://developer.android.com/reference/kotlin/android/media/MediaRecorder.AudioSource
合法值 说明
auto 自动设置,默认使用手机麦克风,插上耳麦后自动切换使用耳机麦克风,所有平台适用
buildInMic 手机麦克风,仅限 iOS
headsetMic 耳机麦克风,仅限 iOS
mic 麦克风(没插耳麦时是手机麦克风,插耳麦时是耳机麦克风),仅限 Android
camcorder 同 mic,适用于录制音视频内容,仅限 Android
voice_communication 同 mic,适用于实时沟通,仅限 Android
voice_recognition 同 mic,适用于语音识别,仅限 Android

wx.pauseVoice(Object object)

从基础库 1.6.0 开始,本接口停止维护,请使用 wx.createInnerAudioContext 代替

以 Promise 风格 调用:支持

微信小程序插件:支持,需要微信小程序基础库版本不低于 1.9.6

功能描述

暂停正在播放的语音。再次调用 wx.playVoice 播放同一个文件时,会从暂停处开始播放。如果想从头开始播放,需要先调用 wx.stopVoice。

参数

Object object

属性 类型 默认值 必填 说明
success function 否 接口调用成功的回调函数
fail function 否 接口调用失败的回调函数
complete function 否 接口调用结束的回调函数(调用成功、失败都会执行)

示例代码

wx.startRecord({
  success (res) {
    const tempFilePath = res.tempFilePath
    wx.playVoice({
      filePath: tempFilePath
    })

    setTimeout(() => { wx.pauseVoice() }, 5000)
  }
})

wx.playVoice(Object object)

从基础库 1.6.0 开始,本接口停止维护,请使用 wx.createInnerAudioContext 代替

以 Promise 风格 调用:支持

微信小程序插件:支持,需要微信小程序基础库版本不低于 1.9.6

功能描述

开始播放语音。同时只允许一个语音文件正在播放,如果前一个语音文件还没播放完,将中断前一个语音播放。

参数

Object object

属性 类型 默认值 必填 说明 最低版本
filePath string 是 需要播放的语音文件的文件路径 (本地路径)
duration number 60 否 指定播放时长,到达指定的播放时长后会自动停止播放,单位:秒 1.6.0
success function 否 接口调用成功的回调函数
fail function 否 接口调用失败的回调函数
complete function 否 接口调用结束的回调函数(调用成功、失败都会执行)

示例代码

wx.startRecord({
  success (res) {
    const tempFilePath = res.tempFilePath
    wx.playVoice({
      filePath: tempFilePath,
      complete () { }
    })
  }
})

wx.setInnerAudioOption(Object object)

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

以 Promise 风格 调用:支持

微信小程序插件:支持,需要微信小程序基础库版本不低于 2.10.0

功能描述

设置 InnerAudioContext 的播放选项。设置之后对当前微信小程序全局生效。

参数

Object object

属性 类型 默认值 必填 说明
mixWithOther boolean true 否 是否与其他音频混播,设置为 true 之后,不会终止其他应用或微信内的音乐
obeyMuteSwitch boolean true 否 (仅在 iOS 生效)是否遵循静音开关,设置为 false 之后,即使是在静音模式下,也能播放声音
speakerOn boolean true 否 true 代表用扬声器播放,false 代表听筒播放,默认值为 true。
success function 否 接口调用成功的回调函数
fail function 否 接口调用失败的回调函数
complete function 否 接口调用结束的回调函数(调用成功、失败都会执行)

注意事项

  • 为保证微信整体体验,speakerOn 为 true 时,客户端会忽略 mixWithOther 参数的内容,强制与其它音频互斥
  • 不支持在播放音频的过程中切换为扬声器播放,开发者如需切换可以先暂停当前播放的音频并记录下当前暂停的时间点,然后切换后重新从原来暂停的时间点开始播放音频
  • 目前 wx.setInnerAudioOption 接口不兼容 wx.createWebAudioContext 接口,也不兼容 wx.createInnerAudioContext 开启 useWebAudioImplement 的情况,将在后续版本中支持

wx.stopVoice(Object object)

从基础库 1.6.0 开始,本接口停止维护,请使用 wx.createInnerAudioContext 代替

以 Promise 风格 调用:支持

微信小程序插件:支持,需要微信小程序基础库版本不低于 1.9.6

功能描述

结束播放语音。

参数

Object object

属性 类型 默认值 必填 说明
success function 否 接口调用成功的回调函数
fail function 否 接口调用失败的回调函数
complete function 否 接口调用结束的回调函数(调用成功、失败都会执行)

示例代码

wx.startRecord({
  success (res) {
    const tempFilePath = res.tempFilePath
    wx.playVoice({
      filePath: tempFilePath,
    })

    setTimeout(() => { wx.stopVoice() }, 5000)
  }
})