我正在开发家用游戏引擎,目前正在开发音频引擎。这主要是出于自我教育的原因。我想为通用音频处理创建一个接口(interface)包装,因此可以根据需要或在OpenAL,XAudio2或其他平台之间进行切换。我还希望该代码可重用,因此我试图使其尽可能完整,并让各种系统实现尽可能多的功能。目前,我将重点放在XAudio2实现上,并可能在以后使用OpenAL实现。
在过去的几个月中,我已经阅读了很多有关3D处理(侦听器/发射器),环境影响(混响),排斥,遮挡,障碍物和直接声音的文章。我希望能够在音频播放中使用所有这些效果。尽管我已尽力研究了这些主题,但我找不到任何有关如何实现遮挡(直接和反射信号消声),遮挡(直接信号消声)或排除(反射信号消声)的示例。阅读MSDN文档似乎是对遮挡的被动引用,但与实现无关。我发现最好的是通用的“使用低通滤波器”,对我没有多大帮助
所以我的问题是:使用XAudio2,如何实现音频反射信号的消音(排除)和音频直接信号的消音(阻塞)或同时实现(遮挡)?音频图会是什么样子,它们与混响环境影响如何相关?
编辑2013-03-26 :
在进一步考虑该图时,我意识到我可能没有从正确的 Angular 查看该图。
该图应该显示为:源→效果(子混合)→母带处理
-要么-
该图应一般如下显示:
↗→ Direct → Effects ↘
Source →Mastering
↘→ Reflections → Effects ↗
第二张图将拆分图,以便可以分别计算排除和阻塞。我困惑的一部分是如何独立处理它们。
然后,我认为3D音频DSP结构的混响设置将应用于反射路径。多普勒将仅应用于直接路径,或者应用于直接路径和反射路径;以及混响环境影响只会影响反射路径。这是否接近正确的音频图模型?
最佳答案
您希望您的图形看起来类似于以下内容:
输入数据--->低通滤波器--->输出
随着光源的阻塞,您可以调整低通滤波器。您还可以使用低通滤波器增益来模拟吸收。最好设置过滤器设置,以使它们可以通过声音设计器进行调整的方式暴露出来。
本文将详细介绍声音传播:http://engineroom.ubi.com/sound-propagation-and-diffraction-simulation/
就此而言,然后将其传递给图表以了解诸如混响之类的环境影响,您只希望它们在图表的下方:
输入--->低通滤波器--->输出--->混响---->主控输出
这样,混响声音将与被遮挡的声音匹配(否则混响与直接信号不匹配的声音将听起来很奇怪)。
使用低通滤波器听起来很模糊且不完整,但实际上,除了滤波高频和调整增益之外,效果还不多。对于更高级的环境建模,您想研究诸如“用于复杂场景中动态源实时声音传播的预计算波模拟”(由于我没有足够的代表,我无法直接链接!),但是它可能远远超出了您想要实现的范围。