DirectMusic Miniport Driver Interface
Интерфейс драйвера минипорта DMus основан на интерфейсе драйвера miniport MIDI, но он добавляет следующие расширения для поддержки расширенных синтезаторов:
DLS загружает более 16 каналов на экземпляр
Виртуализация событий заметок на оборудовании
Интерфейс драйвера минипорта DMus отличается от интерфейса драйвера минипорта MIDI несколькими способами. Драйвер мини-порта DMus реализует интерфейс IMiniportDMus в отличие от IMiniportMidi. Этот интерфейс аналогичен интерфейсу IMiniportMidi, но метод IMiniportDMus::NewStream создает интерфейс фильтра преобразования IMXF (MIDI) и подключается к интерфейсу IAllocatorMXF в драйвере порта DMus в отличие от реализации интерфейса IMiniportMidiStream . IAllocatorMXF и IMXF упаковывают стандартные вызовы GetMessage и PutMessage (см . раздел IAllocatorMXF::GetMessage и IMXF::P utMessage). Эти вызовы относятся к упакованным событиям, а не к необработанным байтам MIDI.
Драйвер DMus miniport для синтезатора может реализовывать некоторые или все свойства DirectMusic. Эти свойства позволяют системе управлять загрузкой DLS и выделением каналов для устройства. Файл заголовка dmusprop.h определяет элементы свойств DirectMusic. Список этих свойств см. в разделе KSPROPSETID_Synth и KSPROPSETID_Synth_Dls.
Предполагается, что драйверы DMus miniport позволят создавать несколько экземпляров контактов. Каждый экземпляр контакта выступает в качестве одного виртуального синтезатора и содержит набор каналов и скачивание DLS независимо от других экземпляров контактов.
Некоторые свойства синтезатора, описанные в разделе Наборы свойств аудиодрайверов , действуют на экземпляре pin, а другие являются глобальными. Для обработки глобальных свойств синтезатор должен иметь узел синтезатора в топологии. Описание каждого элемента свойства указывает, отправляется ли этот элемент в узел синтезатора или в экземпляр закрепления. Для каждой части оборудования, поддерживающей синтез, существуют объект драйвера порта и драйвер miniport, как показано на следующем рисунке.
Объект драйвера порта предоставляет один экземпляр интерфейса IPortDMus , который находится в объекте драйвера miniport. Драйвер мини-порта экспортирует один экземпляр интерфейса IMiniportDMus , который удерживается драйвером порта. Для каждого экземпляра пин-кода драйвер порта запрашивает соответствующий интерфейс IMXF . Обмен данными между системой и этим экземпляром представляет собой сочетание запросов свойств, адресованных контакту, и событий, поступающих в интерфейс потока IMXF или из интерфейса потока.
При его создании драйверу мини-порта необходимо передать два объекта:
"Часы"
Объект Allocator
Часы очень важны для операций отрисовки и записи. Драйвер мини-порта должен отображать заметки в указанное время; Когда драйвер мини-порта считывает данные MIDI, ему необходимо знать время, чтобы он смог метки времени для события ядра. Дополнительные сведения см. в разделе Часы задержки.
Объект распределителя , имеющий интерфейс IAllocatorMXF , используется в качестве пула памяти для перезапуска памяти. Все сообщения MIDI в системе выделяются из этого общего пула. Объект распределителя следует использовать для создания или уничтожения отдельных сообщений.
Этот раздел состоит из следующих частей.
Запросы элементов свойств драйвера miniport
Создание PortDMus драйвером порта DirectMus по умолчанию
Предоставление синтезатора в качестве устаревшего устройства