想安静听歌,即使退出小程序也不会被打断;最好也是在系统播放面板上控制小程序音频;当电话/闹钟响起时,最好自动暂停小程序的音频“对当前情况要敏感”…
用户对小程序音频能力的需求,是不是让开发者感到有些力不从心?
其实小程序的音频接口能力一下子就能满足!本期《小程序类》中,微信开发者“码”好了关于小程序音频能力的建议,帮助开发者满足用户“挑剔的耳朵”——。
小程序支持播放和录制音频。小程序播放音频有两种方式:内部音频和背景音频。
一个
Audio内部支持用户在使用小程序时播放音效;
2
后台音频支持在用户离开小程序后继续播放音效。
后台音频接口适用于小型音乐节目,如“音乐站”和“QQ音乐站”。
通过wx.getBackgroundAudioManager()接口,可以获得全局唯一的背景音频管理器,对背景音频的所有操作都由其实现。
微信里只有一个背景音频。小程序开始播放背景音频后,它会保存背景音频播放器。只要当前小程序持有后台音频播放器,即使小程序进入后台(即用户离开小程序),也可以继续使用后台音频界面,当前小程序不会被微信主动回收。一旦后台音频播放器被抢占(可能是其他小程序、微信里的其他音乐、其他应用的音乐),小程序就不再持有后台音频播放器。
(音乐站小程序)
通过设置标题、专辑名、歌手名、封面图等属性,可以在系统音乐播放面板上显示小程序音频界面。通过响应系统面板的点击事件(onPrev,onNext),可以播放列表。
(系统回放面板控制效果)
内部音频适用于所有小程序,尤其是游戏类的小程序,比如《跳跃》。
您可以通过wx.createInnerAudioContext()接口创建音频实例。
tp://www.yiyongtong.com/uploads/allimg/180509/15460KO7-4.jpg" />每个小程序可以同时持有和播放多个内部音频,但一旦小程序进入后台(onHide),所有内部音频都会被暂停,且在用户回到前台(即打开小程序)之前无法再被播放。
在 iOS 系统中,内部音频默认遵循静音键设置。如果希望在静音时也能播放,可以设置 obeyMuteSwitch 为 false 。
安卓系统没有统一的静音开关,暂不支持此特性。
以游戏为例,在游戏中,经常有播放使用内部音频来播放游戏背景音乐的场景。音频中断事件指的是在游戏期间,音频被系统打断时触发的事件。音频中断事件分为中断开始和中断结束事件,分别使用 wx.onAudioInterruptionBegin() 和 wx.onAudioInterruptionEnd() 来监听。
以下事件会触发音频中断开始事件:接到电话、闹钟响起、系统提醒、收到微信好友的语音/视频通话请求。被中断之后,小游戏内所有音频会被暂停,并在中断结束之前都不能再播放成功。
中断结束之后,被暂停的音频不会自动继续播放,游戏可监听音频中断结束事件,并在收到中断结束事件之后调用背景音乐继续播放。
如果游戏的逻辑强依赖音乐的播放(如音乐类游戏),需要在音频开始中断的时候暂停游戏。
(跳一跳小游戏)
通过 wx.getRecorderManager 接口,可以获取全局唯一的录音管理器。
默认情况下,录音结束后会生成一个本地文件,并通过回调返回本地文件的地址。对于实时性要求比较高的小程序(如“面对面翻译”),可以通过设置 frameSize 参数来设置一个帧的大小,这样每录制指定帧大小的内容后,会通过 onFrameRecorded 回调返回本次分片的数据。
注意事项
不建议使用的历史接口
上述接口可以满足所有音频相关的需求。除了上述接口,小程序内还有若干跟音频相关的接口(如 wx.startRecord 、 wx.playVoice 、 wx.playBackgroundAudio 等)。这些接口由于早期设计存在一些缺陷,我们不建议继续使用。