新的音频会预加载声音文件吗?

时间:2019-02-21 00:13:48

标签: javascript html5 audio

我得到一个音频元素并像这样播放声音:

let audio = document.querySelector(`audio[data-key="${e.key}"]`);
audio.play();

但是有时(我使用Chrome)有时会在播放声音时出现延迟,因此我还添加了以下代码:

let audioElems = document.querySelectorAll('audio');
audioElems.forEach(function (audio) {
    new Audio(`./sounds/${audio.dataset.key}.mp3`);
});

起初似乎有所不同,但现在有时又会有所延迟。额外的代码会有所作为吗,会使用new Audio实际上预加载声音文件吗?

2 个答案:

答案 0 :(得分:1)

它不一定要预加载它,但会创建一个HTMLAudioElement,其preload属性设置为auto
这意味着UA会被告知,如果它们适当地调暗了资源,则应预加载资源,例如,如果使用移动数据,则它们可以忽略它。

console.log(new Audio)

现在是您的问题,Chrome is known不接受超过6个并发请求。因此,如果您的audioElems NodeList包含6个以上的元素,则可能是其中某些元素被延迟到获取第一个元素之前的原因。

此外,由于MediaElement中的所有内容都是异步的,因此总会有至少一点延迟。根据您的需求,使用Web Audio API可能会获得更好的结果。

答案 1 :(得分:0)

HTML5音频/视频标签具有可选的preload属性。您的音频标签当前是否启用了此属性?

https://www.w3schools.com/tags/av_prop_preload.asp

使用new Audio()构造函数默认为preload="auto",所以确实有所作为。

https://developer.mozilla.org/en-US/docs/Web/API/HTMLAudioElement