XAudio2 音频图

所有语音及其包含的效果及其互连的集合称为音频处理图。 该图从客户端获取一组音频流作为输入,对其进行处理,并将最终结果传送到音频设备。 所有音频处理在单独的线程中进行,其周期由图形的量子 (当前在 Microsoft Windows 上为 10 毫秒,在 Xbox 360) 上为 5 1/3 毫秒。 线程每隔一个量子毫秒就会唤醒,并在整个图形中分散音频数据的量子毫秒数。 有关生成基本音频图的示例,请参阅如何: 生成基本音频处理图

简单的音频图:

简单的音频图

客户端可以在图形运行时动态控制图形的状态。 控制操作可能包括添加和删除输入和输出、更改内部效果和互连、在效果上设置参数、启用和禁用图形的各个部分,等等。 有关动态更改音频图的示例,请参阅 如何:动态添加或删除音频图中的语音

处理图形

任何影响图形中任何对象的方法调用都被视为影响图形状态更改。 图形状态更改包括:

  • 创建和销毁语音
  • 启动或停止语音
  • 更改语音的目标
  • 修改效果链
  • 启用或禁用效果
  • 在效果或内置 SLC、筛选器、卷和混音器上设置参数

任何一组图形状态更改都可以作为原子事务进行合并和执行。 这些原子操作称为操作集。 XAudio2 操作集概述中讨论了它们。

内部数据表示形式

XAudio2 图中的音频数据始终以 32 位浮点 PCM 形式存储和处理。 但是,通道计数和采样率在图中可能会有所不同。 给定语音处理音频的格式由用于创建语音的语音类型和参数决定。

语音类型 parameters
IXAudio2SourceVoice 源语音向其发送音频的语音的通道计数和采样率。
IXAudio2SubmixVoiceIXAudio2MasteringVoice 用于创建子混合/主语音的 InputChannelsInputSampleRate 参数。

 

格式转换

XAudio2 处理音频从一个语音传到另一个语音时所需的任何采样率或通道转换,但存在以下限制:

  • 特定语音的所有目标语音必须以相同的采样率运行
  • 效果链中的效果可以更改音频的通道计数,但不能更改其采样率
  • 效果链的输出通道计数必须与它发送的语音的输出通道计数匹配
  • 无法进行会违反上述规则的动态图形更改

在输入端,源语音可以读取任何有效的 PCM 格式或 XAudio2 支持的任何压缩格式的数据。 如果压缩了输入数据,则会在完成任何进一步处理之前将其解码为浮点 PCM。

在输出端,主语音只能生成 PCM 数据。 对于输入 PCM 数据,此数据将始终满足上述相同的限制。

音频图

XAudio2 编程指南

如何:构建基本的音频处理图

如何:从音频图中动态添加或删除语音

如何:使用提交语音

如何:创建效果链