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


Звуковые эффекты в XAudio2

Звуковой эффект — это объект, который принимает входящие звуковые данные и выполняет некоторые операции с данными перед их передачей. Эффект можно использовать для выполнения различных задач, включая добавление реверберации в звуковой поток и мониторинг пиковых уровней громкости.

Цепочки эффектов

Любой голос XAudio2 может содержать цепочку звуковых эффектов. Для указания цепочек эффектов можно использовать массив структур XAUDIO2_EFFECT_DESCRIPTOR . Каждый дескриптор содержит указатель на объект эффекта, предоставляемый клиентом. Эти объекты должны реализовывать интерфейсы APO. Дополнительные сведения о модели APO см. в обзоре XAPO .

Цепочки эффектов могут быть изменены клиентом динамически (во время работы подсистемы XAudio2), эффекты можно включать или отключать по отдельности, а параметры эффектов можно изменять без прерывания звука. Всякий раз, когда изменяется какой-либо аспект графа эффектов, XAudio2 снова оптимизирует граф, чтобы избежать ненужной обработки. См. статью IXAudio2Voice::SetEffectChain, IXAudio2Voice::EnableEffect и IXAudio2Voice::SetEffectParameters.

После того как эффект присоединен к голосу XAudio2, XAudio2 берет на себя управление эффектом, и клиент не должен делать к нему дальнейшие вызовы. Самый простой способ обеспечить это — освободить все указатели на эффект.

Эффекты в цепочке эффектов заданного голоса XAudio2 должны потреблять и производить звук с плавающей запятой при частоте обработки этого голоса. Единственным аспектом аудиоформата, который они могут изменить, является количество каналов (например, эффект реверберации может преобразовать моноданные в 5.1). Клиент может использовать XAUDIO2_EFFECT_DESCRIPTOR. Поле OutputChannels для указания количества каналов, которые должен создавать каждый эффект. Цепочка эффектов завершается сбоем, если какой-либо из эффектов не может выполнить эти требования или если эффект создает несколько каналов, которые не может обработать следующий эффект. Все вызовы IXAudio2Voice::EnableEffect или IXAudio2Voice::D isableEffect , которые приводят к прекращению выполнения этих требований цепочкой эффектов, завершаются сбоем.

Интерфейсы APO, используемые в XAudio2, должны быть разрушительными. Это означает, что они всегда перезаписывают любые данные, которые находятся в выходных буферах. В противном случае результирующий звук может оказаться неправильным, так как XAudio2 не гарантирует, что эти буферы были инициализированы ранее безмолвием.

Встроенные эффекты XAudio2

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

Действие Метод создания
Реверберации XAudio2CreateReverb
Измерение громкости XAudio2CreateVolumeMeter

 

Пример создания и использования экземпляра звукового эффекта см. в разделе Практическое руководство. Создание цепочки эффектов.

Пользовательские эффекты в XAudio2

API XAPO предоставляет платформу для создания пользовательских звуковых эффектов, которые можно использовать в XAudio2. Пример создания настраиваемого эффекта с помощью XAPO см. в разделе Практическое руководство. Создание XAPO.

Библиотека эффектов XAPO (XAPOFX)

XAPOFX предоставляет дополнительную библиотеку XAPOS и общий механизм их создания. Пример использования XAPOFX с XAudio2 см. в разделе Практическое руководство. Использование XAPOFX в XAudio2.

Звуковые эффекты

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