3D 音频声像计算

问题描述

我也在 math.stackexchange 上发布了这个,但没有取得多大成功。我面临以下 3D 声音设计平移问题。这个想法是当浮动球体从椅子上的原始位置移动时,计算扬声器的归一化平移值 [0...1]。

Virtual Room

假设我在 xyz 空间有一组 N 个点,它们具有特定坐标(在我的屏幕截图中它们是 4)以及一个浮动球体和一个固定的 xyz0 椅子。当球体位于这个 xyz0 时,那么 N 个点的归一化 pan 值都是 1。

当球体从 xyz0 移到某个位置 xyz1 时,它可能会接近一个或多个扬声器。

如果扬声器与 xyz1 的距离小于扬声器与 xyz0 的距离,则该扬声器的声相值为 1。

我的问题是计算新扬声器的归一化声像值 [0..1),这些扬声器的新扬声器的距离大于与椅子的距离。

我试过了:

float Zerodist = distance3d(SpeakerPos,ChairPos);
float Currentdist = distance3d(SpeakerPos,OrbPos);
float v = Currentdist - Zerodist;
if (v <= 0)
    Pan = 1;
else
    Pan = 1 - (v / MaxSpeakerdistance);

但是,这里合适的 MaxSpeakerdistance 除数是多少?我的值 4(在本例中)效果不佳,泛值高于预期。

我还尝试将有问题的扬声器与距离球体更近的扬声器的距离进行比较,但这会产生奇怪的结果,因为当接近一个扬声器时,一个扬声器可能比椅子更靠近新的球体位置,所以平移为 1,但是当再次移动球体使新球体与扬声器的距离大于椅子时,平移可能会突然降为零。

如果所有发言者都在一个圆圈内距离椅子的距离相等,那将是微不足道的。基本上,当球体接近扬声器时,所有距离球体比原来更远的扬声器都应将其值最小化为 0。问题是如何实现这一点。

感谢您的帮助。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)