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 处输出到主语音。

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

所有语音都具有相同的采样输入速率;音频图中没有完成采样率转换。no sample rate conversion is done in the audio graph.

除主语音外,所有语音都具有相同的采样输入速率;采样率转换仅对转到主语音的数据执行。 sample rate conversion is only performed on data going to the mastering voice.

语音具有不同的采样输入速率,并且需要更多子混合语音来执行采样率转换;采样率转换在音频图中的多个位置执行。 sample rate conversion is performed in multiple places in the audio graph.

语音

XAudio2 编程指南