XAudio2 Audio Graph

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

简单的音频图:

简单的音频图

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

处理图形

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

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

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

内部数据表示形式

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

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

 

格式转换

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

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

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

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

音频图

XAudio2 编程指南

如何:生成基本音频处理图形

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

如何:使用子混合语音

如何:创建效果链