Преобразование топологии потоковой передачи ядра в API микшера аудио
API-интерфейс микшера — это набор мультимедийных функций Windows, которые используются для получения сведений о аудио-микшерных устройствах. API микшера классифицирует линии микшера аудио как исходные и целевые. Исходные строки являются входными данными в аудио карта (например, cd, микрофон, встроенный вход и волна). Строки назначения являются выходными данными из карта (например, динамики, наушники, телефонная линия и волновой вход). Чтобы исходная строка была допустимой, она должна иметь уникальный путь от источника к месту назначения. Одна исходная строка может сопоставляться с несколькими назначениями, но не более одного пути может подключить исходную строку к конечной строке. Дополнительные сведения об API микшера см. в документации по Microsoft Windows SDK.
Драйвер WDM для аудиоадаптера предоставляет топологию KS-filter, которая представляет пути к данным через оборудование и функции, доступные в этих путях. Системный драйвер 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_XXX).
Контакты приемников (KSPIN_DATAFLOW_IN) в топологии KS предоставляются в виде линий исходного микшера (MIXERLINE_COMPONENTTYPE_SRC_XXX).
WDMAud проходит по графу фильтра KS, начиная с исходного контакта, который находится в конечной точке графа фильтра, и проходит по графу в направлении, противоположном потоку данных, пока не будет достигнут контакт приемника.
Свойства, поддерживаемые на каждом узле KS, обнаруженном во время обхода, предоставляются в виде элементов управления в строке исходного микшера.
В первых двух пунктах выше сопоставление источников KS и контактов приемника с линиями назначения и исходного микшера может запутать из-за различий в терминологии. В KS устройство упаковывается в фильтр, имеющий контакты приемника (входные) и исходные (выходные) контакты. Термины "приемник" и "источник" относятся не к фильтру, а к соединению (обычно буферизованному) между двумя фильтрами:
Исходный контакт фильтра вышестоящий является источником потока данных, который входит в соединение.
Поток данных выходит из подключения через контакт приемника нижестоящего фильтра.
В отличие от этого, терминология линии микшера ориентирована на устройство:
Исходная линия микшера — это источник потока, который входит в устройство.
Целевая линия микшера — это назначение потока, который выходит из устройства.
Кроме того, терминология KS несколько несогласовна в направлении потока потока, которое она назначает закреплению на фильтре KS. Дескриптор закрепления использует значение перечисления KSPIN_DATAFLOW для указания направления:
Поток, который входит в фильтр через контакт приемника, имеет направление KSPIN_DATAFLOW_IN.
Поток, который выходит из фильтра через исходный контакт, имеет направление KSPIN_DATAFLOW_OUT.
Направления "вход" и "выход" явно ориентированы на фильтрацию, в то время как термины "приемник" и "источник" ориентированы на соединение.
Дополнительные сведения об алгоритме анализа топологии, используемом WDMAud, см. в разделе Анализ топологии WDMAud.
Этот раздел также включает в себя: