如何理解“;距离“;Web Audio API面板节点的方法
How to understand the relationships between "distance" methods of the Web Audio API panner node
我目前正在努力理解并更好地了解以下方法之间的关系
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
- 有条件更新d3.js力图中节点的最佳方法
- 节点如何将文件传递到http.write方法
- 如何使用jasmine节点监视依赖模块内部的方法
- 是否有一种基于“查询”来查询Neo4j中的节点的方法;dateProperty”;
- 未捕获的类型错误:对象#<节点列表>没有方法'addEventListener'
- 有没有一种方法可以使用javascript和节点模块(oracledb)将csv导入oracle数据库
- 是否有一种方法可以在节点中同步执行多个JavaScript文件
- 有没有一种方法可以在javascript中为文本节点添加属性
- 对象在节点js中没有方法push
- 有没有一种方法可以在安装npm之前检查节点和npm的版本
- 不能调用未定义节点.js的方法“forEach”
- 使用 casperjs 抓取文本节点的最快方法
- 验证请求参数的最佳方法是帆.js/节点.js
- 如何在节点/环回中同步调用 model.find 方法
- 有没有一种简单的方法可以在节点上双击 vis.js 创建超链接/javascript-action
- 如何承诺一个节点.js插件方法
- 在联系表单中使用节点邮件程序以外的替代方法
- 节点.js:更改了节点方法
- 将来自服务器的回调集成到流星/节点方法中
- 测试模块的未导出节点方法