我用的cc.audioEngine.play(url)加载音频
问题1:音频占用内存过大,亲测一个4M40s的音频占用大概100MB内存,音频文件大小11M,将音频压缩到1.38M后,占用内存仍未变化。
问题2:背景音乐切换,音乐停止时有用cc.audioEngine.uncache()释放资源,多次切换后发现内存急剧上涨,根本释放不掉,后面会达到500M以上的内存占用。后来加上了cc.loader.releaseRes()也并未改善。也曾在控制台直接输入cc.audioEngine.uncacheAll()跟进断点发现所有的引用也的确被删掉,就是内存怎么也下不来。
我们项目是一款主打音乐的游戏,背景音乐切换比较多,项目亟待上线比较急,开发组大大们帮忙看看有办法解决吗
自顶一下,由于内存占用太高,低端机型加载一个时长较长的音频,浏览器会经常会直接崩掉刷新。
内存泄露严重,有20-30首3分钟-5分钟的音频会来回切换,中高端机型玩一段时间浏览器也会崩。
最后一个值得关注的要点:JavaScript 的垃圾回收是延迟的。
想象一种情况,当你释放了 cc.loader 对某个资源的引用之后,由于考虑不周的原因,游戏逻辑再次请求了这个资源。此时垃圾回收还没有开始(垃圾回收的时机不可控),或者你的游戏逻辑某处,仍然持有一个对于这个旧资源的引用,那么意味着这个资源还存在内存中,但是 cc.loader 已经访问不到了,所以会重新加载它。这造成这个资源在内存中有两份同样的拷贝,浪费了内存。如果只是一个资源还好,但是如果类似的资源很多,甚至不止一次被重复加载,这对于内存的压力是有可能很高的。如果观察到游戏使用的内存曲线有这样的异常,请仔细检查游戏逻辑,是否存在泄漏,如果没有的话,垃圾回收机制是会正常回收这些内存的。
以上就是管理资源依赖和释放时需要注意的细节,这部分的功能和 API 设计还没有完全定案,我们还是希望尽力给大家带来尽可能方便的引擎 API,所以后续也会尝试一些其他的办法提升友好度,届时会更新这篇文档。
官方文档的原话
可以尝试直接用audio标签播放试试
音频play后返回到游戏逻辑的就只有一个soundID而已,所以游戏逻辑应该不存在保留多余引用的可能吧。
而且这个垃圾回收有观察过,并非完全不回收,而是会回收掉一部分,泄露一部分。回收还未触发时,再次引用了那个资源这种可能的确存在,因为音乐是换场景加载的,玩家可能会来回切换场景,导致上个资源未回收,有申请了一份新的。但是回收时机不可控,玩家行为也同样不可控啊,是在不清楚应该怎样改进了,大佬能给点建议吗
之前没做过网页编程,大佬能简单介绍啥,怎样用audio标签吗,或者有相关文档可以了解一下的?
谢谢~
你是web端还安卓端
web端
有人说过WebAudio在iOS平台上会有泄漏,未经证实你可以自己试试
目前使用版本1.9.2,确实遇到了这样的问题!官方不给个解决方案吗?

这样设置就好啦,内存会小很多的。
另外有严重的内存泄露。 两个背景乐轮流播放,切换的时候通过 cc.audioEngine.uncache(path)
cc.loader.release(path) 释放不再使用的音乐, cc.loader.load 新的音乐进来。 反复切换(切换的时间间隔比较久,确保垃圾回收已完成), 发现内存会不断的往上叠加。
使用 cc.audioEngine.play(path, loop, endVolum);加载 和 cc.audioEngine.uncache(path)卸载,发现反复加载内存不会叠加,但是加载之后,没有办法释放。麻烦引擎组看下吧。
dom模式 ios下不受静音控制,请问jare大佬怎么解决?