XAudio2 音频效果

音频效果是一个对象,它接受传入的音频数据,并在传递数据之前对数据执行一些操作。 可以使用效果执行各种任务,包括向音频流添加混响和监视峰值音量级别。

效果链

任何 XAudio2 语音都可以承载一系列音频效果。 可以使用 XAUDIO2_EFFECT_DESCRIPTOR 结构的数组来指定效果链。 每个描述符都包含指向客户端提供的效果对象的指针。 这些对象必须实现音频处理对象 (APO) 接口。 有关 APO 模型的详细信息,请参阅 XAPO 概述

当 XAudio2 引擎运行) 时,客户端可以动态 (修改效果链,可以单独启用或禁用效果,并且可以更改效果参数,所有这些都不会中断音频。 每当效果图的任何方面发生更改时,XAudio2 会再次优化该图以避免不必要的处理。 请参阅 IXAudio2Voice::SetEffectChainIXAudio2Voice::EnableEffectIXAudio2Voice::SetEffectParameters

将效果附加到 XAudio2 语音后,XAudio2 将控制该效果,客户端不应进一步调用它。 确保此操作的最简单方法是释放指向效果的所有指针。

给定 XAudio2 语音的效果链中的效果必须以该语音的处理采样率使用并生成浮点音频。 音频格式唯一可以更改的方面是声道计数 (例如,混响效果可以将单声道数据转换为 5.1) 。 客户端可以使用 XAUDIO2_EFFECT_DESCRIPTOR。用于指定每个效果应生成的通道数的 OutputChannels 字段。 如果任何效果无法满足这些要求,或者某个效果产生下一个效果无法处理的多个通道,则效果链将失败。 任何导致效果链停止满足这些要求的 IXAudio2Voice::EnableEffectIXAudio2Voice::D isableEffect 调用都将失败。

XAudio2 中使用的 APO 接口必须是 破坏性的。 这意味着它们始终覆盖在输出缓冲区中找到的任何数据。 否则,生成的音频可能不正确,因为 XAudio2 无法保证这些缓冲区以前已使用静音初始化。

XAudio2 内置效果

下表列出了 XAudio2 提供的内置音频效果集及其创建方法。

效果 创建方法
混响 XAudio2CreateReverb
音量计 XAudio2CreateVolumeMeter

 

有关创建和使用音频效果实例的示例,请参阅 如何:创建效果链

XAudio2 中的自定义效果

XAPO API 提供了一个框架,用于创建自定义音频效果,可在 XAudio2 中使用。 有关使用 XAPO 创建自定义效果的示例,请参阅 如何:创建 XAPO

XAPOFX) (XAPO 效果库

XAPOFX 提供了额外的 XPO 库以及用于创建它们的通用机制。 有关将 XAPOFX 与 XAudio2 配合使用的示例,请参阅 如何:在 XAudio2 中使用 XAPOFX

音频效果

XAudio2 编程指南