audio - XAudio2 遮挡处理

标签 audio directx audio-processing xaudio2 occlusion

我正在研究自制游戏引擎,目前正在研究音频引擎的实现。这主要是出于自我教育的原因。我想为通用音频处理创建一个接口(interface)包装器,因此我可以根据需要在 OpenAL、XAudio2 或其他平台之间切换。我也希望这段代码是可重用的,所以我试图让它尽可能完整,并让各种系统实现尽可能多的功能。目前,我专注于 XAudio2 实现,并且可能会在以后转向 OpenAL 实现。

在过去的几个月里,我读了很多关于 3D 处理(监听器/发射器)、环境效果(混响)、排斥、遮挡、阻塞和直达声的文章。我希望能够在音频播放中使用任何这些效果。虽然我已经尽我所能研究了这些主题,但我找不到任何关于如何实际实现遮挡(直接和反射信号消音)、阻塞(直接信号消音)或排斥(反射信号消音)的示例。阅读 MSDN 文档似乎是对遮挡的被动引用,但没有直接涉及实现。我发现的最好的是通用的“使用低通滤波器”,这对我没有多大帮助

所以我的问题是:使用 XAudio2,如何实现音频反射信号消音(排除)和音频直接信号消音(阻塞)或同时实现(阻塞)?音频图会是什么样子,这些与混响环境效果有何关系?

编辑 2013-03-26 :
在进一步思考图表时,我意识到我可能没有从正确的角度看图表。

图表应该是:源→效果(子混音)→母带
-或者-
该图是否应大致如下所示:

       ↗→   Direct   → Effects  ↘
Source                            →Mastering
       ↘→ Reflections → Effects ↗

第二个图将分割图,以便可以分别计算排除和阻塞;我的部分困惑是如何独立处理它们。

那么,我认为来自 3D 音频 DSP 结构的混响设置将应用于反射路径;多普勒将应用于直接路径或直接路径和反射路径;并且混响环境效果只会影响反射路径。这是否接近正确的音频图模型?

最佳答案

您希望您的图表看起来类似于:

输入数据--->低通滤波器--->输出

当源变得更受阻时,您可以调整低通滤波器。您还可以使用低通滤波器增益来模拟吸收。最好设置过滤器设置,以便它们以声音设计师可以调整的方式显示。

本文更详细地介绍了声音传播:http://engineroom.ubi.com/sound-propagation-and-diffraction-simulation/

就这一点而言,然后沿着图表传递环境效果(例如混响),您只希望那些在图表下方更远的地方:

输入--->低通滤波器--->输出--->混响---->主输出

这样,混响的声音将与被遮挡的声音相匹配(否则,混响与直接信号不匹配会听起来很奇怪)。

使用低通滤波器听起来模糊且不完整,但实际上除了过滤高频和调整增益之外,效果并没有太多。对于更高级的环境建模,您想研究诸如“用于复杂场景中动态源的实时声音传播的预计算波模拟”(我无法直接链接,因为我还没有足够的代表!)但它可能远远超出你想要达到的范围。

关于audio - XAudio2 遮挡处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15628890/

相关文章:

iphone - 如何在uiscrollview中滑动图像时添加短声音

c++ - FXC : error X3501: 'main' : entrypoint not found

directx - 释放顶点/索引缓冲区会导致警告

c# - 如何计算信号的过零率?

python - 我的 librosa MFCC 输出正确吗?我认为使用 librosa MFCC 时得到的帧数错误

audio - 如何从音频剪辑中删除漂移的直流偏移?

javascript - 如何在 IE 上播放 .wav 文件?

java - 如何使用javax.sound.sampled.LineListener?

c++ - Matrix Hell - 将 3D 纹理中的点转换为世界空间

php - 计算两个声音样本之间的差异