我正在尝试编写一个使用[SoundManager 2] [1] api的javascript应用程序并且旨在运行 所有桌面和移动浏览器。在iPad平台上,Soundmanager正在使用HTML5音频API,因为它支持闪存。现在,当我尝试连续播放两个音频文件时,两个音频文件都是为响应点击事件而加载的,偶尔会出现[HTML5 :: stalled] [2]事件。如何设置事件处理程序以捕获停顿的事件?
由于我的应用程序中的声音对象是动态创建的,我不知道如何直接访问由SoundManager创建的标签,我尝试使用委托来处理停顿的事件:
document.delegate('audio', 'stalled', function (event) {...});
它不起作用。该事件并未因应对停滞而提出。 (我的处理程序中有警报)。
还尝试使用[Sound :: onsuspend()] [3]来监听停滞,但是onsuspend弹出 在sound :: play()的结尾。我们如何区分可能引发audio :: suspend的停滞和其他事件?有没有其他方法可以访问SoundManager必须创建的标签才能播放HTML音频?
答案 0 :(得分:0)
我用以下解决方案解决了这个问题。这没有记录并通过逆向工程找到。 这一切都与访问html音频对象有关,该对象可在_a。
下使用currentSound = soundManager.createSound({..});
currentSound._a.addEventListener('stalled', function() {
if (!self.currentSound) return;
var audio = this;
audio.load();
audio.play();
});
答案 1 :(得分:0)
我可以建议一个不同的"修复"我使用html5使用平台(三星智能电视):
var mySound = soundManager.createSound({..});
mySound.load();
setTimeout(function() {
if (mySound.readyState == 1) {
// this object is probably stalled
}
}, 1500);
这是有效的,因为在html5中,与flash不同,' readystate'财产跳过' 0'到' 3'几乎是瞬间,跳过' 1。 ('导致如果曲目开始缓冲它的可玩性...)。
希望这也适合你。