XAudio2 采样率转换

如果 XAudio2 语音的输入采样率不同于其输出语音的输入采样率,则 XAudio2 语音可以执行自动采样率转换。

采样率转换遵循以下规则:

  • 语音输入采样率是固定的。

    语音只能处理创建语音时指定的输入采样率。 对于 掌握语音子混合语音,使用 IXAudio2::CreateMasteringVoiceIXAudio2::CreateSubmixVoice 函数 InputSampleRate 参数指定输入采样率。 对于源语音,语音的输入采样率由 pSourceFormat 参数指定为 IXAudio2::CreateSourceVoice 函数。

  • 所有语音的输出语音必须具有相同的输入采样率。

    语音可以从输入采样率转换为任何输出采样率,但所有语音的输出语音必须具有相同的输入采样率。 例如,语音可以输出到输入采样率为 22 kHz 的任意数量的语音。 但是,如果同一语音有多个输出语音,其中每个语音具有不同的输入采样率,则音频图将无效。

  • 仅在必要时进行采样率转换处理。

    将音频数据转换为不同的采样率会产生更多的处理开销,最好避免此类开销。 如果语音的输入采样率与其输出语音的输入采样率匹配,则不会完成此转换并缩短处理时间。

  • 输出采样率可能因语音的寿命而异。

    语音的输出采样率未固定。 只要其所有输出语音具有相同的输入采样率,音频图就会有效。 如果语音更改为输出到具有不同输入采样率的新语音,语音将转换为新语音的输入采样率。

在某些情况下,必须添加子混合语音来执行语音之间的采样率转换。 如果语音需要输出到具有各种输入采样率的语音,则只有一个语音可以直接输出原始语音。 由于所有语音的输出语音必须具有相同的输入采样率,因此其他语音间接接收输出。 必须有一个子混合语音,其输入采样率正确的输入采样率介于原始语音和预期输出语音之间。

例如,考虑输入采样率为 22 kHz 的源语音,该语音需要输出到输入采样率为 11 kHz 的子混合语音,以及输入采样率为 44.1 kHz 的主语音。 由于两个输出语音的输入采样率不同,因此需要在原始语音与其预期输出语音之间插入更多子混合语音。 若要保持源语音的保真度,并避免不必要的成本转换到更高的采样率,需要将两个具有 22 khz 采样输入速率的子混合语音插入到图形中。 一个子混合语音将输出为 11 khz 到具有混响效果的子混合语音,另一个子混合语音将在 44.1 khz 时输出到主语音。

音频图中的采样率转换示例

所有语音都具有相同的采样输入速率;音频图中没有完成采样率转换。音频图中没有执行采样率转换。

除主语音外,所有语音都具有相同的采样输入速率;采样率转换仅对转到主语音的数据执行。 采样率转换仅在转到主语音的数据上执行。

语音具有不同的采样输入速率,并且需要更多子混合语音来执行采样率转换;采样率转换在音频图中的多个位置执行。 采样率转换在音频图中的多个位置执行。

语音

XAudio2 编程指南