2017-10-19 50 views
0

私はJavaScriptで非常に簡単なゲームを書いています。私は、「再生」機能を呼び出してからオーディオが再生を開始するまでに約0.5秒の遅延があることに気付きました。これは正常ですか? JavaScriptオーディオ再生の遅延

この

は私が持っているコードです:

var audio = new Audio("games/aventura4/sfx/hit.wav"); 
audio.play(); 

私も一度だけオーディオの変数を初期化しようとしている、その後、ちょうどaudio.play()を呼び出した(やった後audio.currentTime = 0、もちろん) 、そして遅れはまだそこにある!

何か間違っていますか? (私はSafariでこれを試しています、btw)。

編集:これを試した後、問題はSafariでこれを実行しているようです。 Chromeに遅延はありません。しかしそれはSafariでなぜそれが起こるのか疑問を残していますか?

編集2:は、それが、この他の質問に関連するかもしれないようだ。HTML5 Audio tag on Safari has a delay

+0

私はわかりませんが、それが原因でバッファリングの可能性が... – void

+0

は、ネットワーク]タブをチェックして、wavファイルがダウンロードされたときに参照してください。サーバーからフェッチするときに時間がかかる可能性があります。ページの読み込み時にフェッチしようとします –

答えて

1

ます(手動またはコードでそれを行うかどうか)ネットワーク要求が取得するために発行された「再生」ボタンを押すとオーディオ。完全なファイルがダウンロードされる前に開始することができますが、開始する前にバッファに適切な量をダウンロードする必要があります。そうしないと、再生しようとするとひどく詰まってしまいます。

あなたは、オーディオが事前にロードされたいブラウザへのヒントができます。

<audio preload="auto"> 

しかし、それは単にヒントであり、それは何かを保証するものではありません。この属性をあまりにも自由に使うと、生産性が低下する可能性があります。

JavaScriptソリューションを使用すると、オーディオを先にインスタンス化できます。 oncanplaythroughイベントが発生し、再生に十分なバッファリングが行われたときに発生します。

+0

ありがとう!私はこれを試みたが、私は同じ遅れを見る。いくつかの実験の後で私は問題がSafariだと思う!それはすべてのクロムで遅滞なく動作します... –

0

私はこれを経験しませんが、私は少し違います。私のHTMLファイルには、オーディオタグがあります。

<audio id="hitSound" src="games/aventura4/sfx/hit.wav""></audio> 

次に、このサウンドを呼び出すためのjavascript関数を作成します。

function playHitSound() { 
    document.getElementById("hitSound").play(); 
} 

サウンドを再生したいときにこの関数を呼び出します。どんなタイプの遅延もなく私のために働きます。

+0

ありがとう!私はこれを試みたが、私は同じ遅れを見る。いくつかの実験の後で私は問題がSafariだと思う!それはすべてのChromeで遅滞なく動作します... –

0

ファイルを取得が完了するまで待機している要求&を行うことで、ファイルを取得の遅れがあります....周りに1つの作業は、Ajaxを呼び出してページのロード上の.wavファイルを呼び出すことであろう... (.playする#sourceを使用し

$.ajax({ 
      url: 'games/aventura4/sfx/hit.wav', 
      cache: true,   
      success: function(data) {    
       $('audio #source').attr('src', data); //store it in some ID 
      } 

を応答キャッシュ)

+0

ありがとう!私はJavascriptやHTML以外のものを使用したくないと思う。決してajaxを使用しなかったので、私はむしろ今から離れています:) –

関連する問題