私は、css3 と html5 を使用して JavaScript である種のゲームに取り組んでいます。ゲームは複数のサウンド (現在 156) を使用します。それらのほとんどは非常に短く、最大 3 秒です。最初にそれらをロードし、それらを配列に保存し、ユーザーのアクションに従ってそれらを再生します。そのコードは次のとおりです。
var Sounds=[];
var SoundsLoaded = 0;
function AddSound( filename )
{
var sound = new Audio(); //creating a new sound for the game
sound.src = filename;
sound.loop = false;
sound.autoplay=false;
sound.autobuffer=true;
sound.preload="auto";
Sounds.push( sound ); //add it to the container
}
function LoadSounds()
{
for( i = 0; < src.length; i++) //altogether about 150 files
AddSound( src[i] );
for( i = 0; i < Sounds.length; i++ )
{
Sounds[i].addEventListener( "loadeddata", function()
{
SoundsLoaded++;
if( SoundsLoaded == Sounds.length )
{
AllSoundsLoaded(); //continue when all sounds are ready to use
}
});
Sounds[i].addEventListener( "error", function()
{
alert(this.error.code); //alerts with code 4
alert(this.networkState); //alerts with state 3
});
Sounds[i].load();
}
}
Chrome と Firefox ではすべて問題なく動作していますが、Opera と IE には問題があります。いくつかのサウンドがロードされた後、エラーが発生します: MEDIA_ERR_SRC_NOT_SUPPORTED (4) および NETWORK_NO_SOURCE (3)
なぜエラーが発生するのか、私にとっては非常に奇妙です。
- オーディオファイルがそこにあると確信しています
- chromeとfirefoxはすべてのファイルを正しくロードします
- すべての音声ファイルは同じディレクトリにあります
- すべてのオーディオ ファイルは同じコーデック (audio/x-vorbis+ogg) または (audio/mpeg) を使用します。私が使用するsrcは前に設定されています-IEの場合はmp3、その他の場合はogg
- Opera が 32 個未満のファイルをロードしたことが何度かありましたが、9/10 のケースでは Opera がロードされました!!!まさに!!! 156 のサウンドのうち 32 があり、これらのファイルはすべて同じではありません。1 つのサウンドに複数のサウンドをマージして、適切な部分だけを再生することは避けたい
テスト済みブラウザ: オペラ 11.62、ff 11、クロム 18、すなわち (9)、
誰もこの行動に遭遇しましたか?Audio 要素のプロパティを設定するのを忘れましたか? Opera (および IE) には、ロードされたサウンドの数に対するキャッシュ制限がありますか? JSを使用して変更することは可能ですか?