cocos creator开发微信小游戏,音频最近遇到的坑,总结一下。
1、cocos creator打包微信端时,不会打包解码器。其他端可能会。
2、微信端的音频系统有两套,一套基于web audio开发的WebAudioContext,是一个功能相对完善的3D音频系统。另一套InnerAudioContext,功能很简陋的2D音频系统,类似cocos creator的音频系统。另外如果是基于微信开发者编辑器的项目,在微信开发者编辑器中可以组件化操作WebAudioContext。详见微信小游戏音频功能
3、WebAudioContext和InnerAudioContext的支持格式有些区别,WebAudioContext不支持ios端播放ogg。详见支持格式
4、cocos creator项目,打包成微信项目时,调用的是InnerAudioContext。
wx.createInnerAudioContext(
{useWebAudioImplement: true}
);
*同时还会判断音频的时长,长音频时useWebAudioImplement为false,短音频为true。即短音频会走WebAudioContext的底层逻辑。因此ogg格式,ios微信端,长音频可以播出,短音频播不出。
尝试直接调用InnerAudioContext播一条ogg短音频(真机调试需要播网络文件,不能播本地文件)。将useWebAudioImplement设为false时,微信ios端调试能正常播出(或者不写这句,默认false也一样),设为true时播不出。确认无误。
*注:creator打包出的WECHATGAME文件夹里,没有在js文件中找到useWebAudioImplement等字样。不确定判断音频长短的逻辑是哪里加的。
5、解决1:换用mp3格式。mp3格式本来有无法无缝循环的问题。但经测试,微信双端都能无缝播出mp3,说明微信的解码器有经过优化,无需担心这个问题了,可以放心使用。但打包安卓、ios的app尚未测试,不确定mp3无缝循环行不行,不行再换用ogg,理论上creator会把解码器一起打包。
6、解决2:弃用cocos creator的音频接口,直接调用InnerAudioContext并把useWebAudioImplement设为false(默认就是false,不写也可以)。会很麻烦,只能在微信端调试(且需要使用网络文件地址而非本地音频),其他端不能用。不推荐。