我正在尝试HTML中的交互式音频应用程序,我希望能够无缝地开始播放一个音频文件,就像另一个音频文件到达特定的播放位置一样;例如,如果正在播放音频文件A,那么我希望在完全达到16秒时收到一个事件。
我已尝试使用audio.play(); setTimeout(myCallback, 16000);
,但我发现它在某些浏览器中非常不稳定(尤其是Safari,特别是当窗口在后台时),并且有时会稍微开火,而其他浏览器次火很晚。即使我在安排回调时明确停止,快退和.load()
即将播放的音频片段,情况仍然如此。
我现在的(简单)looper只需每16秒在两个玩家之间切换:
audio = []
for (var i = 0; i < 2; i++) {
audio[i] = new Audio("mew" + i + ".mp3");
}
var which = 0;
var pump = function() {
audio[which].play();
which = (which + 1) % audio.length;
window.setTimeout(pump, 16000);
}
audio[which].addEventListener('canplaythrough', function() {
pump();
});
for (i in audio) {
audio[i].load();
}
另外,请注意,虽然在这种情况下我可以使用setInterval()
,但情况并非总是如此(无论如何,setInterval()
会遇到相同的稳定性问题。)