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 ogg 的 mp3 用于所有其他人
  5. 有几次,Opera 加载的文件少于 32 个,但在 9/10 的情况下,Opera 加载了!!!完全正确!!!156 个声音中的 32 个,这些文件并不完全相同 6.有什么解决方法吗?我想避免将更多声音合并到一个中并只播放适当的部分

测试浏览器:opera 11.62, ff 11, chromium 18, ie (9),

有没有人遇到过这种行为?我忘记了还是应该设置一些音频元素属性?Opera(和 IE)是否对加载的声音数量有缓存限制?是否可以使用 JS 更改它?

4

0 回答 0