【发布时间】:2015-08-06 15:48:30
【问题描述】:
我正在使用 javascript 在浏览器中创建钢琴。为了让我同时多次播放同一个键,而不是只播放音频对象,我克隆它并播放克隆,否则我必须等待音频完成或重新启动它,我不这样做'不想。
我做过这样的事情:
var audioSrc = new Audio('path/');
window.onkeypress = function(event) {
var currentAudioSrc = audioSrc.cloneNode();
currentAudioSrc.play();
}
问题是,我在检查 chrome 的检查器时,发现每次克隆对象时,浏览器都会再次下载它
我检查了一些想要实现类似事情的人,发现他们中的大多数人都有和我一样的问题,他们重新下载了文件。我发现可以同时多次播放同一音频源的唯一示例是 SoundJs http://www.createjs.com/SoundJS
我尝试检查源代码,但无法弄清楚它是如何完成的。有什么想法吗?
【问题讨论】:
-
是的,如果您不熟悉 SoundJS 架构,我知道这将是多么难以追踪。 WebAudioLoader._sendComplete 将加载的文件解码为 AudioBuffer,然后将其作为 _result 传递,在 AbstractPlugin._handlePreloadComplete 中通过将其存储在 _audioSources 哈希中进行处理(WebAudioPlugin 扩展 AbstractPlugin)。然后将此存储的 AudioBuffer 传递给每个新的 WebAudioSoundInstance 并用于创建音频节点。它与接受的答案相同,存储音频缓冲区并使用它来创建新的音频节点。
标签: javascript html audio