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


Системный фильтр AEC

Системный фильтр AEC (Aec.sys) реализует алгоритмы подавления акустического эха (AEC) и подавления шума (NS) в программном обеспечении. Этот фильтр является стандартным компонентом операционной системы в Windows XP и более поздних версиях. Сведения о том, как приложения DirectSoundCapture позволяют использовать системный фильтр AEC, см. в документации по Microsoft Windows SDK.

Ограничения, налагаемые системным фильтром AEC

Граф фильтра звука, включающий эффект захвата, реализованный в системном фильтре AEC, распространяются на следующие ограничения:

  • Системный фильтр AEC может подключаться только к контактам, обрабатывающим форматы данных PCM.

  • Битовая глубина должна составлять 16 бит для потока захвата и 8 или 16 бит для потока отрисовки.

  • Системный фильтр AEC выполняет всю внутреннюю обработку с частотой 16 кГц. Входной и выходной потоки преобразуются по мере необходимости.

  • В Windows XP с пакетом обновления 1 (SP1), Windows Server 2003 и более поздних версий контакты системного фильтра AEC для захвата и отрисовки (см. следующий рисунок) должны иметь одинаковую частоту выборки, но частота выборки в контактах захвата и отрисовки может быть выбрана независимо от других контактов. Частота дискретизации в контакте захвата может быть (в порядке предпочтения) 16 кГц, 48 кГц, 44,1 кГц или 8 кГц. (Порядок предпочтения зависит от времени обработки и качества звука.) Частота выборки в контакте отрисовки может быть (в порядке предпочтения) 16 кГц, 48 кГц или 44,1 кГц. Обратите внимание, что контакт отрисовки не поддерживает частоту выборки 8 кГц.

Схема, иллюстрирующая контакты и подключения системного фильтра AEC.

  • Узлы AEC и NS (см. рисунок в разделе Предоставление эффектов захвата Hardware-Accelerated) могут обрабатывать только однотонные потоки. Если поток захвата является многоканальным (например, двухканальный стерео), все каналы, кроме первого, игнорируются (и отклоняются). Отрисовка может обрабатывать только монофонические потоки.

  • В Windows XP с пакетом обновления 1 (SP1), Windows Server 2003 и более поздних версий это ограничение не существует. Системный фильтр AEC правильно обрабатывает несоответствия между часами для потоков захвата и отрисовки, а для записи и отрисовки можно использовать отдельные устройства.

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

  • Любая обработка сигнала, выполняемая перед узлом AEC или NS на стороне захвата графа или после узла AEC или NS на стороне отрисовки, должна быть линейной инвариантной по времени. Выполнение любой нелинейной или изменяющейся по времени обработки сигнала в любом из этих расположений не позволяет AEC отменить эхо в сигнале захвата.

  • Фильтрация AEC отменяет только эхо, поступающие из каналов с фильтром AEC на компьютере. Звук, который выводится через каналы, не проходящие через AEC, не отменяется эхом. Эхо в аудиоканане, отличном от AEC, функционально эквивалентно эхо в звуке, который воспроизводится на радио в офисе рядом с компьютером. AEC не имеет способа отмены (и не влияет на) эхо ни от радио, ни от канала, не-AEC.

Приведенные выше требования применяются ко всем графам аудиофильтров потоковой передачи ядра, которые включают эффекты захвата, реализованные в Aec.sys. Эти ограничения отражают фундаментальные допущения при проектировании и реализации системного фильтра AEC. Ограничения потоковых форматов могут измениться в будущих версиях Windows.

Любой проект продукта, использующий системный фильтр AEC, должен учитывать указанные выше ограничения. Следующие вопросы и ответы показывают, как эти ограничения могут повлиять на поведение фильтрации AEC:

Вопрос. Я создал буфер DirectSound для стерео отрисовки, но оба канала звучат одинаково при использовании AEC. Почему?

Ответ. AEC работает только с монопотоками, поэтому KMixer смешивает стереопоток обратно в моно в соответствии с этим ограничением.

Вопрос. Почему при использовании AEC 16-разрядный звук с частотой 44 кГц похож на 16 кГц?

О. Так как системный фильтр AEC выполняет всю внутреннюю обработку с частотой 16 кГц.

Вопрос. Почему не удается получить буфер DirectSound с аппаратным ускорением с помощью AEC?

