Compartir a través de


Interfaz del controlador DirectMusic Miniport

La interfaz del controlador DMus miniport se basa en la interfaz del controlador midi miniport, pero agrega las siguientes extensiones para admitir sintetizadores avanzados:

  • DLS descarga más de 16 canales por instancia

  • Secuenciación de eventos de nota en hardware

La interfaz del controlador de miniporte DMus difiere de la interfaz del controlador midi de varias maneras. Un controlador de miniporte DMus implementa la interfaz IMiniportDMus en lugar de IMiniportMidi. Esta interfaz es similar a IMiniportMidi, pero el método IMiniportDMus::NewStream crea una interfaz IMXF (filtro de transformación MIDI) y se conecta a una interfaz IAllocatorMXF en el controlador de puerto DMus, en lugar de implementar una interfaz IMiniportMidiStream . IAllocatorMXF y IMXF encapsulan las llamadas Estándar GetMessage y PutMessage (consulta IAllocatorMXF::GetMessage e IMXF::P utMessage). Estas llamadas tratan con eventos empaquetados en lugar de con bytes MIDI sin formato.

El controlador DMus miniport para un sintetizador puede implementar algunas o todas las propiedades de DirectMusic. Estas propiedades permiten al sistema administrar las descargas de DLS y las asignaciones de canales para el dispositivo. El archivo de encabezado dmusprop.h define elementos de propiedad específicos de DirectMusic. Para obtener una lista de estas propiedades, consulte KSPROPSETID_Synth y KSPROPSETID_Synth_Dls.

Se espera que los controladores de miniporte DMus permitan la creación de varias instancias de patilla. Cada instancia de patilla actúa como un sintetizador virtual y contiene un conjunto de canales y descargas DLS independientemente de las demás instancias de patilla.

Algunas de las propiedades de síntesis descritas en Conjuntos de propiedades de controladores de audio actúan en una instancia de pin y otras son globales. Para procesar las propiedades globales, el sintetizador debe tener un nodo de sintetizador en su topología. La descripción de cada elemento de propiedad indica si ese elemento se envía al nodo sintetizador o a una instancia de pin. Para cada pieza de hardware compatible con la síntesis, existe un objeto de controlador de puerto y un objeto de controlador de minipuerto, como se muestra en la ilustración siguiente.

Diagrama que ilustra la relación entre los controladores de puerto y minipuerto para un sintetizador de DirectMusic.

El objeto de controlador de puerto expone una instancia de una interfaz IPortDMus , que se mantiene en el objeto de controlador de miniporte. El controlador de minipuerto exporta una instancia de una interfaz IMiniportDMus , que el controlador de puerto mantiene. Para cada patilla de instancia, el controlador de puerto solicita una interfaz IMXF coincidente. La comunicación entre el sistema y esta instancia es la combinación de solicitudes de propiedad dirigidas al pin y a los eventos que fluyen hacia o desde la interfaz de flujo imXF .

Se deben pasar dos objetos al controlador de minipuerto cuando se crea:

  • Reloj

  • Allocator (objeto)

El reloj es muy importante para las operaciones de representación y captura. El controlador de minipuerto debe representar notas en sus momentos especificados; cuando el controlador de minipuerto lee en datos MIDI, debe conocer la hora para que pueda marcar el evento de kernel. Para obtener más información, vea Relojes de latencia.

El objeto de asignador , que tiene una interfaz IAllocatorMXF , se usa como grupo de memoria para reciclar la memoria. Todos los mensajes MIDI del sistema se asignan desde este grupo común. El objeto de asignador debe usarse para crear o destruir los mensajes individuales.

Esta sección incluye:

Transporte MIDI

Relojes de latencia

Solicitudes de elemento de propiedad del controlador de miniporte

Convertir PortDMus en el controlador de puerto predeterminado de DirectMusic

Exponer el sintetizador como un dispositivo heredado