Conjuntos de operações XAudio2
Esta visão geral apresenta vários métodos XAudio2 que você pode chamar como parte de um conjunto de operações.
Vários métodos XAudio2 assumem o argumento OperationSet , que permite que eles sejam chamados como parte de um grupo adiado. Em um momento específico, você pode aplicar um conjunto inteiro de alterações simultaneamente chamando a função IXAudio2::CommitChanges com o identificador OperationSet para esse grupo. O identificador é um número arbitrário. Assim, ele permite que partes separadas do código do cliente apliquem alterações atômicas separadas ao grafo sem conflitos. A prática recomendada é que o cliente incremente um contador global sempre que precisar gerar um identificador OperationSet exclusivo e novo. Um conjunto de alterações no grafo, aplicado atomicamente, tem a garantia de ser de exemplo preciso. Por exemplo, as vozes começarão em sincronia.
Se você definir OperationSet como XAUDIO2_COMMIT_NOW, a alteração será aplicada imediatamente. Ele entra em vigor na primeira passagem de processamento de áudio após a chamada de método. Se você chamar CommitChanges com XAUDIO2_COMMIT_ALL, as alterações em todos os conjuntos de operações pendentes serão executadas, independentemente do identificador OperationSet .
Determinados métodos entram em vigor imediatamente quando são chamados de um retorno de chamada XAudio2 com um OperationSet de XAUDIO2_COMMIT_NOW. Todos os outros métodos que assumem um argumento OperationSet só têm efeito na próxima passagem de processamento depois que o método é chamado (se chamado com XAUDIO2_COMMIT_NOW) ou depois que CommitChanges é chamado com o mesmo OperationSet. Por isso, determinadas chamadas de método podem nem sempre acontecer na mesma ordem em que foram chamadas.
Todas as operações pendentes são confirmadas atomicamente quando IXAudio2::StopEngine é chamado. Todos os métodos que são chamados enquanto o mecanismo é interrompido entrarão em vigor imediatamente, independentemente do valor operationset fornecido. Quando você reinicia o mecanismo, o XAudio2 retorna ao modo assíncrono.
Cenários simples nos quais os conjuntos de operações são úteis incluem os exemplos a seguir.
- Iniciando várias vozes simultaneamente.
- Enviando simultaneamente um buffer para uma voz, definindo os parâmetros de voz e iniciando a voz.
- Fazer uma alteração em larga escala no grafo, como conectar todas as vozes de origem a uma nova voz de submixagem.
Consulte Como agrupar métodos de áudio como um conjunto de operações para obter um exemplo de como usar um conjunto de operações.
Métodos de conjunto de operações
Você pode chamar os métodos a seguir como parte de um conjunto de operações.
- IXAudio2SourceVoice::ExitLoop
- IXAudio2Voice::SetFilterParameters
- IXAudio2SourceVoice::SetFrequencyRatio
- IXAudio2Voice::D isableEffect
- IXAudio2Voice::EnableEffect
- IXAudio2Voice::SetChannelVolumes
- IXAudio2Voice::SetEffectParameters
- IXAudio2Voice::SetOutputMatrix
- IXAudio2Voice::SetVolume
- IXAudio2SourceVoice::Start
- IXAudio2SourceVoice::Stop
Conforme descrito anteriormente, o código do cliente deve chamar a função IXAudio2::CommitChanges para executar as alterações adiadas.
Tópicos relacionados