收藏
评论

(7)小程序音频能力介绍官方

小程序支持播放和录制音频。小程序播放音频的方式有两种:内部音频和背景音频。

1.内部音频支持用户在使用小程序过程中播放音效;
2.背景音频支持在用户离开小程序后继续播放音效。

一、播放音频

(一)背景音频

播放背景音频
背景音频接口适用于音乐类小程序,如“音乐站”、“QQ 音乐小电台”。通过 wx.getBackgroundAudioManager() 接口可以获取全局唯一的背景音频管理器,所有关于背景音频的操作都由它来实现。

微信内只有一个背景音频,一个小程序开始播放背景音频之后,就持有背景音频播放器,只要当前小程序持有背景音频播放器,即使这个小程序进入后台(即用户离开小程序),也可以继续使用背景音频接口,且当前小程序不会被微信主动回收;一旦背景音频播放器被抢占(可能是其他小程序、微信内其他音乐、其他 App 的音乐),则小程序不再持有背景音频播放器。



(音乐站小程序)


在系统播放面板显示和控制

通过设置标题、专辑名、歌手名、封面图等属性,小程序音频接口支持在系统音乐播放面板显示出来。通过响应系统面板的点击事件(onPrevonNext),可以实现列表播放。



系统播放面板控制效果)

(二)内部音频

播放内部音频

内部音频适用于所有小程序,尤其是游戏类目的小程序,如“跳一跳”。通过 wx.createInnerAudioContext() 接口可以创建一个音频实例。


每个小程序可以同时持有和播放多个内部音频,但一旦小程序进入后台(onHide),所有内部音频都会被暂停,且在用户回到前台(即打开小程序)之前无法再被播放。

静音下也能播放

在 iOS 系统中,内部音频默认遵循静音键设置。如果希望在静音时也能播放,可以设置 obeyMuteSwitch false


安卓系统没有统一的静音开关,暂不支持此特性。

处理音频中断事件

以游戏为例,在游戏中,经常有播放使用内部音频来播放游戏背景音乐的场景。音频中断事件指的是在游戏期间,音频被系统打断时触发的事件。音频中断事件分为中断开始和中断结束事件,分别使用 wx.onAudioInterruptionBegin() wx.onAudioInterruptionEnd() 来监听。

以下事件会触发音频中断开始事件:接到电话、闹钟响起、系统提醒、收到微信好友的语音/视频通话请求。被中断之后,小游戏内所有音频会被暂停,并在中断结束之前都不能再播放成功。

中断结束之后,被暂停的音频不会自动继续播放,游戏可监听音频中断结束事件,并在收到中断结束事件之后调用背景音乐继续播放。


如果游戏的逻辑强依赖音乐的播放(如音乐类游戏),需要在音频开始中断的时候暂停游戏



(跳一跳小游戏)


二、录制音频

通过 wx.getRecorderManager 接口,可以获取全局唯一的录音管理器。


实现边录边传
认情况下,录音结束后会生成一个本地文件,并通过回调返回本地文件的地址。对于实时性要求比较高的小程序(如“面对面翻译”),可以通过设置 frameSize 参数来设置一个帧的大小,这样每录制指定帧大小的内容后,会通过 onFrameRecorded 回调返回本次分片的数据。


注意事项:不建议使用的历史接口

上述接口可以满足所有音频相关的需求。除了上述接口,小程序内还有若干跟音频相关的接口(如 wx.startRecordwx.playVoicewx.playBackgroundAudio 等)。这些接口由于早期设计存在一些缺陷,我们不建议继续使用。


38858浏览
最后一次编辑于  2018-08-17
知识库内容非实时更新,可能已过期、失效或不适用于当前情形,请谨慎参考
收藏
反馈

26 个评论

  • 2018-05-30

    苹果用recorderManager录制完语音后为什么用createInnerAudioContext不能听到声音?


    2018-05-30
    赞同 8
    回复
  • 栉风
    栉风
    2019-11-15

    重音怎么解决

    2019-11-15
    赞同 2
    回复
  • lijibing
    lijibing
    2019-12-26

    你好,能帮我看下为什么这个代码片段不触发wx.onAudioInterruptionBegin()wx.onAudioInterruptionEnd()吗?


    https://developers.weixin.qq.com/community/develop/doc/0006c21cd90200aa07a9e042557800?highLine=onAudioInterruptionBegin

    2019-12-26
    赞同 1
    回复
  • 一挥
    一挥
    2018-06-06

    我想实现实时音频处理,比如实时语音识别,绘制波形图。

    onFrameRecorded 回到的分片的数据,具体是什么格式?急!!!

    2018-06-06
    赞同 1
    回复 2
    • levi
      levi
      2018-07-14

      兄弟,你onFrameRecorded这个方法能触发么?我触发不了

      2018-07-14
      回复
    • Yann👓
      Yann👓
      2018-11-20

      我也想知道ArrayBuffer 里面分片数据的格式。我想实时的转音。不知道存的是8位 还是16位。都不知道数据格式,咋地编码

      2018-11-20
      回复
  • 和风珂珂
    和风珂珂
    2022-09-06

    我之前还能听背景音频,今天又试了下,延迟很严重,打开要停很久,开始响然后突然断掉,只有一次停了很久然后完整播放,是用 http://...外部链接的音频,网络不卡,淘宝正常开。但这个背景音频怎么卡成这样?????

    2022-09-06
    赞同
    回复
  • WDNMD😕
    WDNMD😕
    2021-04-08

    大佬,播放的时候返回上一页面,顶部的这个是怎么做的?求帮助

    2021-04-08
    赞同
    回复
  • 黄军雷-数字化与智能化
    黄军雷-数字化与智能化
    2020-07-18

    关于两种播放接口,除了接口不同外还有哪些差异呢?即哪些约束条件会影响两个接口的使用?

    如果一个接口异常时,再用一个作为方案 b,是否可行?

    2020-07-18
    赞同
    回复
  • 赵青山
    赵青山
    2020-03-01

    背景音乐支持rtmp开头的吗?

    2020-03-01
    赞同
    回复
  • Doolans
    Doolans
    2019-12-10

    视频暂停播放失败,ios,安卓都是一样,正常调用的情况下

    2019-12-10
    赞同
    回复
  • 梨园主
    梨园主
    2019-11-24

    我的完全放不出音乐啊,谁能帮帮我

    onLoad: function (options) {

          var that=this;

          var songMid='003ebMYY2PGmn6';

          wx.request({

            url:

            'https://music.niubishanshan.top/api/v2/music/songUrllist/'+songMid,

             success(d){

                 // console.log(d);

                  var src=d.data.data[0];

                  console.log(src);

                  const audio =wx.createInnerAudioContext();

                  audio.src =src;

                  audio.play();

             }

          })

      },


    2019-11-24
    赞同
    回复 2
    • 梨园主
      梨园主
      2019-11-24
      新手求支援
      2019-11-24
      回复
    • 侯衍超
      侯衍超
      2021-03-03
      解决了吗?
      2021-03-03
      回复

正在加载...

登录 后发表内容