7

サウンド付きのHTML5キャンバスゲームがありますが、発生している問題の1つは、サウンドが再生されると、サウンドの再生が終了するまで他のすべてのアクションが停止することです。このコードを使用しました

document.getElementById("music").innerHTML="<embed src=\""+surl+"\" hidden=\"true\" autostart=\"true\" loop=\"false\" />"


ここで、surlは、音楽を再生しているスパン要素のサウンドと音楽のURLです。プログラム全体を遅らせることなくサウンドを再生する方法を知っている人はいますか?


かなり大きなファイルで試してみましたが、バックグラウンドで再生されますが、サウンドの開始からゲームの続行までにかなりの遅延があることがわかりました。

4

5 に答える 5

8

ネイティブのHTML5オーディオAPIを使用してみてください。まず、必要なサウンドのインスタンスを作成します。

var ping = new Audio("ping.ogg");

注:これらのオーディオインスタンスをDOMに挿入する必要はありません。

サウンドを再生する準備ができたとき、たとえば誰かがクリックしたとき:

document.querySelector(".ping").addEventListener("click", function() {

    // ping clicked, play ping sound:
    ping.play()
})

pingインスタンスはプリロードされているため、サウンドの再生に遅延はなく、何度でも再生できます。

コーデックのサポートは一貫したクロスブラウザではないため、oggソースとMP3ソース、または別の組み合わせが必要になることに注意してください(サポートテーブルはhttp://en.wikipedia.org/wiki/HTML5_Audioにあります)。 #.3CAudio.3E_element_format_support)。

より下位互換性のあるアプローチが必要な場合は、簡単なAPIを備えた完全なソリューションとしてSoundManager2をお勧めします:http ://www.schillmania.com/projects/soundmanager2/

それ以外の場合、ネイティブHTML5 Audio APIのドキュメントは、https: //developer.mozilla.org/en-US/docs/HTML/Element/audioおよびhttps://developer.mozilla.org/en- にあります。 US / docs / DOM / HTMLAudioElement

于 2013-02-26T00:31:12.497 に答える
1

ユーザーがを使用してオーディオを再生する必要がある外部プラグインに依存しているembedため、パフォーマンスはユーザーごとに大きく異なる可能性があります。

ゲームを念頭に置いて構築されたhowler.jsのようなライブラリを使用することをお勧めします。HTML5オーディオは、特にゲームの場合、正しく理解するのが非常に難しいaudio場合があるため、HTML5要素を自分でいじる代わりに、ライブラリを使用することで、多くの頭痛の種から身を守ることができます。

于 2013-02-26T00:27:59.173 に答える
1

私はこのフレームワークを使用して良い成功を収めました:http ://www.schillmania.com/projects/soundmanager2/

それはまともなクロスブラウザサポートを持っており、JavaScriptでサウンドをプリロード/開始/停止することができます。アニメーションの実行中にサウンドを再生して使用しましたが、遅延は見られませんでした。また、すべてのサウンドアセットがロードされるのを待ってから何かを実行し、その間にロード画面などを表示することもできます。

于 2013-02-26T00:26:21.980 に答える
0

私は他のいくつかのstackoverflowの投稿を少し掘り下げましたが、HTML5では次のことができることがわかりました

var sound=new Audio("hello.wav");

その後、電話します

sound.play();

それでうまくいくようで、遅れはありません。

于 2013-02-26T00:30:47.893 に答える