首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >JavaScript / HTML5中的音效

JavaScript / HTML5中的音效
EN

Stack Overflow用户
提问于 2009-12-20 03:57:01
回答 17查看 291.1K关注 0票数 324

我正在使用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 --都产生了不同的结果。有些什么都不玩,有些则抛出异常。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1933969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档