XAudio2作集
本概述介绍了多个 XAudio2 方法,可以在作集中调用这些方法。
多个 XAudio2 方法采用 OperationSet 参数,该参数允许将其作为延迟组的一部分调用。 在特定时间,可以使用该组的 OperationSet 标识符调用函数 IXAudio2::CommitChanges 来同时应用一组整个更改。 标识符是任意数字。 因此,它允许客户端代码的各个部分对图形应用单独的原子更改,而不会发生任何冲突。 建议的做法是,每当客户端需要生成唯一的新 OperationSet 标识符时,客户端就会递增全局计数器。 保证对图形的一组更改在原子上应用,以确保样本准确。 例如,语音将同步启动。
如果将 operationSet 设置为 XAUDIO2_COMMIT_NOW,则更改将立即应用。 它在方法调用后的第一个音频处理传递中生效。 如果使用 XAUDIO2_COMMIT_ALL 调用 CommitChanges,将执行所有挂起的作集的更改,而不考虑其 OperationSet 标识符。
使用 OperationSet XAUDIO2_COMMIT_NOW从 XAudio2 回调调用某些方法时立即生效。 使用 OperationSet 参数的所有其他方法仅在调用方法后(如果使用 XAUDIO2_COMMIT_NOW 调用)或 CommitChanges 使用相同的 OperationSet调用后才会对下一个处理传递生效。 因此,某些方法调用可能并不总是按照调用它们的顺序发生。
调用 IXAudio2::StopEngine 时,会以原子方式提交所有挂起的作。 无论提供的 OperationSet 值如何,在引擎停止时调用的任何方法都会立即生效。 重新启动引擎时,XAudio2 将返回到异步模式。
作集有用的简单方案包括以下示例。
- 同时启动多个语音。
- 同时将缓冲区提交到语音、设置语音参数和启动语音。
- 对图形进行大规模更改,例如将所有源语音连接到新的子混合语音。
有关使用作集的示例,请参阅 作集:将音频方法分组为作集。
作集方法
可以调用以下方法作为作集的一部分。
- IXAudio2SourceVoice::ExitLoop
- IXAudio2Voice::SetFilterParameters
- IXAudio2SourceVoice::SetFrequencyRatio
- IXAudio2Voice::D isableEffect
- IXAudio2Voice::EnableEffect
- IXAudio2Voice::SetChannelVolumes
- IXAudio2Voice::SetEffectParameters
- IXAudio2Voice::SetOutputMatrix
- IXAudio2Voice::SetVolume
- IXAudio2SourceVoice::Start
- IXAudio2SourceVoice::Stop
如前所述,客户端代码最终必须调用函数 IXAudio2::CommitChanges 来执行延迟的更改。
相关主题