1

私は、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)

なぜエラーが発生するのか、私にとっては非常に奇妙です。

  1. オーディオファイルがそこにあると確信しています
  2. chromeとfirefoxはすべてのファイルを正しくロードします
  3. すべての音声ファイルは同じディレクトリにあります
  4. すべてのオーディオ ファイルは同じコーデック (audio/x-vorbis+ogg) または (audio/mpeg) を使用します。私が使用するsrcは前に設定されています-IEの場合はmp3、その他の場合はogg
  5. Opera が 32 個未満のファイルをロードしたことが何度かありましたが、9/10 のケースでは Opera がロードされました!!!まさに!!! 156 のサウンドのうち 32 があり、これらのファイルはすべて同じではありません。1 つのサウンドに複数のサウンドをマージして、適切な部分だけを再生することは避けたい

テスト済みブラウザ: オペラ 11.62、ff 11、クロム 18、すなわち (9)、

誰もこの行動に遭遇しましたか?Audio 要素のプロパティを設定するのを忘れましたか? Opera (および IE) には、ロードされたサウンドの数に対するキャッシュ制限がありますか? JSを使用して変更することは可能ですか?

4

0 に答える 0