Javascript 如何理解“之间的关系”;“距离”;Web音频API panner节点的方法

Javascript 如何理解“之间的关系”;“距离”;Web音频API panner节点的方法,javascript,html5-audio,web-audio-api,Javascript,Html5 Audio,Web Audio Api,我目前正试图理解并更好地理解以下方法之间的关系 listener.setPosition(x,y,z); panner.setPosition(x,y,z); 从现在开始,我将描述我认为我知道的,希望一些人会告诉我哪里错了,并纠正我 现在,在最基本的情况下,我想象一个有两个“位置”的球体在中间占据同一个位置。在某种程度上,您可以将panner.setPosition和listener.setPosition()视为我们假设的球体中的两个物理“东西” 现在,当你改变其中一个的坐标时,你移动它相对

我目前正试图理解并更好地理解以下方法之间的关系

listener.setPosition(x,y,z);
panner.setPosition(x,y,z);
从现在开始,我将描述我认为我知道的,希望一些人会告诉我哪里错了,并纠正我

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

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

所以有一点让人困惑。从我所理解的,这两种方法的坐标不是任何特定的值,但是与x值不同的是,1和1在中间确定了0的范围,Z指数实际上似乎有一个值,所以如果我给它一个正值,它就“把声音推得更远”(或者更多地指向点-衰减它)。例如,0表示接近,200表示远。这有什么价值

部分答案:

1到-1是硬右/左的原因是因为z被设置为零,因此侦听器和“声源”(由panner节点表示)之间的空间为0。我仍然不清楚z指数是什么“值”

我还有其他问题:

1.

如果你有一个假想的“世界”,其中一个假想的人正在离声源越来越近或越来越远,你应该编程监听者z坐标还是编程平移者z坐标。我问这个问题的原因是,平移器已经编程,监听器保持在同一个位置,但UI表明监听器正在向声源移动。我想这个问题更多的是关于最佳实践,因为这两种方法似乎都能奏效

2. 当我通过默认的panner节点运行任何声音时,听起来都不一样(更加低沉和“密集”,几乎就像同一个音频文件的两个实例同时播放,或者高音被取消)。我假设,既然是这种情况,就有一些“设置”的高潮,程序员应该知道如何解决这个问题。我很想知道那是什么

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

例如,0表示接近,200表示远。这有什么价值

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

规范还提到“PannerNode将输入音频信号缩放/乘以距离增益”

有关您问题的答案:

Q1-您应该对侦听器z坐标进行编程还是对平移器z坐标进行编程

这取决于你的应用。该API设计为每个
AudioContext
有一个
监听器。但您可以创建多个音频源,每个音频源都连接一个PannerNode。你可以想象这是一组扬声器(音频源),你可以在3D空间中定位,但你自己(听众)也可以四处移动。在这种情况下,根据您是否希望源相对于彼此移动,您可能希望侦听器移动,也可能不希望侦听器移动

Q2-听起来不一样(更加低沉和“浓密”)

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

基于这一点,低沉的音频似乎是使用
HRTF
平移模型的结果。HRTF脉冲响应肯定没有平坦的频率响应,并且会给音频着色。您可以改用
equalpower
平移模型


请注意,尽管在即将到来的WebAudio变革中,这些东西中的很多都将发生变化。你可以在这里阅读更多关于它的内容

我用两个jsfiddle编辑了我的文章,比较了相同的声音,有没有平移器node@TaoistWA我认为链接是错误的。您提到的Panner节点似乎是一个过滤器,我用正确的更改分叉了JSFIDLE。添加了不同的平移模型。我修改了它,我不得不提醒自己mediaElementSource方法,并且正在查看另一个JSFIDLE…我不小心复制了错误的方法