javascript - 如何将 Web Audio PannerNode 配置为大于一个点(体积)?
问题描述
如何将PannerNode配置为体积?
有很多这样有用的例子。在这里,它们从最简单到最复杂。请注意,在引用用户位置时,我使用的是 X 和 Z 值:
- 我想要沿着整条道路的道路的声音。道路是一个多边形:[[1,1], [1,100], [5,100], [5,1]]
这是当用户在道路上的不同点时应该发生的事情。您可以测试这个交互式示例实际发生的情况:
1.1. The user is walking along side the road at [8,5], and they're facing with their left ear to the road (0,0,-1). They go to [8, 10], [8,15], [8,50] and the whole time, they are hearing the road at the same volume. Currently, the sound gets farther away behind as the user moves.
1.2. 当用户从 y 平面返回时,他们面向道路,但他们位于 [3, 115]。由于他们面向方向为 (0,0,1) 的道路,因此听起来好像它在用户面前。目前,声音很远很远。
1.3. 当用户在 [3, 50] 时,声音应该在双耳中播放。
1.4. 如果用户面向 (1,0,-1) 并且在 [8, 5] 处,则声音应该从右前方传到左后方。
- 我有一个直角三角形的对象(其中有酒吧的建筑物),边界框为 10 x 10。我想将酒吧的声音播放为建筑物。该建筑物的坐标为:[[1,10]、[10,10]、[10,1]]。
2.1。当用户沿着建筑物的右侧行走 [15,3]、[15,6] 和 [15, 9],并且用户面向 y 平面向上时,左耳中的声音应该保持不变.
2.2. 当用户在 [3,3] 面朝上 y 平面时,声音应该在用户的右侧和用户的前面。
2.3. 当用户位于 [9, 9] 时,声音在双耳中播放的音量相同。
我一直在查看锥体属性(PannerNode.coneInnerAngle、PannerNode.coneOuterAngle 和 PannerNode.coneOuterGain),但它们看起来只处理声音对象的 1 点大小并改变声音所面对的方向(如Boombox示例)。
我可能误解了这些属性是如何工作的,但 Web Audio API 似乎不允许多个大小的声音对象。
我想到了两种可能的解决方案,但都很难看:
- 计算离听者最近的点,并在每次听者移动时将对象的位置更改为最近的点。当听者在对象内部时,声音与用户位于同一位置。这种方法有两个主要问题: 1.1。更新多个复杂对象的最近点非常慢。1.2. 这种方法不处理来自用户多个方面的声音,如示例 2.2。
- 我可以用 PannerNodes 填充对象,因此对于这一栋建筑,将有 50 个 PannerNodes,而对于道路,将有 500 个 PannerNodes。这似乎是一种疯狂的方法。浏览器一次可以处理多少个 PannerNode?此外,如果用户只移动了半个点,那么声音可能是颗粒状的,因为它们位于两个节点之间。
请让我知道如何使声音大于 1 点。
谢谢,
解决方案
推荐阅读
- r - R 字典和列表
- android - 在 ScrollView 中显示图像?
- javascript - 在谷歌上设置一个带有动作的计时器
- excel - 在 excel 中从另一个插件启动一个插件
- angular - Angular with Angular Material - MatTable(s) 和多个 MatTab(s)
- html - 从 AWS S3 发送邮件时遇到问题
- python - 在 Mac 上的 pyzo 中保存动画
- python - Python CX_Oracle:如何在另一个查询中使用返回的元组
- asp.net-core - 在 Vue.js 站点上使用带有 HardSource 的 Webpack 意外和神秘的 dotnet 运行“失败”消息
- c# - QR 解码不适用于 ZXing 和 Aforge