我正在使用 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 ogg 的 mp3 用于所有其他人
- 有几次,Opera 加载的文件少于 32 个,但在 9/10 的情况下,Opera 加载了!!!完全正确!!!156 个声音中的 32 个,这些文件并不完全相同 6.有什么解决方法吗?我想避免将更多声音合并到一个中并只播放适当的部分
测试浏览器:opera 11.62, ff 11, chromium 18, ie (9),
有没有人遇到过这种行为?我忘记了还是应该设置一些音频元素属性?Opera(和 IE)是否对加载的声音数量有缓存限制?是否可以使用 JS 更改它?