DirectMusic Miniport-Treiberschnittstelle
Die DMus-Miniporttreiberschnittstelle basiert auf der MIDI-Miniporttreiberschnittstelle, fügt jedoch die folgenden Erweiterungen hinzu, um erweiterte Synthesizer zu unterstützen:
DLS-Downloads von mehr als 16 Kanälen pro instance
Sequenzieren von Notizereignissen in Hardware
Die DMus Miniport-Treiberschnittstelle unterscheidet sich in mehrfacher Hinsicht von der MIDI-Miniport-Treiberschnittstelle. Ein DMus-Miniporttreiber implementiert die Schnittstelle IMiniportDMus im Gegensatz zu IMiniportMidi. Diese Schnittstelle ähnelt IMiniportMidi, aber die IMiniportDMus::NewStream-Methode erstellt eine IMXF-Schnittstelle (MIDI-Transformationsfilter) und stellt eine Verbindung mit einer IAllocatorMXF-Schnittstelle im DMus-Porttreiber her, anstatt eine IMiniportMidiStream-Schnittstelle zu implementieren. IAllocatorMXF und IMXF umschließen die Standardmäßigaufrufe GetMessage und PutMessage (siehe IAllocatorMXF::GetMessage und IMXF::P utMessage). Diese Aufrufe behandeln gepackte Ereignisse und nicht unformatierte MIDI-Bytes.
Der DMus-Miniporttreiber für einen Synthesizer kann einige oder alle DirectMusic-Eigenschaften implementieren. Diese Eigenschaften ermöglichen es dem System, DLS-Downloads und Kanalzuordnungen für das Gerät zu verwalten. Die Headerdatei dmusprop.h definiert DirectMusic-spezifische Eigenschaftselemente. Eine Liste dieser Eigenschaften finden Sie unter KSPROPSETID_Synth und KSPROPSETID_Synth_Dls.
Es wird erwartet, dass DMus-Miniporttreiber die Erstellung mehrerer Pininstanzen ermöglichen. Jeder Pin instance fungiert als ein virtueller Synthesizer und enthält eine Reihe von Kanälen und DLS-Downloads unabhängig von den anderen Pininstanzen.
Einige der unter Audiotreiber-Eigenschaftensätze beschriebenen Synth-Eigenschaften wirken auf eine Anheftung instance, andere sind global. Zum Verarbeiten der globalen Eigenschaften muss der Synthesizer über einen Synthesizerknoten in seiner Topologie verfügen. Die Beschreibung jedes Eigenschaftselements gibt an, ob dieses Element an den Synthesizerknoten oder an eine Anheftung instance gesendet wird. Für jedes Hardwarestück, das die Synthese unterstützt, sind ein Porttreiberobjekt und ein Miniporttreiberobjekt vorhanden, wie in der folgenden Abbildung dargestellt.
Das Porttreiberobjekt macht eine instance einer IPortDMus-Schnittstelle verfügbar, die vom Miniporttreiberobjekt gehalten wird. Der Miniporttreiber exportiert eine instance einer IMiniportDMus-Schnittstelle, die vom Porttreiber gespeichert wird. Für jeden instanziierten Pin fordert der Porttreiber eine entsprechende IMXF-Schnittstelle an. Die Kommunikation zwischen dem System und diesem instance ist die Kombination von Eigenschaftenanforderungen, die an den Pin adressiert sind, und Ereignisse, die an oder von der IMXF-Streamschnittstelle fließen.
Beim Erstellen müssen zwei Objekte an den Miniporttreiber übergeben werden:
Clock
Zuordnungsobjekt
Die Uhr ist für Render- und Erfassungsvorgänge sehr wichtig. Der Miniporttreiber muss Notizen zu den angegebenen Zeiten rendern. wenn der Miniporttreiber MIDI-Daten einliest, muss er die Zeit kennen, damit er das Kernelereignis zeitstempeln kann. Weitere Informationen finden Sie unter Latenzuhren.
Das Zuordnungsobjekt , das über eine IAllocatorMXF-Schnittstelle verfügt, wird als Speicherpool zum Recyceln von Arbeitsspeicher verwendet. Alle MIDI-Nachrichten im System werden aus diesem gemeinsamen Pool zugeordnet. Das Zuordnungsobjekt sollte verwendet werden, um die einzelnen Nachrichten zu erstellen oder zu zerstören.
Dieser Abschnitt umfasst Folgendes:
Elementanforderungen der Miniport-Treibereigenschaft