2012-10-21 49 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