Web Audio音频,打Web包,前后台切换后概率性无法控制

  • 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里有这么一段。

@zhefeng.zhang @jare 烦请引擎组大佬看下,我们目前能想到的改法,就是在2.3.2的CCAudioEngine里加这么一段,循环音频不执行callback回调,不知道是否会引发其他问题。

人工置顶下吧,求答疑:joy:

我也碰到这个BUG