Поделиться через


Наборы операций XAudio2

В этом обзоре представлено несколько методов XAudio2, которые можно вызывать как часть набора операций.

Несколько методов XAudio2 принимают аргумент OperationSet , который позволяет вызывать их как часть отложенной группы. В определенный момент времени можно одновременно применить целый набор изменений, вызвав функцию IXAudio2::CommitChanges с идентификатором OperationSet для этой группы. Идентификатор является произвольным числом. Таким образом, это позволяет отдельным частям клиентского кода применять отдельные атомарные изменения к графу без каких-либо конфликтов. Рекомендуется, чтобы клиент увеличивает глобальный счетчик всякий раз, когда ему нужно создать уникальный идентификатор OperationSet . Набор изменений графа, примененных атомарным образом, гарантированно будет точным с точки зрения выборки. Например, голоса будут синхронизированы.

Если для параметра OperationSet задано значение XAUDIO2_COMMIT_NOW, изменение внося в действие немедленно. Он вступает в силу в первом проходе обработки звука после вызова метода. При вызове CommitChanges с XAUDIO2_COMMIT_ALL будут вноситься изменения во все ожидающие наборы операций независимо от их идентификатора OperationSet .

Некоторые методы вступают в силу немедленно при их вызове из обратного вызова XAudio2 с operationSet XAUDIO2_COMMIT_NOW. Все остальные методы, которые принимают аргумент OperationSet , вступают в силу только при следующем проходе обработки после вызова метода (при вызове с XAUDIO2_COMMIT_NOW) или после вызова CommitChanges с тем же operationSet. Из-за этого некоторые вызовы методов не всегда могут выполняться в том же порядке, в котором они были вызваны.

Все ожидающие операции фиксируются атомарным образом при вызове IXAudio2::StopEngine . Все методы, вызываемые во время остановки подсистемы, вступают в силу немедленно, независимо от указанного значения OperationSet . При перезапуске подсистемы XAudio2 возвращается в асинхронный режим.

Простые сценарии, в которых полезны наборы операций, включают следующие примеры.

  • Запуск нескольких голосов одновременно.
  • Одновременная отправка буфера в голос, настройка параметров голоса и запуск голоса.
  • Крупномасштабное изменение графа, например подключение всех исходных голосов к новому голосу субмикширования.

Пример использования набора операций см. в разделе How to: Group Audio Methods as an Operation Set (Практическое руководство. Группирование звуковых методов в качестве набора операций).

Методы набора операций

В наборе операций можно вызвать следующие методы.

Как описано ранее, клиентский код должен в конечном итоге вызвать функцию IXAudio2::CommitChanges для выполнения отложенных изменений.

Наборы операций

Руководство по программированию для XAudio2

Руководство: группировка звуковых методов как набора операций