首页 > 解决方案 > 如何将 Web Audio PannerNode 配置为大于一个点(体积)?

问题描述

如何将PannerNode配置为体积?

有很多这样有用的例子。在这里,它们从最简单到最复杂。请注意,在引用用户位置时,我使用的是 X 和 Z 值:

  1. 我想要沿着整条道路的道路的声音。道路是一个多边形:[[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] 处,则声音应该从右前方传到左后方。

  1. 我有一个直角三角形的对象(其中有酒吧的建筑物),边界框为 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。更新多个复杂对象的最近点非常慢。1.2. 这种方法不处理来自用户多个方面的声音,如示例 2.2。
  2. 我可以用 PannerNodes 填充对象,因此对于这一栋建筑,将有 50 个 PannerNodes,而对于道路,将有 500 个 PannerNodes。这似乎是一种疯狂的方法。浏览器一次可以处理多少个 PannerNode?此外,如果用户只移动了半个点,那么声音可能是颗粒状的,因为它们位于两个节点之间。

请让我知道如何使声音大于 1 点。

谢谢,

标签: javascriptwebaudioweb-audio-api

解决方案


推荐阅读