Condividi tramite


Interfaccia del driver Miniport DirectMusic

L'interfaccia del driver miniport DMus si basa sull'interfaccia del driver miniport MIDI, ma aggiunge le estensioni seguenti per supportare sintetizzatori avanzati:

  • Download DLS maggiori di 16 canali per istanza

  • Sequenziazione degli eventi di nota nell'hardware

L'interfaccia del driver miniport DMus differisce dall'interfaccia del driver miniport MIDI in diversi modi. Un driver miniport DMus implementa l'interfaccia IMiniportDMus anziché IMiniportMidi. Questa interfaccia è simile a IMiniportMidi, ma il metodo IMiniportDMus::NewStream crea un'interfaccia IMXF (filtro di trasformazione MIDI) e si connette a un'interfaccia IAllocatorMXF nel driver di porta DMus, anziché implementare un'interfaccia IMiniportMidiStream . IAllocatorMXF e IMXF espongono il wrapping delle chiamate GetMessage e PutMessage standard (vedere IAllocatorMXF::GetMessage e IMXF::P utMessage). Queste chiamate gestiscono eventi in pacchetto anziché byte MIDI non elaborati.

Il driver miniport DMus per un sintetizzatore può implementare alcune o tutte le proprietà DirectMusic. Queste proprietà consentono al sistema di gestire i download e le allocazioni dei canali DLS per il dispositivo. Il file di intestazione dmusprop.h definisce gli elementi di proprietà specifici di DirectMusic. Per un elenco di queste proprietà, vedere KSPROPSETID_Synth e KSPROPSETID_Synth_Dls.

Si prevede che i driver miniport DMus consentano la creazione di più istanze di pin. Ogni istanza di pin funge da sintetizzatore virtuale e contiene un set di canali e dls scarica indipendentemente dalle altre istanze di pin.

Alcune delle proprietà synth descritte in Set di proprietà driver audio agiscono su un'istanza di pin e altre sono globali. Per elaborare le proprietà globali, il sintetizzatore deve avere un nodo sintetizzatore nella topologia. La descrizione di ogni elemento della proprietà indica se tale elemento viene inviato al nodo del sintetizzatore o a un'istanza del pin. Per ogni componente hardware che supporta la sintesi, esiste un oggetto driver di porta e un oggetto driver miniport, come illustrato nella figura seguente.

Diagramma che illustra la relazione tra driver porta e miniport per un sintetizzatore DirectMusic.

L'oggetto driver di porta espone un'istanza di un'interfaccia IPortDMus , contenuta nell'oggetto driver miniport. Il driver miniport esporta un'istanza di un'interfaccia IMiniportDMus , che viene mantenuta dal driver della porta. Per ogni pin di cui è stata creata un'istanza, il driver della porta richiede un'interfaccia IMXF corrispondente. La comunicazione tra il sistema e questa istanza è la combinazione di richieste di proprietà indirizzate al pin e agli eventi che passano a o dall'interfaccia del flusso IMXF .

Quando viene creato, è necessario passare due oggetti al driver miniport:

  • Orologio

  • Oggetto allocatore

L'orologio è molto importante per le operazioni di rendering e acquisizione. Il driver miniport deve eseguire il rendering delle note ai tempi specificati; quando il driver miniport legge nei dati MIDI, deve conoscere l'ora in modo che possa timestampare l'evento del kernel. Per altre informazioni, vedere Clock di latenza.

L'oggetto allocatore , che ha un'interfaccia IAllocatorMXF , viene usato come pool di memoria per riciclare la memoria. Tutti i messaggi MIDI nel sistema vengono allocati da questo pool comune. L'oggetto allocatore deve essere usato per creare o eliminare definitivamente i singoli messaggi.

Contenuto della sezione

Trasporto MIDI

Clock di latenza

Richieste di elementi di proprietà del driver Miniport

Rendere PortDMus il driver di porta DirectMusic predefinito

Esposizione del sintetizzatore come dispositivo legacy