Топология потоковой передачи ядра в преобразование API Audio Mixer

API микшера — это набор мультимедийных функций Windows, используемых для получения сведений о устройствах аудио-микшера. API миксера классифицирует линии аудио-миксера в качестве исходных и целевых линий. Источник сигнала — это входной сигнал аудиокарты (например, CD, микрофон, линейный вход и wave). Конечные линии — это выходы карты (например, динамики, наушники, телефонная линия и входной аудиосигнал). Для допустимой исходной строки он должен иметь уникальный путь от источника к месту назначения. Одна исходная строка может сопоставляться с несколькими назначениями, но не более одного пути может подключить исходную строку к конечной строке. Дополнительные сведения об API миксера см. в документации по пакету SDK для Microsoft Windows.

Драйвер WDM для звукового адаптера предоставляет топологию фильтра KS, представляющую пути к данным через оборудование и функции, доступные на этих путях. Системный драйвер WDMAud (в файлах Wdmaud.sys и Wdmaud.drv) должен интерпретировать топологию KS-filter и создавать соответствующие строки исходного и целевого миксера, предоставляемые через API микшера. WDMAud также обрабатывает вызовы API миксера и преобразует их в эквивалентные вызовы свойств на пин-кодах фильтра и узлах, управляемых драйвером адаптера.

Системный драйвер KMixer (Kmixer.sys) и системный драйвер SWMidi (Swmidi.sys) являются неотъемлемой частью звукового стека ядра. KMixer обеспечивает системное сочетание звука, преобразование битовой глубины, преобразование частоты выборки и настройку конфигурации канала на динамик (супермикс) для PCM-аудиопотоков. SWMidi обеспечивает высококачественный программный синтез MIDI-потоков. Системный звуковой драйвер SysAudio (Sysaudio.sys; см. системный драйвер SysAudio), объединяет возможности KMixer и SWMidi с установленными драйверами аудиоадаптера для создания функционально улучшенных виртуальных звуковых устройств.

WDMAud управляет интерфейсом между частью KS и устаревшей частью звукового стека (см. раздел "Компонент системы WinMM"). WDMAud преобразует пин-коды на виртуализированные фильтры SysAudio в устаревшие линии миксера, представленные в таких приложениях, как SndVol32. Перевод из топологии KS в линии смешивания выполняется следующим образом:

  • Исходные закрепления (KSPIN_DATAFLOW_OUT) в топологии KS предоставляются в виде линий целевого миксера (MIXERLINE_COMPONENTTYPE_DST_XXXX).

  • Пины приемника (KSPIN_DATAFLOW_IN) в топологии KS представлены как линии источника микшера (MIXERLINE_COMPONENTTYPE_SRC_XXX).

  • WDMAud обрабатывает граф фильтрации KS, начиная с исходного контакта, расположенного на конечной точке графа, и проходит по графу в направлении, противоположном потоку данных, пока не будет достигнут приёмный контакт.

  • Свойства, которые поддерживаются на каждом узле KS, обнаруженном во время обхода, предоставляются в виде элементов управления в строке исходного миксера.

В первых двух элементах выше сопоставление выходных и приемных контактов KS с конечными и источниковыми линиями микшера может быть запутанным из-за различий в терминологии. В KS устройство помещается в фильтр с входными (приемными) и выходными (передающими) выводами. Термины "приемник" и "источник" относятся не к фильтру, а к (обычно буферизованному) соединению между двумя фильтрами:

  • Исходный пин-код вышестоящего фильтра является источником потока данных, который входит в соединение.

  • Поток данных выходит из соединения через контакт входа фильтра нисходящего потока.

Напротив, терминология mixer-line ориентирована на устройство:

  • Исходная линия миксера — это источник потока, который входит в устройство.

  • Линия назначения микшера является конечной точкой потока, выходящего из устройства.

Кроме того, терминология KS несколько несогласованна в направлении потока, которое он назначает закреплению фильтра KS. Описатель пинов использует значение перечисления KSPIN_DATAFLOW для указания направления:

  • Поток, который входит в фильтр через выходной пин, имеет направление KSPIN_DATAFLOW_IN.

  • Поток, который выходит из фильтра через исходящий штырь, обладает направлением KSPIN_DATAFLOW_OUT.

Направления "in" и "out" явно ориентированы на фильтрацию, в то время как термины "приемник" и "источник" ориентированы на подключение.

Дополнительные сведения о алгоритме синтаксического анализа топологии, используемом WDMAud, см. в разделе "Анализ топологии WDMAud".

Этот раздел также включает:

Закрепление топологии

Узлы топологии

SysTray и SndVol32

Предоставление топологии фильтра