当音频文件达到某个点时,如何获取事件?

时间:2016-10-05 03:44:55

标签: javascript audio

我正在尝试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()会遇到相同的稳定性问题。)

0 个答案:

没有答案