使用window.prompt导致声音被暂停

现在有个需求场景,需要播放背景音乐,我使用的cc.audioEngine.playMusic
然后在玩游戏的过程中,调用了window.prompt,这时背景音乐就被暂停掉了,点取消或者确定都无法恢复声音

案例代码,在 start 中加上以下代码
cc.audioEngine.playMusic(this.bgmAudio, true); this.scheduleOnce(() => { window.prompt(); }, 3);
这里使用 scheduleOnce 只是模拟在游戏过程中使用 window.prompt

使用的版本是2.4.2,打包成Web Mobile,iOS版本:13.5.1,型号:6S

可以把音频改为dom模式试试

谢谢回答,这个忘记补充了,Dom Audio模式是没问题的,现在是想知道Web Audio如何解决

webaudio的话倒是有一个解决办法 不过这个没经过大量测试 所以我这边也没在线上用过
首先 你的音频停了是因为audioContext被打算了 state处于interrupted状态了 所以根据这个state是可以做一些操作的 比如重启

    cc.sys.__audioSupport.context.onstatechange = (event) => {
        if (event.target.state == 'interrupted')
            cc.sys.__audioSupport.context.resume();
    }

不过这个方法并不完美 在你打断的一瞬间恢复还是能听出来有断掉的情况 虽然只是那么一瞬间 但也不是平滑的无察觉
而且应该还有别的打断的情况 所以并不一定是所有情况都需要重启 这个需要根据逻辑使用场景去看了

至于具体的原因 应该是webAudio本身在safari设计就是这样的 可以看下这帖子

看完你的帖子,明白了很多,
之前我在 CCAudioEngine.js 和 CCAudio.js 所有调用 pause 方法的地方都打印日志,结果运行时都没输出。
根据你的代码,测试后确实是因为Safari中断了audioContext,Creator并没有去恢复这个音频。

虽然现在能解决我的问题了,也跟你说的那样,打断的一瞬间恢复还是能听出被断掉的问题,不知道官方有没有好的解决方案。

这个方法在3.6的版本中被废弃了,3.6有什么替代方案吗

有这个的,不过这个变量没有开放出来,你用的ts的话,在报错的代码前面加上// @ts-ignore就行了