-
Creator 版本:2.1.2、2.3.2
-
目标平台: Web
-
详细报错信息,包含调用堆栈:
-
重现方式:在场景中引用一个默认为WebAudio的音频,使用cc.audioEngine.playMusic方法,循环播放它。反复进行前后台切换(比较容易复现的情况是锁屏并解锁)。
-
之前哪个版本是正常的 :
-
手机型号 :小米、OPPO
-
手机浏览器 :X5 WebView
-
编辑器操作系统 :
-
编辑器之前是否有其它报错 :无
-
出现概率:30%
-
额外线索:
引擎/WebView容器原因,在前后台切换过程中,循环播放的音频触发了CCAudio的ended回调(实际上还在播放着,没停),导致CCAudioEngine将其从 _id2audio 中移除,后续的stop、pause等操作,因为 _id2audio 中已经没有了这个引用,而无法找到对象进行操作。
测试代码:
循环播放的音频,理论上即使设置了setFinishCallback,也不应该回调的。但是出现异常时,它却回调了,但是音频仍继续播放。
// 非延迟加载 @property({ type: cc.AudioClip }) bgm: cc.AudioClip = null; ... this.musicId = cc.audioEngine.playMusic(this.bgm, true); console.debug(播放音乐 ${this.musicId} ${cc.audioEngine[’_music’].id}); cc.audioEngine.setFinishCallback(this.musicId, () => { console.debug('背景音乐播放完毕'); });
通过chrome://inspect调试,看日志,播放时,id正确。
![]()
出问题时,出现了这个回调。
![]()
_id2audio 被清空了。

而CCAudioEngiine.js里有这么一段。


