Compartir a través de


Información general del controlador miniportador de sintetizador

Tanto un sintetizador como un receptor son necesarios para la compatibilidad con DirectMusic. Las implementaciones predeterminadas de cada una se proporcionan con DirectMusic. El sintetizador de software de Microsoft en modo de usuario se proporciona como el sintetizador predeterminado y DirectSound es el receptor de onda predeterminado. Estas proporcionan emulación de hardware completa, pero normalmente se pueden lograr mejoras de rendimiento adicionales con implementaciones de hardware o software en modo kernel.

Si va a implementar la compatibilidad con hardware, la única opción es escribir un controlador en modo kernel. En el modo kernel, el receptor de onda lo proporciona el controlador de puerto DMus en PortCls y no debe reemplazarse por implementaciones personalizadas (como a veces se hace en modo de usuario).

Para los controladores directMusic en modo kernel, el archivo de encabezado más importante es dmusicks.h. Contiene las interfaces principales del modo kernel que necesita para implementar el controlador de minipuerto. Estas interfaces son:

IMiniportDMus

ISynthSinkDMus

IMXF

IAllocatorMXF

IMasterClock

IPortDMus

Las tres últimas interfaces se implementan en PortCls.sys.

Otros dos archivos de encabezado que son de interés son dmusprop.h, que contiene elementos de propiedad directMusic y dmusbuff.h, que contiene la estructura IRP principal, DMUS_EVENTHEADER.

En el diagrama siguiente se muestra la relación entre el controlador del adaptador IHV y el resto del sistema DirectMusic.

Diagrama que ilustra la relación entre el controlador del adaptador y el sistema DirectMusic.

En el nivel superior, el controlador se expone a través de un controlador de puerto de DirectMusic (una instancia de interfaz IDirectMusicPort ). Así es como una aplicación se comunica con DirectMusic. Este controlador de puerto se comunica hacia abajo a una instancia de pin a través de llamadas de streaming de kernel estándar a través de la función DeviceIoControl (descrita en la documentación de Microsoft Windows SDK).

Tenga en cuenta que el término "puerto" tiene dos significados en conflicto en la figura anterior. Evite confundir el uso del término puerto de DirectMusic API, en modo de usuario anterior, con el controlador de puerto DMus en modo kernel. Los términos tienen significados similares pero ligeramente diferentes en los dos contextos. En concreto, tenga en cuenta que la interfaz IDirectMusicPort en la parte superior de la figura presenta una abstracción de una sola instancia de pin que el controlador de puerto DMus implementa en la mitad inferior de la figura.

Cada objeto de controlador de minipuerto está conectado a un objeto de controlador de puerto coincidente. El objeto de controlador de puerto proporciona servicios básicos al controlador de minipuerto. Cada instancia de anclaje que se asigna a una instancia abierta del dispositivo tiene servicios como la conversión de formato, la secuenciación y la "limitación" (para obtener una explicación de la limitación, consulte la descripción de la interfaz IDirectMusicThru en la documentación de Windows SDK). Las patillas pueden ser destinos o orígenes, y pueden admitir varios formatos y intervalos de datos. Cada instancia de pin especifica el destino o el origen, y especifica qué formato de datos y intervalo se admiten.

El controlador del adaptador de IHV crea el objeto de controlador de controlador de miniporte. Aunque hay una instancia de patilla y secuenciador por instancia abierta del controlador, solo hay un par de controladores port-miniport por pieza de hardware (o sintetizador de software de kernel cargado). La comunicación con el controlador de minipuerto se realiza a través de un flujo de eventos que se pasa al controlador de minipuerto y por elementos de propiedad compatibles con el controlador de minipuerto.

La sección DirectMusic Miniport Driver Interface presenta los detalles de una implementación del controlador de miniporte de DirectMusic.