多个OfflineAudioContext浏览器崩溃

multiple OfflineAudioContext crashing browser

本文关键字:崩溃 浏览器 OfflineAudioContext 多个      更新时间:2023-09-26

我有一个大约60个音频文件的数组(每个大约3分钟)。我循环浏览这个数组-对于每个项目,我都创建一个OfflineAudioContext,然后进行一些过滤和处理,如下所示:

var request = new XMLHttpRequest();
request.open('GET', audioFile.source, true);
request.responseType = "arraybuffer";
request.onload = function(){
    context.decodeAudioData(request.response, function(buffer) {
        audioFileBuffer = buffer;  
        offlineContext = new OfflineAudioContext(1, buffer.length, buffer.sampleRate);
        //do some processing
        //do some checks
    }
}

即使没有任何处理或"检查",这也会导致浏览器在30左右崩溃。我试着慢慢地浏览数组(每个项目都点击按钮),但浏览器仍然会在这个阈值附近崩溃。

在处理&检查是否完成offlineContext,并且不再需要用于创建它的任何东西——这是否仍在占用内存并导致浏览器崩溃?

编辑:更改代码以测试更具体的区域,并且离线音频上下文似乎只会崩溃chrome,下面的测试将完成opera、ff&萨法里,但将崩溃约170铬。

for(i=0; i<1000; i++){
    var off = new webkitOfflineAudioContext(1, 1764000, 44100);
    console.log(i);
}

Chrome给出错误:"Uncaught NotSupportedError:未能构造'OfflineAudioContext':OfflineAudioContext(176400044100)",然后如果刷新页面,则会崩溃

如果看不到周围的所有代码,我就无法判断。你能删除decodeAudioData调用,只创建30多个给定长度的OfflineAudioContext,看看它是否有同样的问题吗?(即不要加载缓冲区)。

OfflineAudioContext在我的页面崩溃时,意外创建了一个24倍长的页面。

我认为,如果你创建了太多,或者创建了一个太长的,它会立即崩溃,因为它没有足够的内存。

试着收集垃圾,或者一次一个地按顺序收集。