华为快游戏无法播放声音的bug

creator版本:

问题描述

在华为快游戏,第二次调用playMusic无法播放声音
大致的api调用顺序是

  • cc.audioEngine.playMusic // 能正常播放
  • cc.audioEngine.stopMusic // 能正常暂停
  • 转换场景
  • cc.audioEngine.playMusic // 不能正常播放的时候,返回id=-1

加载声音的代码如下,很普通的一段代码

        cc.loader.loadRes("bg", cc.AudioClip, function (error, clip) {
            if (error) {
                console.log(error)
            } else {
                console.log("加载音频完毕");
                let id = cc.audioEngine.playMusic(clip, true);
                console.log(`id:${id}`);// 失败时是为-1
            }
        });

我尝试着编写了一个demo抱歉这个问题实在无法复现,对于返回值-1,能否给出一些排查建议?

可否打开Android studio logcat, 对比下正常播放情况和返回值-1时,logcat输出有什么不一样

华为快游戏的log有限,要打印playMusic里面的log可能要修改代码,有点麻烦

发现如果不使用小包模式,是没有任何问题

当使用小包模式,会出现第二次不能播放声音的问题

demo的例子可以重现吗,方便提供下吗

编写的demo没有复现,但是项目中的确存在这个问题
对于返回值-1,能给出一些排查方向么?

出现-1,应该有两种情况,一种是当前播放音频超过24个,第二种是小包模式的音频没有下载下来。
看情况应该是第二种情况。
我这边也没重现出来。demo的话,把第二个音频换成项目的“第二个不能播放声音的音频“”应该可以重现

2次播放的是同一个音频:joy:

可否帮忙看下 cc.loader.loadRes成功后,clip.loaded 是否为true

loaded为true :joy: 再跳转到另外一个scene,音乐播放就完全正常了

问题已经解决!
首先说一下流程游戏, 进入游戏 => 加载子包 => 预加载资源图片声音等 => 登录游戏
在接入华为快游戏,选择 预加载资源图片声音 这个过程调用sdk,结果在登录游戏后一直没有声音,调用 playMusic
接口返回的id=-1,然后大部分精力都在处理这个返回值,一直想为什么返回值是-1,导致问题始终得不到解决,声泪俱下啊,折腾了一天,关键是这个问题编写的demo根本复现不出来,也没办法反馈给官方,只能靠口头交流。

经历了一天的折腾,后来调整了方向,猜测可能是在预加载资源之后,调用sdk可能是内存开销占用过大带来声音播放的一个bug,于是调试了调用sdk时机,选择在进入游戏后就立刻调用,登录成功后再进行资源预加载,问题解决了!

其实这个也不算是一个bug,至于原因其实我也没有追踪到根源,暂时就这样解决吧,希望能帮助遇到这个问题的人!

怎么能不算bug呢,我就遇到了!!!!我们是先加载资源,完毕以后使用sdk登录,然后进入到游戏里面没声音,也不是全没,偶尔有几个音效还是能播放出来的。。。。这个问题还是蛮严重的,希望引擎团队能够重视一下。 当然我也使用了你说的解决方案, 背景音乐可以出来了,但是其他的音效还是没有

@xu_yanfeng

不能播放音效么?

是的啊

资源加载应该是成功的 但是playEffect 的时候audio_id 是-1

@xu_yanfeng

能弄个demo不,我直接甩给相关人员,我当时没有遇到音效的问题,感觉这个问题还存在

用了不同的音效发现,短的音效播放不了。播放不了的音效4k,用了一个14k的可以了。同级目录下面,可以根据这个线索查一下:joy: