我目前正在努力了解并获得以下方法之间关系的更好的心理形象
listener.setPosition(x,y,z);
panner.setPosition(x,y,z);
从现在开始,我将描述我认为我知道的内容,并希望有些人会告诉我我错在哪里并纠正我。
现在,在最基本的时候,我想象一个带有这两个"位置"占据中间的同一个地方。在某种程度上,您可以将panner.setPosition和listener.setPosition()看作物理"事物"在我们假设的范围内。
现在,当您更改一个坐标时,您将相对于另一个移动它。
因此有一点困惑。根据我的理解,这两种方法的坐标不是任何特定值,但是与x值不同,其中1和-1确定中间为0的范围,z指数实际上似乎确实有价值,所以如果我给它一个正值,它会把声音推得更远'#34; (或更重要的是 - 减弱它)。例如,0接近,200接近。这有什么价值?
部分答案:
1到-1的原因是硬右/左是因为z被设置为零,因此在收听者和"声源之间有0个空格"它由panner节点表示。我还不清楚什么"价值" z索引是。
我有其他问题:
1
如果你有一个假设的世界"如果一个假想的人越来越远离声源,你应该对听众z坐标进行编程,还是应该对摇摄者z坐标进行编程。我问这个的原因是因为in this example panner被编程并且听众停留在同一个地方但UI建议听众正朝着声源移动。我想这个问题更多的是关于最佳实践,因为它似乎要么有效。
2 当我通过默认的panner节点运行任何声音时,它听起来确实不同(更加低沉和#34;密集",几乎就好像同一个音频文件的两个实例同时播放或高音被取消)。我认为,因为这种情况有一些"设置"程序员应该知道要解决这个问题。我很想知道 是什么。
如果您希望下面的并排示例是两个JSfiddle示例。一个使用panner节点而另一个不使用。打开它们并在听耳机的同时播放文件,差别很微妙但很明显。
答案 0 :(得分:1)
例如,0接近,200接近。这有什么价值?
我认为数字是任意单位。 distanceModel部分给出了根据源和听众之间的距离计算增益变化的公式。
该规范还提到“PannerNode按输入音频信号缩放/乘以输入音频信号”
您的问题的答案:
<强> Q1。 - 您应该对听众z坐标进行编程,还是应该对平移器z坐标进行编程
这实际上取决于您的申请。该API旨在每Listener
个AudioContext
。但您可以创建多个AudioSource,并在每个AudioSource上附加一个PannerNode。您可以将其设想为一组可以在3D空间中定位的扬声器(AudioSources),但您自己(听众)也可以四处移动。在这种情况下,取决于您是否希望源相对于彼此移动,您可能会或可能不希望听众移动。
<强> Q2。 - 听起来不同(更加低沉和“密集”)
我不确定这一点。我之前没遇到过这个。你能给一个例子/演示吗?
基于trying the various panning models,似乎低沉的音频是使用HRTF
平移模型的结果。 HRTF脉冲响应绝对没有平坦的频率响应,并会为音频着色。您可以使用equalpower
平移模型。
请注意,尽管很多这些事情都会在即将到来的WebAudio变化中发生变化。您可以在https://github.com/WebAudio/web-audio-api/issues/372
了解更多相关信息