Наборы операций XAudio2
В этом обзоре представлено несколько методов XAudio2, которые можно вызывать как часть набора операций.
Несколько методов XAudio2 принимают аргумент OperationSet, который позволяет вызывать их как часть отложенной группы. В определенное время можно одновременно применить весь набор изменений, вызвав функцию IXAudio2::CommitChanges с идентификатором OperationSet. Идентификатор является произвольным числом. Таким образом, он позволяет отдельным частям клиентского кода применять отдельные атомарные изменения к графу без каких-либо конфликтов. Рекомендуемая практика заключается в том, чтобы клиент добавит глобальный счетчик всякий раз, когда он должен создать уникальный новый идентификатор OperationSet. Набор изменений графа, применяемого атомарным образом, гарантированно будет точным. Например, голоса начинаются в синхронизации.
Если OperationSet XAUDIO2_COMMIT_NOW, это изменение применяется немедленно. После вызова метода он вступает в силу в первом проходе обработки звука. При вызове CommitChanges с XAUDIO2_COMMIT_ALL выполняются изменения всех ожидающих наборов операций независимо от их идентификатора OperationSet.
Некоторые методы вступают в силу немедленно при вызове из обратного вызова XAudio2 с OperationSet XAUDIO2_COMMIT_NOW. Все остальные методы, которые принимают аргумент OperationSet 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 для выполнения отложенных изменений.
Связанные разделы
-
Руководство по программированию XAudio2
-
Практическое руководство. Группирование звуковых методов в виде набора операций