【协助解决发红包】CocosCreator3.8.7,低端设备AudioSource音效播放闪退问题,求指点

  • Creator 版本:3.8.7
  • 运行设备信息:
    设备型号:S905X3
    系统版本:Android 11
    主板平台:gxl
    CPU架构:armeabi-v7a 四核 1.8GHz
    GPU型号:Mali-G31 八核
    RAM大小:2006MB
    eMMC容量:7396MB

音频播放使用AudioSource,项目包含背景2个音乐,几十个小音效,小音效整合为一个mp3,不同的音效片段播放不同的时间段,播放完就调用stop。游戏中会频繁设置clip、调用play,stop。就这样一个多小时游戏闪退。。
Logcat一直打印:
D PlayerBase::PlayerBase()
D TrackPlayerBase::TrackPlayerBase()
W channel count is still unknown after prepare
无其他报错信息
备注:确定是音效引起的,因为把音效关了,就不会闪退了。观察了内存也是平稳的。

求大佬指点迷津啊,自己各种尝试都不行,已折磨好几天了。哪位好心大佬指点下~~~~~~ :sob: :sob: :sob:

有木有大哥帮瞅瞅

怀疑是stop,pause引起的。我把整合的音效切割成单个小音效(用playOneShot播放),不再调用stop,pause。背景音乐需要停止就设置volume为0,loop为false,下次播放直接设置volume,loop=true,play()。
就这样还是不行,运行一段时间画面卡死。。

弟弟已山穷水尽···!!!

:persevere:

试一下用这个框架里面的音频封装,有缓存的 XForge | 开源前端开发框架
不过,里面不需要把这么多音效合成一个.
以前音频有内存漏泄,不知道还是不是这个问题引起的.

1赞

终于有大哥回复了,谢谢大哥,我试试哈

1.用AudioSource,然后多创建几个做成一个池,取出来使用,用AudioSource.maxAudioChannel可以判断能创建最多的数量,留1个给bgm,其他给音效。
2.stop之后记得设置null

1赞

哥,你说的大致就是我最初的做法,stop后会设置clip为null,就是这样的在我上面说的设备(比较低端,属于街机一类的主板)上一个多小时后闪退,内存能保持平稳。
在我自己手机上跑没问题,不会闪退···

用了你推荐的音效官方封装,代码写的太好了,像件艺术品!
暂时测试没闪退,再测测看,后续确定没问题再回复你,非常感谢!

刚刚又闪退了,运行了将近15个小时。。。。。。。。。。。。。。。。。
能不能@下官方大佬啊,我真的是木有法了。。。。。。。。。。。。。。。。。

的AudioEngine管理音频,同样是打印
Logcat一直打印:
D PlayerBase::PlayerBase()
D TrackPlayerBase::TrackPlayerBase()
W channel count is still unknown after prepare
其实自己写的跟官方的逻辑都差不多,只是官方写的更加规范,漂亮,所以还是会挂。。。

3赞

都运行15个小时了,可以考虑在中间的某个过程中,释放一下.大概率还是内存泄露了.

用的MP3,有不少大于160kb的,我试试

内存泄漏好像木有哦,内存一直很平稳,没有增长。
感觉就像是死锁

你用安卓原生去播放音频算了,在需要播放的时机去调用。

1赞

好的哥,作为备选方案,不行了可以试试

自上次修改以来,今天是第三天了,没有闪退。
1.改了.cpp中的限制 2.把MP3改为ogg 3.延迟stop
也是参考了你给的帖子中原作者的解决方案。
D PlayerBase::PlayerBase()
D TrackPlayerBase::TrackPlayerBase()
W channel count is still unknown after prepare
现在这些log都不打印了!!
支付宝账号可发下,发个小红包感谢你的协助!

4赞

你是我见过论坛说解决给发红包真正做到的 :+1:

然而17年的问题,3.8.7还在