2012-10-21 50 views
4

HTML5音频开始超过

var audio = new Audio("click.ogg") 

我玩的点击声在需要的时候通过

audio.play() 

但有时用户是如此之快,该浏览器不能播放音频时(可能)没有完成播放前一个play的请求,即使它真的只是大约1秒。或者这是一些预加载问题?

如何强制浏览器停止播放并重新开始?没有stop,只有pause在HTML5音频组件中,是否正确?这里可以使用什么样的转向?


更新 - 附加说明:

我有多个的复选框(从div元素组成)与touchend事件。当这些元素被选中时,我播放声音,直观地改变元素并改变内部变量的值。如果用户慢慢地“点击”这些元素,它很好地工作。如果速度快,声音有时会跳过 - 没有音讯了一些“点击” ...

回答

6

这是我一直在使用的代码,它的工作对我来说:

  if(audioSupport.duration > 0 && !audioSupport.paused){ 

       //already playing 
       audioSupport.pause(); 
       audioSupport.currentTime = 0; 
       audioSupport.play(); 

      }else{ 

       //not playing 

       audioSupport.play();  

      } 
+1

我不认为这是甚至是必要的检查,如果它已经打。只要做到这一点... audioSupport.pause(); audioSupport.currentTime = 0; audioSupport.play(); – Mark

+0

而且我也不认为有必要暂停。 – fdrv

1

我发现如何的唯一途径要快速播放短声(如此快以至于第二声在第一声结束之前开始)实际上是加载5或10,如果您必须再次播放但已经播放,则转到下一个不播放的声音:

var soundEls = [];//load 10 audios instead of 1 
    for(var i=0;i<10;i++){ 
     var soundEl = document.createElement('audio'); 
     soundEl.src = url; 
     soundEl.preload = 'auto'; 
     $(this._soundEl).append(soundEl); 
     soundEls.push(soundEl); 
    } 

    var soundElIndex = 0; 

    return {play:function(){ 
     var soundEl = soundEls[soundElIndex]; 

     if(soundEl.duration > 0 && !soundEl.paused){ 

      //already playing, switch to next soundEl 
      soundElIndex++; 
      if(!soundEls[soundElIndex]) soundElIndex=0; 
      soundEls[soundElIndex].play(); 

     }else{ 

      //not playing 
      soundEl.play();  

     } 

    }}; 

结果的,这是你可以真正发挥同样的声音在自身。

虽然可能不是正确的方法。

15

你可以试试这个:

audio.currentTime = 0; 
audio.play(); 

它很适合我,

+0

伟大的解决方案。更快,然后例外的答案。泰 – fdrv