XAudio2 采样率转换
如果 XAudio2 语音的输入采样率不同于其输出语音的输入采样率,则 XAudio2 语音可以执行自动采样率转换。
采样率转换遵循以下规则:
语音输入采样率是固定的。
语音只能处理创建语音时指定的输入采样率。 对于 掌握语音 和 子混合语音,使用 IXAudio2::CreateMasteringVoice 和 IXAudio2::CreateSubmixVoice 函数 InputSampleRate 参数指定输入采样率。 对于源语音,语音的输入采样率由 pSourceFormat 参数指定为 IXAudio2::CreateSourceVoice 函数。
所有语音的输出语音必须具有相同的输入采样率。
语音可以从输入采样率转换为任何输出采样率,但所有语音的输出语音必须具有相同的输入采样率。 例如,语音可以输出到输入采样率为 22 kHz 的任意数量的语音。 但是,如果同一语音有多个输出语音,其中每个语音具有不同的输入采样率,则音频图将无效。
仅在必要时进行采样率转换处理。
将音频数据转换为不同的采样率会产生更多的处理开销,最好避免此类开销。 如果语音的输入采样率与其输出语音的输入采样率匹配,则不会完成此转换并缩短处理时间。
输出采样率可能因语音的寿命而异。
语音的输出采样率未固定。 只要其所有输出语音具有相同的输入采样率,音频图就会有效。 如果语音更改为输出到具有不同输入采样率的新语音,语音将转换为新语音的输入采样率。
在某些情况下,必须添加子混合语音来执行语音之间的采样率转换。 如果语音需要输出到具有各种输入采样率的语音,则只有一个语音可以直接输出原始语音。 由于所有语音的输出语音必须具有相同的输入采样率,因此其他语音间接接收输出。 必须有一个子混合语音,其输入采样率正确的输入采样率介于原始语音和预期输出语音之间。
例如,考虑输入采样率为 22 kHz 的源语音,该语音需要输出到输入采样率为 11 kHz 的子混合语音,以及输入采样率为 44.1 kHz 的主语音。 由于两个输出语音的输入采样率不同,因此需要在原始语音与其预期输出语音之间插入更多子混合语音。 若要保持源语音的保真度,并避免不必要的成本转换到更高的采样率,需要将两个具有 22 khz 采样输入速率的子混合语音插入到图形中。 一个子混合语音将输出为 11 khz 到具有混响效果的子混合语音,另一个子混合语音将在 44.1 khz 时输出到主语音。
音频图中的采样率转换示例
所有语音都具有相同的采样输入速率;音频图中没有完成采样率转换。
除主语音外,所有语音都具有相同的采样输入速率;采样率转换仅对转到主语音的数据执行。
语音具有不同的采样输入速率,并且需要更多子混合语音来执行采样率转换;采样率转换在音频图中的多个位置执行。
相关主题