ゲームのプログラミングにHTML5を使用しています。私が今遭遇している障害は、効果音を再生する方法です。
特定の要件は少数です。
- 複数のサウンドを再生してミックスし、
- 同じサンプルを複数回再生し、場合によっては再生を重ねて、
- 任意の時点でサンプルの再生を中断し、
- できれば(低品質の)RAW PCMを含むWAVファイルを再生してくださいが、もちろん変換できます。
私の最初のアプローチは、HTML5 <audio>
要素を使用して、ページ内のすべてのサウンドエフェクトを定義することでした。FirefoxはWAVファイルを完全に再生しますが、#play
複数回呼び出しても実際にはサンプルが複数回再生されるわけではありません。HTML5仕様についての私の理解から、<audio>
要素は再生状態も追跡するので、それが理由を説明しています。
私の当面の考えは、オーディオ要素のクローンを作成することでした。そのため、次の小さなJavaScriptライブラリを作成しました(jQueryに依存します)。
var Snd = {
init: function() {
$("audio").each(function() {
var src = this.getAttribute('src');
if (src.substring(0, 4) !== "snd/") { return; }
// Cut out the basename (strip directory and extension)
var name = src.substring(4, src.length - 4);
// Create the helper function, which clones the audio object and plays it
var Constructor = function() {};
Constructor.prototype = this;
Snd[name] = function() {
var clone = new Constructor();
clone.play();
// Return the cloned element, so the caller can interrupt the sound effect
return clone;
};
});
}
};
これでSnd.boom();
、Firebugコンソールから実行してを再生snd/boom.wav
できますが、同じサンプルを複数回再生することはできません。この<audio>
要素は、サウンドエフェクトを再生するためのものではなく、実際にはストリーミング機能のようです。
これを実現するための賢い方法はありますか?HTML5とJavaScriptのみを使用してください。
また、私のテスト環境はUbuntu 9.10上のFirefox 3.5です。私が試した他のブラウザー(Opera、Midori、Chromium、Epiphany)では、さまざまな結果が得られました。何も再生しないものや、例外をスローするものもあります。