我正在使用WebAudio播放音乐曲目。首先,我用
完全解码它self.ctx.decodeAudioData(xhr.response, function (buffer) {
this.cache = buffer;
})
并将解码后的缓冲区保存到我需要开始播放时的某个变量中。
当我想切换音轨时,我正在用
清理音频节点node.source.onended = function (value) {
node.source = null;
};
和缓存:
this.cache = null;
并将下一首曲目解码为同一变量。
问题是,如果我多次切换轨道是快速连续(例如3-4个3分钟的轨道),基于iOS的移动浏览器只是重新加载页面,因为看起来,我正在使用所有可用内存标签。虽然我只使用一个缓冲区变量,但我猜垃圾收集器不会释放我不再使用的音频缓冲区内存。
任何想法如何改进实施?
答案 0 :(得分:0)
事实证明 - 问题在于垃圾收集器。以前的内存需要20-30秒才能真正清理。所以解决方案对我有用 - 我开始播放音轨并禁用切换到另一个音轨30秒的能力。它有足够的时间让记忆清理一切。