为了我的游戏需要,我需要 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/