反复调用cc.audioEngine.playMusic和cc.audioEngine.stopMusic安卓上闪退

在安卓上,反复开关音效或背景音乐,会必然崩溃,音乐格式mp3

cocos creator 1.5.1

1赞

安卓上报错为:frameworks/wilhelm/src/android/AudioPlayer_to_android.cpp:779: pthread 0x66430888 (tid 31999) sees object 0x65157be8 was locked by pthread 0x5bca0f00 (tid 28636) at frameworks/wilhelm/src/itf/IObject.c:411

Android OpenSLES 的bug,如果play后立马stop,有概率触发死锁。
可以查阅一下自己的mp3文件的大小,修改使用系统混音的阀值:
修改方法:
修改文件cocos/audio/android/AudioPlayerProvider.cpp

文件大小超过阀值,使用系统解码,如果一播放马上stop有概率会卡死,属于系统的坑,如果有碰到,可以看看自己的mp3文件大小,如果有超过160K的,尝试调高这个阀值,调高这个阀值可以使用引擎层自己解码和混音,从而绕过系统的bug。

以后会改成引擎自己streaming的模式,播放长音频就不需要用系统混音了,才能绕过这个坑爹的系统bug。

1赞

多谢!我试试这个方法,目前本人的解决方案是换成ogg格式,并且在每次调用cc.audioEngine.stopMusic上加个scheduleOnce,目前测试没有再出现卡死,看来还是概率问题,多谢!!!

Mark…

我2.4版本的,也出现卡死

和你这个问题很相似

2.4.6也遇到这个问题 stopAudio前加scheduleOnce解决