RTS游戏HTML5音频Chrome MP3和OGG Stutters and Stops

RTS Game HTML5 Audio in Chrome MP3 and OGG Stutters and Stops

本文关键字:OGG Stutters and Stops MP3 游戏 HTML5 音频 Chrome RTS      更新时间:2023-09-26

我们正在用HTML5/JavaScript编写一个Canvas演示实时战略(RTS)游戏,一切都很正常。然而,在Chrome(最新版本)中,声音一直断断续续,最终就放弃了。该代码在最新的Firefox、IE9和Safari中运行良好(尽管在iOS4 iPhone/iPad上根本没有声音,但显然这是苹果的商业决定)。你可以在下面的链接上看到,一次听到几个以上的声音就会引起问题。

http://www.enterprisewarfare.com/Play.aspx

简化的声音播放代码如下,注意每个声音存在4次(AUDIO_CHANELS_PER_FILE)以模拟多个通道。调整此数字不会导致声音丢失,因此与到达阵列的末尾或再次播放相同的音频对象无关。我们已经尝试了OGG和MP3文件格式,在IE9(MP3)和Firefox(OGG)中一切正常。我们也试着把文件找回来,但没有成功。

    this.PlaySound = function(sId)
    {
        var iSoundMapIndex;
        var asoundChannels;
        if(sId == null || sId.length == 0) return;
        // Grab sound channels array
        iSoundMapIndex = this.SoundMap[sId];
        asoundChannels = this.Sounds[iSoundMapIndex];
        if(asoundChannels == null)
        {
            this.World.AddMessage("Unable to find sound '"" + sId + "'".");
            return;
        }
        // play the next in sequence
        asoundChannels[this.SoundChannel[iSoundMapIndex]].volume = 1;
        asoundChannels[this.SoundChannel[iSoundMapIndex]].play();
        this.SoundChannel[iSoundMapIndex]++;
        if(this.SoundChannel[iSoundMapIndex] == this.AUDIO_CHANNELS_PER_FILE) this.SoundChannel[iSoundMapIndex] = 0;
    }

这似乎是铬和铬的问题。我建议查看bug报告和开发人员对它们的回答,或者等待它得到解决,同时忽略问题。

遗憾的是,在javascript方面没有比我更有经验的人提出任何关于变通方法的建议。我对这个问题投了赞成票,希望你能找到一些帮助。

原来这是Chrome中的一个错误,现在似乎已经修复了。声音加载和多个通道仍然存在一些问题,但声音的完全分解似乎已经解决。