在Chrome中预加载多个(798)音频文件

时间:2017-11-30 11:29:03

标签: javascript html5 google-chrome audio preload

我制作了一款游戏并且我想加载798个声音文件,但只有Chrome,Firefox才有问题。示例代码:https://jsfiddle.net/76zb42ag/,请参阅控制台(按F12)。

有时脚本只加载100,500,700个文件,有时候还可以。如果我减少文件数量为ex。 300是好的(总是)。我怎么解决这个问题?我需要回调或任何想法?游戏将离线(节点webkit)。

Javascript代码:

var total = 0;
// sample file to download: http://www.sample-videos.com/audio/mp3/crowd-cheering.mp3
// sounds.length = 798 files 
var sounds = [

    (...limit character, see https://jsfiddle.net/76zb42ag/...)
];

for (var i in sounds) {
    load(sounds[i]);
}

function load(file) {
    var snd = new Audio();
    snd.addEventListener('canplaythrough', loadedAudio, false);
    snd.src = file;
}


function loadedAudio() {
    total++;
    console.log(total);
    if (total == sounds.length){
        console.log("COMPLETE");
    }
}

1 个答案:

答案 0 :(得分:1)

这不是一个真正的代码问题。这是一般架构问题。

不仅取决于数量,还取决于样品的大小,您不可能立即将它们全部装入。即使你可以,它也会因为内存使用率很高而运行得很差,并且可能会在一段时间后崩溃。

由于它处于脱机状态,我会说你甚至可以完全没有预装它们,因为读取速度几乎是瞬间的。

如果您发现它不合适,或者您可能需要同时使用5并且可能太慢,我说您需要以某种方式构建您的游戏可以确定您对某个游戏状态需要哪些声音,然后加载它们(并删除那些您不需要的引用,以便它们可以被垃圾收集)。

这正是所有游戏在向您显示加载屏幕时所做的事情,原因相同。

如果您想避免“#34;加载屏幕"”,您可以通过找出方法知道即将发生的事情并提前加载它来变得聪明。