XAudio2 语音

有三种类型的 XAudio2 语音对象: 语音、 子混合语音和 语音。 源语音对客户提供的音频数据操作。 源语音和子混合语音将其输出发送到一个或多个子混合语音或主语音。 子混合语音和主语音将传入的所有音频混合在一起,并对结果进行操作。 主语音将音频数据写入音频设备。

所有语音执行的操作

所有语音按顺序对通过它们传输的音频执行以下操作。

  1. 整体音量调整,影响所有音频通道。 请参阅 IXAudio2Voice::SetVolume
  2. 一个或多个 DSP 效果的可选客户端指定链,例如内置混响或 IXAPO 接口定义的用户效果。 请参阅 XAudio2 音频效果
  3. 每通道输出音量调整。 请参阅 IXAudio2Voice::SetChannelVolumes
  4. 将矩阵混合到每个目标语音或音频输出设备,用于主控语音。 如有必要,此组合会更改音频中的声道数。

源语音

使用源语音将音频数据提交到 XAudio2 处理管道。 它们是 XAudio2 Audio Graph 的入口点。 必须直接或通过中间子混合语音将语音数据发送到主语音以听到。

除了所有语音执行的操作外,源语音还执行以下操作。

  • 如有必要,首先运行解码器,将编码的源数据转换为脉冲代码调制 (PCM) 。
  • 可变速率采样率转换 (SRC) 在必要时将语音的源音频数据转换为目标语音预期的采样率,并支持动态音调更改。
  • 可选的状态变量筛选器可用于以各种方式为声音着色。 请参阅 IXAudio2Voice::SetFilterParameters
  • 可选筛选器可以应用于语音的输出。 请参阅 IXAudio2Voice::SetOutputFilterParameters

Submix Voices

子混合语音主要用于性能改进和效果处理。 不能将数据缓冲区直接提交到子混合语音。 除非将其提交到主语音,否则无法听到它。 可以使用子混合语音来确保将一组特定的语音数据转换为相同的格式,并针对集体结果处理特定效果链。

除了所有语音执行的操作外,子混合语音还执行以下操作。

掌握语音

使用主语音表示音频输出设备。 无法将数据缓冲区直接提交到主语音,但提交到其他类型的语音的数据必须转到主语音才能听到。

除了所有语音执行的操作外,主语音还执行以下操作。

  • 如果使用音频设备不支持的显式 InputSampleRate 值创建主语音,则使用固定速率 SRC 转换为设备支持的最接近的采样率。
  • 如果输出设备需要,请剪辑最终输出音频。

语音

XAudio2 编程指南

IXAudio2SourceVoice

IXAudio2SubmixVoice

IXAudio2MasteringVoice