creator2.3.2音频bug,ios切入后台再切回音频不再播放(有红包奖励)

  • Creator 版本:2.3.2

  • 目标平台: iOS

  • 详细报错信息,包含调用堆栈:

  • 重现方式:1,使用creator2.3.2版本创建一个实例项目。2,打开微信扫一扫扫码编辑器上的二维码。3,找到AudioEngine组件,点击play,然后点击stopAll。4,这时候切入后台,然后再切回。5,再次点击play按钮,没有播放音频。

  • 之前哪个版本是正常的 :

  • 手机型号 :iPhone XS Max 13.3.1

  • 手机浏览器 :微信浏览器

  • 编辑器操作系统 :osx

  • 编辑器之前是否有其它报错 :无

  • 出现概率:100%

  • 额外线索:如果你未复现可以加qq 328387458 领取10元红包(设备版本等与以上所述必须一致),仅限5位名额。

安卓上遇到过类似问题,用户手机音频驱动存在问题,导致游戏启动时audioengine加载失败。解决方法就是游戏启动完成之后再加载audioengine。嗯,我那是cocos

可以再详细一些么?

hello every body 大家一起high high high

。。。

为了你这10元钱,我还要先买个iPhone XS Max

1赞

借同事的试一下,真的发你红包。

2.3.2 切换后台声音暂停 和 切换前台 声音恢复这个 引擎不是内部处理了吗

ios 原生包也有这个问题,切后台后无法恢复之前在播放的背景音乐

公司刚好有这设备,系统版本是 12.3.1,测试没有复现问题,暂时没有找到 13.3.1 的机器。

我找了一台12.4.1的设备也稳定复现了,需要切入后台后迅速切回。

麻烦使用官方范例里面的音频测试例,做下测试,并录个视频,我看下具体操作和表现,按照你的描述依然是没法复现的,也有可能是具体项目才会复现。

我们切回来,偶现,概率比较大,远程声音,和视频声音都不能播放,安卓是好的。

1赞

不知道如何是好,面对bug无能为力。

everybody

所以最后到底解决了吗 :sob:

constructor() {

    super();

    // 监听页面可见性变化

    document.addEventListener('visibilitychange', ()=> {

        if (!document.hidden) {

            console.log('[App] Returned to foreground');

            setTimeout(()=>{

                this.initAudioContext();

            }, 1000);

        }

    });

    // 同时监听 iOS 特定的 resume 事件(可选,增加兼容性)

    window.addEventListener('resume', ()=> {

        console.log('[App] App resume event fired');

        setTimeout(()=>{

            this.initAudioContext();

        }, 1000);

    });

}

initAudioContext(){

    // 先获取 AudioContext

    var audioCtx = null;

    if (window.cc && window.cc.sys && window.cc.sys.__audioSupport && window.cc.sys.__audioSupport.context) {

        audioCtx = window.cc.sys.__audioSupport.context;

        // console.log('找到 AudioContext, 当前状态:', audioCtx.state);

    } else {

        // console.log('未找到 AudioContext,尝试其他路径...');

        // 备用路径

        if (window.cc && window.cc.audioEngine) {

            for (var id in window.cc.audioEngine._id2audio) {

                var audio = window.cc.audioEngine._id2audio[id];

                if (audio._element && audio._element.context) {

                    audioCtx = audio._element.context;

                    // console.log('从 audioEngine 找到 AudioContext, 状态:', audioCtx.state);

                    break;

                }

            }

        }

    }

    // 如果找到了 AudioContext,执行恢复

    if (audioCtx) {

        // console.log('准备恢复 AudioContext, 当前状态:', audioCtx.state);

        audioCtx.suspend();

        setTimeout(()=>{

            audioCtx.resume().then(() => {

            // console.log('✅ 恢复成功!新状态:', audioCtx.state);

            // alert('音效已恢复');

                AudioManager.getInstance().playEffectSync(AUDIO_RES_PATH.ui_close);

            }).catch(e => {

                // console.error('❌ 恢复失败:', e.name, e.message);

                // alert('恢复失败: ' + e.message);

            });

        }, 500);

    } else {

        console.log('no find AudioContext');

    }

}     试试我的是可以了 我的是ios h5 cocos2.4.9

核心思想,用setInterval定时检查播放的状态,我记得引擎的播放状态判断是准的

(帖子被作者删除,如无标记将在 24 小时后自动删除)