Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Драйвер порта WaveRT сочетает простоту предыдущего драйвера порта WaveCyclic с аппаратным ускорением производительности драйвера порта WavePci.
Драйвер порта WaveRT устраняет необходимость постоянно сопоставлять и копировать звуковые данные путем предоставления основного клиента (как правило, звукового модуля) с прямым доступом к буферу данных. Этот прямой доступ также устраняет необходимость для драйвера управлять данными в аудиопотоке. Драйвер порта WaveRT таким образом удовлетворяет потребностям контроллеров прямого доступа к памяти (DMA), которые имеют некоторые звуковые устройства.
Чтобы отличить себя от других устройств отрисовки волн и захвата волн, драйвер порта WaveRT регистрируется в KSCATEGORY_REALTIME помимо KSCATEGORY_AUDIO, KSCATEGORY_RENDER и KSCATEGORY_CAPTURE. Эта самостоятельная регистрация возникает во время установки драйвера адаптера.
В операционных системах Windows Vista и более поздних, когда операционная система запускается и аудиосистема инициализируется, аудиосистема перечисляет фильтры KS, представляющие аудиоустройства. Во время перечисления звуковой механизм создает экземпляры драйверов для аудиоустройств, которые он находит. Этот процесс приводит к созданию объектов фильтра для этих устройств. Для звуковых устройств WaveRT результирующий объект фильтра имеет следующие компоненты:
Экземпляр драйвера порта WaveRT для управления универсальными системными функциями фильтра
Экземпляр минипорта WaveRT для обработки всех аппаратных функций фильтра
После создания объекта фильтра, аудиодвижок и минипорт WaveRT готовы открыть аудиопоток для необходимого типа обработки звука. Чтобы подготовить фильтр KS для воспроизведения звука, звуковой движок и минипорт-драйвер WaveRT выполняют следующие действия для открытия потока воспроизведения:
Звуковой движок открывает пин на фильтре KS, а драйвер минипорта WaveRT создает экземпляр этого пина. Когда звуковой движок открывает пин, он также передает формат аудиосигнала потока драйверу. Драйвер использует сведения о формате волны для выбора соответствующего размера буфера на следующем шаге.
Звуковой модуль отправляет запрос на минипорт-драйвер для создания циклического буфера определенного размера. Термин циклический буфер относится к тому факту, что когда регистр позиции буфера достигает конца буфера в процессе воспроизведения или записи, регистр позиции может автоматически перейти на начало буфера. В отличие от драйвера miniport WaveCyclic, который настраивает непрерывный блок физической памяти, драйвер минипорта WaveRT не нуждается в буфере, который является непрерывным в физической памяти. Драйвер использует свойство KSPROPERTY_RTAUDIO_BUFFER для выделения пространства для буфера. Если оборудование звукового устройства не может извлекать данные из буфера запрошенного размера, драйвер работает в пределах ограничений ресурсов звукового устройства для создания буфера, который наиболее близок к первоначально запрашиваемому размеру. Затем драйвер сопоставляет буфер с подсистемой DMA звукового устройства и делает буфер доступным для звукового модуля в пользовательском режиме.
Аудиодвижок запускает поток для периодической записи аудиоданных в циклический буфер.
Если оборудование звукового устройства не обеспечивает прямую поддержку циклических буферов, драйвер минипорта периодически перепрограммирует звуковое устройство для использования одного буфера. Например, если оборудование не поддерживает зацикливание буфера, драйвер должен задать адрес DMA обратно в начало буфера при каждом достижении конца буфера. Это обновление можно выполнить в подпрограмме службы прерываний (ISR) или в потоке с высоким приоритетом.
Результирующая конфигурация предоставляет звуковой сигнал, устойчивый к сбоям, на оборудовании аудиоустройства, которое поддерживает циклические буферы или работает с минипорт-драйвером для регулярного обновления оборудования.
Чтобы подготовить фильтр KS для записи звука (запись), звуковой механизм и драйвер минипорта WaveRT используют аналогичные шаги для открытия потока записи.
Одним из улучшений производительности, предоставляемых драйвером порта WaveRT, является сокращение задержки в сквозной обработке аудиопотока во время отрисовки волны или захвата волн. Эта задержка называется задержкой потока.
Дополнительные сведения об этих двух типах задержки потока см. в следующих разделах.
Сведения о разработке драйвера минипорта WaveRT, который дополняет драйвер порта WaveRT, см. в разделе "Разработка драйвера минипорта WaveRT ".