HTML5编写游戏程序,如何播放音效?
HTML5编写游戏程序,如何播放音效?
具体要求在数量上是很少的:
播放和混合多个声音,
多次播放相同的样本,可能会重叠播放,
在任何时候中断样本播放,
最好播放包含(低质量)原始PCM的WAV文件,但我当然可以转换这些文件。我的第一种方法是使用HTML5 <audio>元素并在页面中定义所有声音效果。火狐对WAV文件的播放效果很差,但是多次调用#play并不能多次播放示例文件。根据我对HTML5规范的理解,<audio>元素还跟踪播放状态,这就解释了为什么。
我的第一个想法是克隆音频元素,因此我创建了以下小型JavaScript库来完成此操作(依赖于jQuery):
var Snd = {
init: function() {
$(“audio”).each(function() {
var src = this.getAttribute(‘src’);
if (src.substring(0, 4) !== “snd/”) { return; }
// Cut out the basename (strip directory and extension)
var name = src.substring(4, src.length – 4);
// Create the helper function, which clones the audio object and plays it
var Constructor = function() {};
Constructor.prototype = this;
Snd[name] = function() {
var clone = new Constructor();
clone.play();
// Return the cloned element, so the caller can interrupt the sound effect
return clone;
};
});
}
};因此,现在我可以从Firebug控制台执行Snd.boom();并播放snd/boom.wav,但是我仍然不能多次播放相同的示例。看起来<audio>元素实际上更像是一个流媒体功能,而不是用来播放声音效果的东西。
有没有一种聪明的方法来实现这一点,最好是只使用HTML5和JavaScript?
我还应该提一下,我的测试环境是Ubuntu 9.10上的Firefox3.5。我尝试过的其他浏览器– Opera、Midori、Chromium、Epiphany –都产生了不同的结果。有些什么都不玩,有些则抛出异常。
1年前