存在在相对于听众的特定位置播放音频的概念,例如在游戏中。
- 在立体声或更多通道中如何实现这一点的细节是什么?
- 我知道远处的耳朵有音量调节和播放延迟(在立体声的情况下),但有人知道细节吗?
- 还有其他考虑吗?
存在在相对于听众的特定位置播放音频的概念,例如在游戏中。
首先,使用耳机执行此操作与使用一对或更大的扬声器集合执行此操作是有区别的。
有一些基本的物理和生理机制:
http://interface.cipic.ucdavis.edu/images/research/pathgeo.gif
哦,还有一些物理机制。(以上两种机制会给听者一个方位角和仰角,但不是距离或深度。)
与距离的平方反比定律。 每当您将声源与听者的距离加倍时,功率强度(瓦特/平方米)就会降低 4 倍(“电压”电平减半),即信号下降 6 dB等级。
从远处过滤。 此外,高频有时会因距离和软表面的反射而比低频衰减更多。传递函数不仅是延迟() 如此遥远的声音可能比更近的声音稍微低通滤波,不那么“清脆”。考虑启动泵动式霰弹枪的经典电影效果声音。考虑一下如果它靠近或远离听起来会是什么样子。它不仅会在更远的时候更安静,而且会不那么清脆。
直接/反射能量比。 如果大脑解码了多个相关的声音到达,那么第一个到达可能被认为是直接路径,而后面的到达是反射。如果直接的能量远大于反射的能量,则声音可能会被认为更接近。如果直接的能量与反射的能量大致相同,则声音可能会被感知得更远。
我想我可以用一些传递函数——矩阵数学来勾勒从源到每只耳朵的 HRTF。这将需要更多时间来查找。不想从我的记忆中做到这一点。 这是一篇很好的维基百科文章。
我没有明确的答案,只能报告我在最近的一次实验中提出和尝试的内容。它似乎相当有效,至少对于主要由 X 轴、Z 轴平面组成的听觉世界而言。算法的优化空间可能相当大。
假设我们有一个在 3D 世界中移动的摄像头位置。我维护了两个虚拟“耳朵”的位置,距离相机指向的方向左右 90 度的固定距离,对应于我们可以称之为虚拟头部的位置。我确定声音到每只耳朵的距离并计算差异。声音被放置在由 32 帧阵列组成的立体声延迟线中(近似于时间量,44100 fps,与空气中的声音速度和真实世界头部的大小相匹配)。帧数可能不是最佳的。一个专用的“读取头”(用于该声音)根据时差定位在滞后的立体声通道上。线性插值用于在计算“读取”时读取信号
在我看来,这比使用音量差异更有说服力,特别是因为滞后的耳朵,带有音量差异,可以接收到明显更安静的信号,因此不能正确掩盖其他声音。恕我直言,一只耳朵从附近的响亮的手提钻转开,应该听不到其他更安静、更远的声音,因为手提钻已经衰减到该耳朵以实现立体声放置。
到目前为止,我发现的文本似乎依赖于滤波和衰减而不是延迟,并且依赖于比计算距离差异所需的简单三角更难理解的数学。我仍在寻找更明确的答案,并将监控这个问题,看看还会出现什么。
我在 java-gaming.org 3D 音频测试上发布了一个演示/示例文件(可以下载并运行 java jar)以征求意见。我收到了一些有趣的反馈,类似于您从 robert bristow-johnson 那里收到的反馈。对于 HRTF,我还没有尝试过实时过滤。据推测,一些低通滤波可以相对便宜地完成,并且对于一些需要通过声音指示一定距离或声学障碍(和消音)的游戏应用程序来说“足够好”。