我正在制作一个自制游戏引擎,我目前正在制作音频引擎的实现。这主要是出于自我教育的原因。我想为通用音频处理创建一个接口包装器,这样我就可以根据需要在OpenAL、XAudio2或其他平台之间切换。我还希望这些代码是可重用的,所以我正在努力使其尽可能完整,并让各种系统实现尽可能多的功能。目前,我专注于XAudio2实现,并可能在以后的日期转移到OpenAL实现。
在过去的几个月里,我读了很多关于3D处理(听者/发射器)、环境影响(混响)、排斥、遮挡、阻碍和直接声音的文章。我希望能够在音频回放中使用这些效果。虽然我已经尽我所能地研究了这些主题,但我找不到任何关于如何遮挡(直接和反射信号消声),阻塞(直接信号消声)或排除(反射信号消声)的例子。阅读MSDN文档似乎被动地引用闭塞,但没有直接关于实现。我发现最好的是一个通用的"使用低通滤波器",这对我没有多大帮助
所以我的问题是:使用XAudio2,如何实现音频反射信号消声(排除)和音频直接信号消声(阻塞)或同时(遮挡)?音频图形会是什么样子,这些与混响环境影响有什么关系?
编辑2013-03-26 :
进一步思考图表,我意识到我可能没有从正确的角度看图表。
图表应该呈现为:源→效果(Submix)→母版
————图是否一般如下所示:
↗→ Direct → Effects ↘
Source →Mastering
↘→ Reflections → Effects ↗
第二个图将分割图,使排除和阻碍可以单独计算;我的部分困惑是,它们将如何被独立处理。
然后,我认为3D音频DSP结构中的混响设置将应用于反射路径;多普勒要么只作用于直射路径要么同时作用于直射路径和反射路径;混响的环境效应只会影响反射路径。这是否接近正确的音频图形模型?
你想让你的图形看起来像这样:
输入数据->低通滤波器->输出
当源变得更受阻时调整低通滤波器。您也可以使用低通滤波器增益来模拟吸收。滤镜的设置最好是让声音设计师能够调整它们的曝光方式。
本文更详细地介绍了声音传播:http://engineroom.ubi.com/sound-propagation-and-diffraction-simulation/
对于像混响这样的环境效果,你只是想让它们在图形的更下方:
输入->低通滤波器->输出->混响----> masterout
这样混响的声音将与被遮挡的声音匹配(否则混响与直接信号不匹配会听起来很奇怪)。
使用低通滤波器听起来模糊和不完整,但实际上并没有比滤波高频和调整增益更多的效果。对于更高级的环境建模,你想研究一些像"复杂场景中动态源实时声音传播的预计算波模拟"(我无法直接链接,因为我还没有足够的代表!),但它可能超出了你想要实现的范围。