XAudio2 音频效果
音频效果是一个对象,它接受传入的音频数据,并在传递数据之前对数据执行一些作。 可以使用效果执行各种任务,包括向音频流添加混响和监视峰值音量级别。
效果链
任何 XAudio2 语音都可以承载音频效果链。 可以使用 XAUDIO2_EFFECT_DESCRIPTOR 结构的数组来指定效果链。 每个描述符都包含指向客户端提供的效果对象的指针。 这些对象必须实现音频处理对象(APO)接口。 有关 APO 模型的详细信息,请参阅 XAPO 概述。
效果链可由客户端动态修改(当 XAudio2 引擎正在运行时),可以单独启用或禁用效果,并且效果参数可以更改 -- 所有这些都不会中断音频。 每当效果图的任何方面发生更改时,XAudio2 将再次优化图形以避免不必要的处理。 请参阅 IXAudio2Voice::SetEffectChain、IXAudio2Voice::EnableEffect,以及 IXAudio2Voice::SetEffectParameters。
将效果附加到 XAudio2 语音后,XAudio2 将控制该效果,并且客户端不应向其发出任何进一步调用。 确保这样做的最简单方法是释放所有指向效果的指针。
给定 XAudio2 语音效果链中的效果必须消耗并生成具有该语音处理采样率的浮点音频。 他们可以更改的音频格式的唯一方面是通道计数(例如,混响效果可以将单声道数据转换为 5.1)。 客户端可以使用 XAUDIO2_EFFECT_DESCRIPTOR。OutputChannels 字段,以指定每个效果应生成的通道数。 如果任何效果无法满足这些要求,或者如果效果产生许多通道,则效果链将失败,而下一个效果无法处理。 任何 IXAudio2Voice::EnableEffect 或 IXAudio2Voice::D isableEffect 调用,导致效果链停止满足这些要求将失败。
XAudio2 中使用的 APO 接口必须 破坏性。 这意味着它们始终覆盖他们在输出缓冲区中找到的任何数据。 否则,生成的音频可能不正确,因为 XAudio2 无法保证这些缓冲区以前已以静音方式初始化。
XAudio2 内置效果
下表列出了 XAudio2 提供的内置音频效果集及其创建方法。
影响 | 创建方法 |
---|---|
混响 | XAudio2CreateReverb |
音量计量 | XAudio2CreateVolumeMeter |
有关创建和使用音频效果实例的示例,请参阅 如何:创建效果链。
XAudio2 中的自定义效果
XAPO API 提供了一个框架,用于创建自定义音频效果,可在 XAudio2 中使用。 有关使用 XAPO 创建自定义效果的示例,请参阅 如何:创建 XAPO。
XAPO 效果库 (XAPOFX)
XAPOFX 提供了额外的 XAPOs 库和用于创建它们的通用机制。 有关将 XAPOFX 与 XAudio2 配合使用的示例,请参阅 如何:在 XAudio2中使用 XAPOFX。
相关主题