【发布时间】:2015-06-09 01:20:49
【问题描述】:
http://codepen.io/superuntitled/pen/EjZOjw/?editors=001
我有一个小的网络工具(见上面的链接)有内存泄漏,我不确定如何插入它。
当一个元素悬停在上面时会调用以下函数(有几百个)。
function tone(id, freq, tonelength) {
gainNodes.id = audioCtx.createGain();
osc.id = audioCtx.createOscillator();
osc.id.connect(gainNodes.id);
// set frequency and gain
osc.id.frequency.value = freq;
osc.id.start(0);
gainNodes.id.connect(audioCtx.destination);
gainNodes.id.gain.linearRampToValueAtTime(.1, audioCtx.currentTime);
gainNodes.id.gain.linearRampToValueAtTime(0, audioCtx.currentTime + parseFloat(tonelength));
}
我认为正在创建重复的振荡器,但不知道如何检查是否是这种情况,或者如何避免这种情况。
我觉得我应该检查一下振荡器是否已经存在,然后运行增益,但我不知道该怎么做。
我试图在振荡器持续时间之后停止它,但这似乎并没有阻止泄漏:http://codepen.io/superuntitled/pen/rVmqYX?editors=001
osc.id.stop(audioCtx.currentTime + parseFloat(tonelength));
对如何做到这一点有任何想法吗?
【问题讨论】:
标签: javascript memory-leaks web-audio-api