2012-06-12 19 views
5

我在使用Javascript重新播放音頻時遇到了一些麻煩。我基本上有一個倒數計時器,它在倒計時結束時每秒發出一聲嗶嗶聲。爲什麼不是我的音頻倒帶?

我試過使用;

var bip = new Audio("http://www.soundjay.com/button/beep-7.wav"); 
bip.play(); 

但它並沒有每秒鐘發出嗶嗶聲,我猜測它每秒鐘都要加載一個新的聲音。然後,我嘗試從外部加載聲音並使用以下代碼觸發它。

bip.pause(); 
bip.currentTime = 0; 
console.log(bip.currentTime); 
bip.play(); 

但這僅播放聲音一次,然後完全不能倒帶(這是由在控制檯登錄0.19秒的時間,第一通關後示出)。

有什麼我在這裏失蹤?

回答

7

在谷歌瀏覽器中,我注意到它只有在音頻文件在同一個域中時纔有效。如果音頻文件在同一個域中,我沒有問題。事件設置.currentTime的作品。

跨域:

var bip = new Audio("http://www.soundjay.com/button/beep-7.wav"); 
bip.play(); 
bip.currentTime; //0.10950099676847458 
bip.currentTime = 0; 
bip.currentTime; //0.10950099676847458 

同域:

var bip = new Audio("beep-7.wav"); 
bip.play(); 
bip.currentTime; //0.10950099676847458 
bip.currentTime = 0; 
bip.currentTime; //0 

我試着用搜索引擎了一段時間,會發現沒有在這個甚至任何討論規範。

+0

有什麼奇怪的錯誤。這似乎修復它,雖然非常感謝你:) 我打算最終在同一個域上託管它,但我想我會在JSfiddle首先嚐試它來節省時間哈哈。 –

+0

[this](http://stackoverflow.com/questions/6273975/audio-tags-rewind)說設置currentTime是容易出錯的。 – dsdsdsdsd

3

當我要退,我只是再次加載音頻:

my_audio.load() 

*順便說一句,我也用一個事件偵聽爲 'canplay' 觸發my_audio.play()。看來,這是必要的機器人,也許其他設備也*

0

爲了進一步dsdsdsdsd的帶着幾分油漆由數字爲「整個家當」

注回答:在我的應用程序,loc1是指歌曲的存儲位置

// ... code before ... 

tune = new Audio(loc1); // First, create audio event using js 

// set up "song's over' event listener & action 
tune.addEventListener('ended', function(){ 
tune.load(); //reload audio event (and reset currentTime!) 
tune.play(); //play audio event for subsequent 'ended' events 
},false); 

tune.play();  // plays it the first time thru 

// ... code after ... 

我花了好多天試圖找出我在做什麼錯了一個虛擬的,但現在都正常工作......在桌面瀏覽器,至少.. 。

0

從Chrome版本開始,@Esailija描述的行爲沒有改變。

我通過使用base64編碼對音頻數據進行編碼並使用data: URL將數據提供給Audio()來解決此問題。

測試代碼:

snd = new Audio('data:audio/ogg;base64,[...base64 encoded data...]'); 
snd.onloadeddata = function() { 
    snd.currentTime = 0; 
    snd.play(); 
    setTimeout(function() { 
    snd.currentTime = 0; 
    snd.play(); 
    }, 200); 
}; 

(我很驚訝,有關於這一問題沒有錯誤報告或引用...也許我的谷歌福不夠強。)

相關問題