如何从soundmanager绑定HTML5 :: stalled事件?

时间:2012-08-19 14:54:33

标签: ipad html5 soundmanager2 stalled

我正在尝试编写一个使用[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音频?

2 个答案:

答案 0 :(得分:0)

我用以下解决方案解决了这个问题。这没有记录并通过逆向工程找到。 这一切都与访问html音频对象有关,该对象可在_a。

下使用
currentSound = soundManager.createSound({..});
currentSound._a.addEventListener('stalled', function() {
     if (!self.currentSound) return;
    var audio = this;
    audio.load();
    audio.play();
});

该方法的主体基于this post about html5 stalled callback in safari

答案 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。 ('导致如果曲目开始缓冲它的可玩性...)。

希望这也适合你。