2011-12-22 6 views
3

Facebook用のHTML5ゲームを開発しています。Chromeで複数の音を再生する

<audio style="visibility: hidden;" controls="controls" id="sound-0"> 
    <source src="sound/sound_new.ogg" type="audio/ogg"/> 
    <source src="sound/sound_new.mp3" type="audio/mp3"/> 
</audio> 
<audio style="visibility: hidden;" controls="controls" id="sound-1"> 
    <source src="sound/sound_new.ogg" type="audio/ogg"/> 
    <source src="sound/sound_new.mp3" type="audio/mp3"/> 
</audio> 
<audio style="visibility: hidden;" controls="controls" id="sound-2"> 
    <source src="sound/sound_new.ogg" type="audio/ogg"/> 
    <source src="sound/sound_new.mp3" type="audio/mp3"/> 
</audio> 
<audio style="visibility: hidden;" controls="controls" id="sound-3"> 
    <source src="sound/sound_new.ogg" type="audio/ogg"/> 
    <source src="sound/sound_new.mp3" type="audio/mp3"/> 
</audio> 
<audio style="visibility: hidden;" controls="controls" id="sound-4"> 
    <source src="sound/sound_new.ogg" type="audio/ogg"/> 
    <source src="sound/sound_new.mp3" type="audio/mp3"/> 
</audio> 
<audio style="visibility: hidden;" controls="controls" id="sound-5"> 
    <source src="sound/sound_new.ogg" type="audio/ogg"/> 
    <source src="sound/sound_new.mp3" type="audio/mp3"/> 
</audio> 

と音を開始し、次のJavascript:

if (this.hitFlag > 6) this.hitFlag = 1; 
var soundElem = document.getElementById('sound-' + (this.soundFlag % 6) + '0'); 
soundElem.play(); 

マウスのクリックするたびに、サウンドイベントをトリガ私は、次のHTMLコードを持っています。問題はクロムがクリック数十回のクリック音が消えるか、非常に大きな遅延(数十秒)で再生を開始することです。 FFやOperaで再生しても問題ありません。

+1

Chromeのバグのような音... – home

+1

Chromeは

答えて

2

これは間違いなくバグですが、実際の要素ではなく、サウンドの再生部分と関係していると思います。オーディオをプリロードし、サウンドを再生するたびに新しいオーディオオブジェクトをインスタンス化し、最後に各ティックでサウンドオブジェクトをチェックして、演奏が終了してメモリをクリーンアップできるかどうかを判断することで、簡単に回避できます。

プリロードは、もちろん、のようなものです:

var _mySnd = new Audio('my/snd/file/is/here.mp3'); 

のインスタンス化は、のようなものです:私はこのようなものを使用

for (var i = 0; i < _sndCollection.length; i++) 
{ 
    if (_sndCollection[i].currentTime >= _sndCollection[i].duration) 
    { 
     _sndCollection.splice(i, 1); 
     i--; 
    } 
} 

var _sndCollection = []; 
var n = _sndCollection.length; 

_sndCollection[n] = new Audio(); 
_sndCollection[n].src = _mySnd.src; 
_sndCollection[n].play(); 

とクリーンアップのチェックは次のようになり私自身のHTML5ゲームエンジンでは、これまで完全に動作していました。

+0

ありがとう@ceprovence私はクリスマスの直後にあなたのコードを試してみましょう!あなたにハッピークリスマス! –

+0

これは(またはこのような)動作するように見えますが、サンプルコードの.mp3のような1つのファイルタイプには入りませんか?

+0

フォローアップ:システムを使用している_mySndのプリロードが_sndCollection [n]に拡張されていないかのように、音が遅れています。 – Dragonfly

関連する問題