跟老姚学前端,课程体系更完善,10%基础 + 90%实战演练,快人一步学编程

扫一扫浏览

小程序•小故事(7)——小程序音频能力介绍

未结贴
0 5107
江南坦克站长未认证 2018-05-06 14:25:55
收藏

小程序支持播放和录制音频。小程序播放音频的方式有两种:内部音频和背景音频。
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 等)。这些接口由于早期设计存在一些缺陷,我们不建议继续使用。

- END -


第六期回顾:小程序•小故事(6)——微信登录能力优化

第五期回顾:小程序•小故事(5)——小程序插件

第四期回顾:小程序•小故事(4)——获取用户信息

第三期回顾:小程序•小故事(3)——更新机制

第二期回顾:小程序•小故事(2)——代码片段

第一期回顾:小程序•小故事(1)——分包加载

如果大家有想了解的小程序相关能力的故事,欢迎在评论区留言,我们后续会考虑将这些能力背后的故事分期分享给大家。

最后,提前祝大家五一节日快乐!

最近热帖 HOT TOPIC
【全套视频】thinkphp5视频教程 85794
父元素flex之后,子元素高度自适应问题 10855
一张纸的厚度是0.01毫米,则该纸对折30次后是多厚(据说超过珠穆朗玛峰的高度)php实现 9849
thinkphp5隐藏默认模块的一些问题 9319
api接口文档插件easydoc的基本用法,快速搞定接口文档 9268
omnicore rpc api中文手册【usdt】 9087
PHP如何判断字符串是否为json格式 9003
教你如果处理高并发数据不同步的问题php篇 8942
关于thinkphp5.0.x getshell漏洞的说明 8668
使用宝塔linux面板创建FTP无法连接的解决办法(阿里云或腾讯云) 8440
月度热议HOT COMMENTS
【全套视频】thinkphp5视频教程 70
tpframe 后续版本你希望有的功能是什么(分享贴) 12
权限那里怎么一登录别的账号就报错啊 9
关于tpframe的一点话题 6
cms插件在分类排序的时候JSON错误 6
基于tpframe v3.x 的微信公众号插件已批量上线 5
tpframe插件tcms插件v2.2已发布上线,欢迎下载使用 5
tpframe6.0马上就要跟大家见面了,一次全新的升级 5
透析thinkphp5升级版开发框架tpframe 3
新增的管理员没有权限操作CMS模块。 3
爆料早知道: