c++ - 如何根据物体位置和速度、玩家位置和前向 vector 计算左耳和右耳的音量? (3D 声音)

标签 c++ unity3d audio game-engine

请假设:

3D 体积的最小距离 = 1.0;
3D 体积的最大距离 = 100.0;

这是函数的声明:

对象可以是靠近玩家的球。

void CalculateSoundVolume(Vec3 objectPosition, 
                          Vec3 objectVelocity, 
                          Vec3 userHead, 
                          Vec3 userFoward, 
                          float& leftEarVolume, 
                          float& rightEarVolume)  
{

}

最佳答案

您可能会开始使用这个基本事实:

声速是声波在弹性介质中传播时每单位时间传播的距离。在 20 °C (68 °F) 的干燥空气中,声速为每秒 343 米(1,125 英尺/秒;1,235 公里/小时;767 英里/小时;667 节),或一公里 2.91 秒或一英里4.69 秒。

声压级 (SPL) 会随着距离增加一倍而降低 (−)6 dB。声压下降为初始值声压的1/2倍(50%)。它以距离的比率 1/r 下降。声强级随距离增加一倍而降低 (−)6 dB。

详细阐述一个基本的传播模型,告诉您您的玩家在现实生活中会听到什么。

关于c++ - 如何根据物体位置和速度、玩家位置和前向 vector 计算左耳和右耳的音量? (3D 声音),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45395996/

相关文章:

c++ - 'operator==' 具有自己的类和 std::string_view 的不明确重载

c++ - 无法使用 TagLib 读取标签

c++ - C++有自初始化指针吗

android - 强制MediaRecorder生成AAC LC

javascript - 可视化 html5 音频

windows - 如何使用 NAudio 获取当前使用 powershell 播放音频的应用程序的名称?

char 和 int 之间的 C++ 转换结果错误

c# - CommandInvokationFailure : Unable to merge android manifests. 有关详细信息,请参阅控制台。我已经对项目中的所有 list 文件进行了更改

c# - 使用 WPF 或 Unity 进行简单的游戏开发

c# - 使用 "X"进行十六进制格式化时出现 FormatException