2012-06-12 6 views
5

Javascriptでオーディオを巻き戻すのに少し問題があります。私は基本的に、カウントダウンの終わりに向かって毎秒ビープ音を鳴らすカウントダウンを持っています。なぜ私のオーディオが巻き戻しされないのですか?

私は使ってみました。

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

1秒ごとに新しいサウンドを読み込まなければならないと思う毎秒ビープ音はありませんでした。私はその後、サウンドを外部に読み込み、次のコードでトリガーしてみました。

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

は、これが唯一の完全に一旦サウンドを再生します(これは最初のプレイスルーの後に0.19秒の時間をロギングコンソールで示されている)、それを巻き戻しに失敗しました。

ここに何か不足していますか?

答えて

7

google chromeでは、同じドメインにオーディオファイルがある場合にのみ動作することに気付きました。オーディオファイルが同じドメインにある場合は問題ありません。イベント設定.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() 

は*ところで、私はまた、my_audio.playをトリガーする 'canplay' のためのEventListener()を使用します。アンドロイドに必要であり、また、*

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で記述されている動作は変更されていません。

この問題を回避するには、オーディオデータをベース64エンコーディングでエンコードし、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); 
}; 

(私はこの問題にはバグレポートや参照がないことを驚いています...または多分私のGoogleの-FUが十分に強力ではありません。)

関連する問題