О. Так как SysAudio отключает аппаратное ускорение смешивания при включении AEC.

Вопрос. Будет ли системный фильтр AEC работать с моим старым карта Sound Blaster 16?

A. Да. Хотя карта Sound Blaster16 не может одновременно управлять 16-разрядными потоками отрисовки и захвата, он может одновременно управлять 8-разрядным потоком отрисовки и 16-разрядным потоком захвата, который является сочетанием, которое поддерживаются контактами отрисовки и записи системного фильтра AEC. Новые аудиоадаптеры должны поддерживать битовую глубину не менее 16 бит для отрисовки и захвата.

Сводка форматов данных для закрепления AEC

Приложение DirectSound, которое включает системный фильтр AEC, может выбирать для буферов DirectSound любую частоту выборки или размер выборки, поддерживаемые KMixer. KMixer преобразует данные из буфера отрисовки приложения в 16-разрядный моноформат с частотой 16 кГц, прежде чем попасть в системный фильтр AEC. Аналогичным образом KMixer может преобразовывать данные, предназначенные для буфера захвата приложения DirectSoundCapture, в 16-кГц моно-16-разрядный формат после выхода из системного фильтра AEC. Однако, чтобы свести к минимуму объем обработки графа и обеспечить максимальное качество звука, приложения должны использовать моно-16-разрядный формат с частотой 16 кГц для буферов отрисовки и записи.

Если требуется, чтобы звуковое оборудование работало с системным фильтром AEC, контакт аппаратной отрисовки должен поддерживать по крайней мере одну из частот выборки, поддерживаемую контактом отрисовки AEC, а контакт захвата оборудования должен поддерживать одну из частот выборки, поддерживаемую контактом захвата AEC. Чтобы достичь наилучшей производительности AEC, оборудование должно поддерживать частоту выборки 16 кГц в дополнение к любым более высоким скоростям, которые оно поддерживает. Благодаря поддержке частоты 16 кГц оборудование сокращает объем обработки, который должен выполнять системный фильтр AEC, устраняя необходимость преобразования частоты выборки.

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

  • Формат моно PCM с частотой 16 кГц с размером выборки 16 бит

  • Формат моно PCM с частотой 16 кГц с размером выборки 8 бит

Закрепление записи поддерживает только один формат:

  • Формат моно PCM с частотой 16 кГц с размером выборки 16 бит

Если для приложения DirectSoundCapture используется формат буфера 16 кГц моно 16-разрядной PCM, контакт записи AEC может обойти KMixer и подключиться непосредственно к DSound.DLL (см. предыдущий рисунок). В противном случае контакт захвата AEC подключается к KMixer, который преобразует 16-кГц монопотоковый поток PCM с частотой 16 кГц из контакта в любой формат, который использует буфер захвата приложения.

Контакт AEC для отрисовки может обрабатывать любой из следующих форматов:

  • 16-разрядный PCM с 16 кГц с двумя каналами (стерео)

  • 8-разрядная PCM с 16 кГц с двумя каналами

  • 16-разрядное pcM с 48 кГц с двумя каналами

  • 8-разрядный PCM с 48 кГц с двумя каналами

  • 16-разрядная PCM с 44,1 кГц с двумя каналами

  • 8-разрядный PCM с 44,1 кГц с двумя каналами

Контакт отрисовки создает стереопоток, копируя один канал из узла AEC в оба канала выходного потока.

Закрепление записи может обрабатывать любой из следующих форматов:

  • 16-разрядный PCM с любым количеством каналов с частотой 16 кГц

  • 16-разрядный PCM с 48 кГц с любым количеством каналов

  • 16-разрядный PCM с 44,1 кГц с любым количеством каналов

  • 16-разрядный PCM с любым количеством каналов с частотой 8 кГц

Закрепление захвата использует только первый канал и игнорирует (и отбрасывает) остальные.

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

Элемент KSDATARANGE Значение параметра

Основной формат

KSDATAFORMAT_TYPE_AUDIO

SubFormat

KSDATAFORMAT_SUBTYPE_PCM

Описатель

KSDATAFORMAT_SPECIFIER_WAVEFORMATEX

Дополнительные сведения об элементах MajorFormat, SubFormat и Specifier см. в разделе KSDATARANGE. Пример дескриптора KSDATARANGE_AUDIO диапазона данных, использующего эти три значения параметров, см. в разделе PcM Stream Data Range.