Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Подсистема отрисовки состоит из двух частей:
Синтезатор, который принимает сообщения MIDI и преобразует их в звуковые образцы волн.
Приёмник волновых данных, который обеспечивает конечную точку для образцов волн и помогает синхронизировать выходной сигнал.
По умолчанию приложение DirectMusic использует Microsoft программный синтезатор (dmsynth.dll) в качестве синтезатора и DirectSound в качестве устройства вывода волн.
В DirectX 6.1 и DirectX 7 приложение DirectMusic может переопределить эти значения по умолчанию. Например, приложение может использовать синтезатор Программного обеспечения Майкрософт, но направить выходные данные в файл .wav или реализовать пользовательский синтезатор, который работает с приемником волн по умолчанию. Скорее всего, реализуется последний сценарий, так как приемник волнового сигнала по умолчанию должен хорошо работать для большинства синтезаторов.
В DirectX 8 и более поздних версиях DirectMusic всегда использует встроенный приемник волн для вывода данных из синтезатора в пользовательском режиме, но приложение может переопределить программный синтез по умолчанию. Это означает, что приложение DirectMusic может реализовать пользовательский синтезатор в пользовательском режиме, но синтезатор должен использовать встроенный приемник волны DirectMusic.
На рисунке ниже показано, как архитектура DirectMusic включает синтезаторы в пользовательском режиме и приемники волн. Обратите внимание, что блок с меткой DirectMusic Port на следующем рисунке не следует путать с драйвером порта DMus в режиме ядра в модуле системного драйвера PortCls, portcls.sys. Порт DirectMusic — это объект пользовательского режима с интерфейсом IDirectMusicPort (частью API DirectMusic) и реализован в dmusic.dll. Дополнительные сведения о портах DirectMusic см. в документации по пакету SDK для Microsoft Windows.
На предыдущем рисунке приложение отправляет данные в порт DirectMusic пользовательского режима, который передает эти данные (MIDI или DLS) программному синтезатору (dmsynth.dll по умолчанию), чтобы преобразовать ноты в звуковые данные. Волновой приемник управляет синхронизацией и передает синтезатору буфер для заполнения, когда он готов принять всплеск данных. Синта заполняет буфер (объект IDirectSoundBuffer по умолчанию) данными, чтобы его можно было передать в DirectSound. DirectSound либо воспроизводит данные через системный драйвер KMixer, либо через контакт DirectSound с аппаратным ускорением на звуковом устройстве, если он доступен (см. Обзор аппаратного ускорения DirectSound).
Эта же базовая архитектура также применяется к реализации режима ядра, за исключением того, что приемник волн передает буфер данных непосредственно к оборудованию или к драйверу системы KMixer. Драйвер порта DMus реализует волновой приемник для программного синтезатора в режиме ядра. Дополнительные сведения см. в статье "Приемник волны" для Kernel-Mode синтезаторов программного обеспечения.
После выполнения этих действий порт DirectMusic в пользовательском режиме должен быть открыт и активирован для использования. Как только этот код драйвера работает, можно начать реализацию функций. Используйте исходный код для синтезатора программного обеспечения в пользовательском режиме в качестве шаблона и приступить к добавлению новых функций.
Синтезатор программного обеспечения в пользовательском режиме можно реализовать как объект с интерфейсом IDirectMusicSynth. Приемник волн в пользовательском режиме можно реализовать как объект с интерфейсом IDirectMusicSynthSink. Дополнительные сведения см. в разделе IDirectMusicSynth и IDirectMusicSynthSink.