Основные сведения о драйвере порта WaveRT

Драйвер порта WaveRT сочетает в себе простоту предыдущего драйвера порта WaveCyclic и производительность драйвера порта WavePci с аппаратным ускорением.

Драйвер порта WaveRT устраняет необходимость постоянного сопоставления и копирования звуковых данных, предоставляя клиенту main (как правило, звуковому движку) прямой доступ к буферу данных. Этот прямой доступ также устраняет необходимость в том, чтобы драйвер манипулировал данными в аудиопотоке. Таким образом, драйвер порта WaveRT удовлетворяет потребности контроллеров прямого доступа к памяти (DMA), которые есть у некоторых звуковых устройств.

Чтобы отличить себя от других устройств отрисовки волн и захвата волн, драйвер порта WaveRT регистрирует себя в KSCATEGORY_REALTIME в дополнение к KSCATEGORY_AUDIO, KSCATEGORY_RENDER и KSCATEGORY_CAPTURE. Эта самостоятельная регистрация происходит во время установки драйвера адаптера.

В Операционных системах Windows Vista и более поздних версий при запуске операционной системы инициализации звукового модуля она перечисляет фильтры KS, представляющие звуковые устройства. Во время перечисления звуковой модуль создает экземпляры драйверов для звуковых устройств, которые он находит. Этот процесс приводит к созданию объектов фильтра для этих устройств. Для звуковых устройств WaveRT результирующий объект фильтра содержит следующие компоненты:

  • Экземпляр драйвера порта WaveRT для управления универсальными системными функциями для фильтра

  • Экземпляр драйвера miniport WaveRT для обработки всех аппаратных функций фильтра.

После создания объекта фильтра звуковой модуль и драйвер miniport WaveRT готовы открыть аудиопоток для необходимого типа обработки звука. Чтобы подготовить фильтр KS для отрисовки (воспроизведения), например, обработчик звука и драйвер miniport WaveRT, выполните следующие действия, чтобы открыть поток воспроизведения:

  1. Обработчик звука открывает контакт в фильтре KS, а драйвер miniport WaveRT создает экземпляр контакта. Когда звуковой модуль открывает контакт, он также передает драйверу волновой формат потока. Драйвер использует сведения о формате волн, чтобы выбрать правильный размер буфера на следующем шаге.

  2. Звуковой модуль отправляет драйверу мини-порта запрос на создание циклического буфера определенного размера. Термин циклический буфер относится к тому факту, что, когда регистр позиции буфера достигает конца буфера в операции воспроизведения или записи, регистр позиции может автоматически переноситься в начало буфера. В отличие от драйвера miniport WaveCyclic, который настраивает непрерывный блок физической памяти, драйверу miniport WaveRT не нужен буфер, который является непрерывным в физической памяти. Драйвер использует свойство KSPROPERTY_RTAUDIO_BUFFER для выделения места для буфера. Если оборудование звукового устройства не может выполнять потоковую передачу из буфера запрошенного размера, драйвер работает в рамках ограничений ресурсов звукового устройства, чтобы создать буфер, который является ближайшим по размеру к первоначально запрошенным размерам. Затем драйвер сопоставляет буфер с подсистемой DMA звукового устройства и делает буфер доступным для звукового модуля в пользовательском режиме.

  3. Обработчик аудиозаписи планирует поток для периодической записи звуковых данных в циклический буфер.

  4. Если оборудование звукового устройства не обеспечивает прямую поддержку циклических буферов, драйвер мини-порта периодически перепрограммирует звуковое устройство, чтобы продолжать использовать тот же буфер. Например, если оборудование не поддерживает циклы буфера, драйвер должен возвращать адрес DMA в начало буфера каждый раз, когда он достигает конца буфера. Это обновление можно выполнить в подпрограмме службы прерываний (ISR) или в потоке с высоким приоритетом.

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

Чтобы подготовить фильтр KS для захвата (записи) звука, звуковой модуль и драйвер miniport WaveRT выполните аналогичные действия, чтобы открыть поток записей.

Одним из улучшений производительности, предоставляемых драйвером порта WaveRT, является сокращение задержки в сквозной обработке аудиопотока во время отрисовки волн или захвата волн. Эта задержка называется задержкой потока.

Дополнительные сведения об этих двух типах задержки потока см. в следующих разделах.

Сведения о разработке драйвера для минипорта WaveRT, дополняющего драйвер порта WaveRT, см. в статье Разработка драйвера для минипорта WaveRT .