Javascript中的空间(2D)声音

cor*_*zza 12 javascript browser audio

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

我想我可以达到每个扬声器有2个音量的程度,但我对如何在Javascript中为同一个声音应用不同音量感到无能为力.

Dav*_*der 7

可以在此处找到包含演示的文章.

为了防止链接腐烂,我将引用下面最相关的部分

幸运的是,Web Audio API具有内置的硬件加速定位音频功能,非常简单易用.

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

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();
  }
};
Run Code Online (Sandbox Code Playgroud)

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

Offtopic:我考虑过手工重写引用的文章作为一个定制的答案,但这似乎相对毫无意义,因为这篇文章已经足够清楚了,做双重工作似乎毫无意义


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