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


Указание топологии

После того как поставщик оборудования решает, какие мини-драйверы для записи для устройств волны и MIDI необходимо представить топологию потоковой передачи ядра (KS) этих устройств. Топология KS состоит из набора структур данных, описывающих пути к данным, которые потоков аудио или MIDI следуют за каждым устройством. В этой топологии драйвер предоставляет контрольные узлы (например, регулировка громкости), расположенные вдоль каждого пути. Как правило, приложение использует функции мультимедийного миксера WindowsXxx для изучения топологии путем перечисления последовательности узлов по каждому пути. Например, после обнаружения узла управления громкостью приложение может задать уровень громкости на этом узле. Дополнительные сведения о мультимедиа Windows см. в документации по пакету SDK для Microsoft Windows. Дополнительные сведения о представлении топологий KS функциями mixerXxx см. в разделе Топология Kernel Streaming в перевод API для аудиомикшера.

PortCls предоставляет шесть драйверов портов: WavePci, WaveCyclic, WaveRT, MIDI, DMus и Топология. (WaveRT доступен с Windows Vista и является рекомендуемым подходом.) Драйвер порта топологии управляет частью схемы аудиоадаптера, которая объединяет аудиопотоки из Wave-устройств и MIDI-устройств. Он также управляет выбором потоков записи из входных разъемов. Несмотря на несколько вводящее в заблуждение название, драйвер порта топологии не охватывает всю топологию аудиоадаптера, хотя обычно он включает в себя значительную её часть. Другие драйверы портов вносят оставшиеся части топологии адаптера.

Каждый драйвер порта связан с соответствующим мини-драйвером для формирования фильтра KS , представляющего определенное устройство (волна, MIDI или миксер) на звуковом адаптере, как показано в следующей таблице.

Тип фильтра Описание

Фильтр WaveXxx

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

Фильтр MIDI или DMus

Представляет устройство MIDI, которое воспроизводит или записывает поток MIDI.

Фильтр топологии

Представляет схему микшера адаптера.

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

Каждый фильтр имеет один или несколько контактов KS , которые служат путями для потоков звуковых данных для ввода и выхода из фильтра. Как правило, контакты в фильтре топологии привязаны к контактам на волновом, MIDI и DMus фильтрах через аппаратные соединения в адаптерной схеме. Эти фильтры и их соединения вместе образуют граф фильтров KS, который воплощает топологию адаптера.

На следующем рисунке показана топология примера аудиоадаптера.

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

На предыдущем рисунке топология верхнего уровня состоит из соединений между фильтрами MIDI, WaveXxx и топологии. Кроме того, каждый фильтр имеет собственную внутреннюю топологию, которая состоит из путей к данным через фильтр и узлы управления, лежащие вдоль каждого пути. Узлы помечены, как показано в следующей таблице.

Этикетка Описание Если "GUID" требуется объяснение, можно добавить "(Глобально уникальный идентификатор)" для улучшения понимания контекста, если контекст это позволяет: KS Node-Type глобально уникальный идентификатор (GUID)

Синтезатор

Узел синтезатора

KSNODETYPE_SYNTHESIZER

DAC

Узел преобразователя цифрового звука

KSNODETYPE_DAC

ADC

Узел аналогового преобразователя

KSNODETYPE_ADC

Объем

Узел управления на уровне громкости

KSNODETYPE_VOLUME

Немой

Отключить узел управления

KSNODETYPE_MUTE

Сумма

Узел суммирования

KSNODETYPE_SUM

МУЛЬТИПЛЕКСОР

Узел мультиплексера

KSNODETYPE_MUX

На предыдущем рисунке контакты слева от аудиоуправляющего устройства представляют логические подключения (а не физические подключения), через которые потоки данных входят в адаптер из системной шины или в системную шину из адаптера. Эти контакты логически подключены к входным и выходным контактам на других фильтрах (не показаны), которые являются внешними для адаптера. Как правило, эти фильтры — это программные модули, которые вместе с топологией адаптера формируют более крупный граф фильтров, топологию которого можно исследовать приложениями с помощью функций mixerXxx . Например, контакт с меткой PCM Wave Out на предыдущем рисунке логически подключен к аудиомеханизму в пользовательском режиме в Windows. Эти логические подключения поддерживаются передачей DMA через системную шину.

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

Штырьки моста на правой стороне аудиоадаптера обозначают звуковые разъемы на системном корпусе. Эти контакты называются соединительными выводами, так как они соединяют границу между графом фильтров KS и внешним миром.

Фильтры, пин-коды и узлы обычно имеют свойства, доступные клиентам (компонентам режима ядра или приложениям пользовательского режима) звукового драйвера. Клиент может отправить запрос свойства KS фильтру, пину или узлу, чтобы узнать текущее значение или изменить его. Например, узел управления уровнем громкости имеет свойство KSPROPERTY_AUDIO_VOLUMELEVEL, которое клиент может изменить посредством запроса свойства KS. Узел суммирования — это пример типа узла, который обычно не имеет свойств.

Для упрощения фильтр WaveXxx на предыдущем рисунке предоставляет только один контакт для принятия потока выходных данных PCM из системной шины. В отличие от этого, некоторые устройства с волновыми функциями предоставляют несколько контактов для вывода волн PCM и имеют аппаратное обеспечение для внутреннего микширования потоков, входящих через контакты. Эти устройства обеспечивают аппаратное ускорение для приложений, использующих DirectSound, принимая потоки PCM, которые играют из звуковых буферов приложений. Чтобы DirectSound использовал эти пин-коды, они должны предоставлять дополнительные узлы для двухмерной обработки (2-D) и трехмерной обработки (3-D), как описано в статье DirectSound Аппаратное ускорение в WDM Audio.

Этот тип аппаратного ускорения поддерживается в Windows Server 2003, Windows XP, Windows 2000 и Windows Me/98, но он не поддерживается в Windows Vista. Windows Vista не использует аппаратные контакты ускорения на старых звуковых устройствах.

На предыдущем рисунке физические соединения между фильтрами MIDI, WaveXxx и топологии транспортируют все аналоговые звуковые сигналы. Однако устройство с другой топологией может добиться аналогичного эффекта, принимая потоки цифровых выходных данных с устройств MIDI и волн, цифрово смешивая их и преобразуя цифровую смесь в аналоговый выходной сигнал.

Закрепление "Non-PCM Wave Out" в левом нижнем углу предыдущего рисунка принимает поток выходных данных, отличный от PCM, в формате сквозной передачи S/PDIF, например AC-3-over-S/PDIF или WMA Pro-over-S/PDIF. Используя один из этих форматов, устройство просто передает сжатые данные по ссылке S/PDIF без декодирования данных. По этой причине путь данных к контакту S/PDIF Out в правом нижнем углу предыдущего рисунка не содержит узлов регулировки громкости или отключения звука. Дополнительные сведения о форматах звука, отличных от PCM, и сквозной передаче S/PDIF см. в разделе "Поддержка форматов волн , отличных от PCM" и S/PDIF Pass-Through передачи потоков, отличных от PCM.

Минипорт-драйвер представляет топологию драйверу порта в виде структуры PCFILTER_DESCRIPTOR . Эта структура описывает все контакты и узлы фильтра, а также указывает, как контакты и узлы подключаются друг к другу.

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