javascript - Javascript 中的空间 (2D) 声音

标签 javascript audio browser

为了我的游戏需要,我需要 2D 声音。这意味着,发射器应该位于二维平面上的某个位置。我如何在 Javascript 中实现这种效果?我需要使用特殊的声音格式还是可以控制扬声器的音量?

我想我可以达到每个扬声器有 2 个音量的地步,但我对如何在 Javascript 中为相同的声音应用不同的音量一无所知。

最佳答案

可以找到准确描述此操作的文章包括演示 here .

为了防止链接失效,我将在下面引用最相关的部分

Luckily, Web Audio API comes with built-in hardware accelerated positional audio features that are quite straight forward to use.

核心思想在下面的代码中展示:

PositionSample.prototype.changePosition = function(position) {
  // Position coordinates are in normalized canvas coordinates
  // with -0.5 < x, y < 0.5
  if (position) {
    if (!this.isPlaying) {
      this.play();
    }
    var mul = 2;
    var x = position.x / this.size.width;
    var y = -position.y / this.size.height;
    this.panner.setPosition(x * mul, y * mul, -0.5);
  } else {
    this.stop();
  }
};

可以找到上面第一个链接中工作演示的完整源代码here .

Offtopic:我考虑过手动重写引用的文章作为此处的自定义答案,但这似乎相对没有意义,因为文章已经足够清楚,而且做双重工作似乎毫无意义/子>


在兼容性方面,只有 flash 和前面提到的代码的组合才能提供真正的跨浏览器定位/平移音频解决方案(因为 flash 在某些移动设备上不可用)。理想情况下,我会建议不要使用音频 API,如果这可以被规避的话,因为规范中的事情不太可能发生变化,因此可能会破坏您的代码(+ 这不太可能在移动设备上无法正常工作)。使用更高级的网络音频 api 唯一有意义的情况是,如果您希望在游戏上至少再工作 6 到 18 个月(因为这可能是实现甚至稳定到可用点所需的时间) .

关于javascript - Javascript 中的空间 (2D) 声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11177791/

相关文章:

javascript - 漂亮图片库中的 Facebook Like 按钮

java - 分层mp3音轨

html - 测试浏览器与我的网站的兼容性

css - 如何使 "overflow: hidden"适用于所有浏览器

javascript - 如何在 JavaScript 中查找与 bool 条件匹配的数组的第一个元素?

javascript - JQuery - 如果单击删除按钮则删除表行

javascript - 从父级更改 iFrame 中 DIV 的 CSS

python - 从在线 mp3 文件中读取元数据

audio - 心理实验中音频的 Unicode 解码错误

javascript - 关闭窗口按钮 - javascript