Транспорт MIDI
Драйвер порта DMus используется на передней и задней сторонах работы синтезатора драйвера miniport DMus. Драйвер порта вводит поток MIDI, состоящий из данных MIDI с метками времени, и направляет поток в секвенсор. Секвенсор удаляет метки времени и передает необработанные сообщения MIDI драйверу мини-порта, когда их метки времени должны быть установлены. (Данные DLS передаются прямо через драйвер порта в драйвер мини-порта без предварительной обработки.)
Когда входной поток MIDI драйвера DMus miniport преобразуется в волновые данные, его выходные данные управляются приемником волн (также называемым "приемником синтезатора" или "приемником отрисовки").
Драйвер порта DMus реализует фильтр потоковой передачи ядра с контактом ввода, который принимает данные DirectMusic из компонента пользовательского режима DirectMusic, dmusic.dll. Драйвер порта также имеет выходной волновой контакт, который излучает синтезированный аудиопоток. Приемник волн управляет этим контактом и сообщает синтезатору, где в памяти нужно записать его данные. Такое расположение изолирует синтезатор от деталей потоковой передачи ядра. Драйверу мини-порта DMus необходимо только разобраться с деталями синтеза волновых данных из входного потока MIDI. Драйвер порта отправляет данные волн в систему, а граф фильтров SysAudio подключает фильтры, чтобы обеспечить правильную передачу данных. Как показано на следующей схеме, данные MIDI поступают в драйвер порта DMus и после виртуализации передаются в драйвер мини-порта DMus.
Драйвер мини-порта преобразует данные MIDI в формат волн, который преобразуется в буфер, назначенный другой частью драйвера порта: приемником волн. Затем вместо того, чтобы перейти в DirectSound, как это делает в пользовательском режиме, волны выходные данные передаются на звуковое оборудование через системный драйвер KMixer. DirectSound — это просто API, который предоставляет KMixer, а ускорение DirectSound состоит из того, что функции микшера ускоряются в оборудовании, а не эмулируются в программном обеспечении KMixer.
Системный драйвер SysAudio, который создает граф фильтра звука, подключает драйвер порта DMus к оборудованию. Часть приемника волны драйвера порта передает данные через свой контакт-сигнал, который SysAudio может подключить к аппаратному устройству. Он извлекает данные волн из драйвера минипорта DMus (независимо от того, является ли это аппаратным или программным синтезатором) и обрабатывает все проблемы с временем. По сравнению с пользовательским режимом драйвер минипорта аналогичен синтезатору, тогда как приемник волн является лишь частью драйвера порта.
Если драйвер минипорта DMus может предоставить выходные данные обратно на узел, он предоставляет волновой контакт с направлением данных KSPIN_DATAFLOW_OUT (см. KSPIN), который SysAudio распознает и подключает к KMixer.
Дополнительные сведения о приемнике волн см. в статье Приемник волн для Kernel-Mode программных синтезаторов.
Этот раздел также включает: