从解码音频流(移动)清理内存的正确方法

时间:2016-06-09 07:01:49

标签: javascript web-audio

我正在使用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的移动浏览器只是重新加载页面,因为看起来,我正在使用所有可用内存标签。虽然我只使用一个缓冲区变量,但我猜垃圾收集器不会释放我不再使用的音频缓冲区内存。

任何想法如何改进实施?

1 个答案:

答案 0 :(得分:0)

事实证明 - 问题在于垃圾收集器。以前的内存需要20-30秒才能真正清理。所以解决方案对我有用 - 我开始播放音轨并禁用切换到另一个音轨30秒的能力。它有足够的时间让记忆清理一切。