如何理解“;距离“;Web Audio API面板节点的方法

How to understand the relationships between "distance" methods of the Web Audio API panner node

本文关键字:节点 方法 Audio 何理解 距离 Web API      更新时间:2023-09-26

我目前正在努力理解并更好地了解以下方法之间的关系

listener.setPosition(x,y,z);
panner.setPosition(x,y,z);

从现在开始,我将描述我认为我知道的,希望有几个人能告诉我哪里错了,并纠正我

现在,在最基本的情况下,我想象一个球体,这两个"位置"在在中间占据同一个位置。在某种程度上,您可以将panner.setPosition和listener.setPposition()视为我们假设球体中的物理"事物"。

现在,当你改变其中一个的坐标时,你会相对于另一个移动它。

因此,有一点令人困惑。根据我的理解,这两种方法的坐标并不是任何特定的值,但与1和-1确定中间0的范围的x值不同,z指数实际上似乎有一个值,所以如果我给它一个正值,它确实会"把声音推得更远"(或更确切地说,衰减它)。例如,0是近的,200是远的。这有什么价值?

部分答案:

1到-1是硬右/左的原因是z被设置为零,因此在监听器和由panner节点表示的"声源"之间有0个空间。我仍然不清楚z指数的"价值"是多少

我还有其他问题:

1.

如果你有一个假想的"世界",想象中的人正在离声源越来越近或越来越远,你应该为听众的z坐标编程,还是应该为摇摄者的z坐标进行编程。我之所以问这个问题,是因为在这个例子中,摇摄器被编程了,听众呆在同一个地方,但用户界面表明听众正在向声源移动。我想这个问题更多的是关于最佳实践的,因为这两种方法似乎都有效。

2.当我通过默认的panner节点运行任何声音时,它听起来确实不同(更加低沉和"密集",几乎就像同一音频文件的两个实例同时播放,或者高音被抵消)。我认为既然是这种情况,程序员就应该知道一些"设置"的高潮来纠正这种情况。我很想知道是什么。

如果你想要一个并排的例子,下面是两个JSfiddle的例子。一个使用panner节点,另一个不使用。打开这两个文件,一边用耳机听,一边并排播放文件,差别很微妙,但很明显。

JSfiddle with panner node

JSfiddle无平移器节点

例如,0是近的,200是远的。这有什么价值?

我认为这些数字是任意的单位。关于距离模型的一节给出了根据源和听众之间的距离计算增益变化的公式。

此外,规范中提到"PannerNode将输入音频信号缩放/乘以距离增益"

关于您问题的答案:

Q1.-您应该为监听器z坐标编程,还是应该为平移器z坐标编程

这实际上取决于您的应用程序。API被设计为每个AudioContext具有单个Listener。但是,您可以创建多个AudioSources,每个AudioSource都附加一个PannerNode。你可以把它想象成一堆扬声器(AudioSources),你可以在3D空间中定位,但你自己(Listener)也可以四处移动。在这种情况下,取决于您是否希望源相对于彼此移动,您可能希望或不希望侦听器移动。

Q2.-声音不同(更低沉和"密集")

我对此不确定。我以前从未遇到过这种情况。你能举一个例子/演示吗

在尝试各种平移模型的基础上,似乎静音音频是使用HRTF平移模型的结果。HRTF脉冲响应肯定没有平坦的频率响应,并且会给音频上色。您可以使用equalpower平移模型。

请注意,在即将到来的WebAudio更改中,许多事情都会发生变化。你可以在这里阅读更多信息https://github.com/WebAudio/web-audio-api/issues/372