Freigeben über


MIDI-Transport

Der DMus-Porttreiber ist auf der Vorder- und Rückseite der Synthesizerarbeit des DMus-Miniporttreibers beteiligt. Der Porttreiber gibt einen MIDI-Stream ein, der aus zeitstempelten MIDI-Daten besteht, und leitet den Stream an den Sequencer weiter. Der Sequencer entfernt die Zeitstempel und übergibt die unformatierten MIDI-Nachrichten an den Miniporttreiber, wenn deren Zeitstempel fällig sind. (DLS-Daten werden ohne Vorverarbeitung direkt über den Porttreiber an den Miniporttreiber übergeben.)

Wenn der MIDI-Eingabestream des DMus-Miniporttreibers in Wellendaten konvertiert wird, wird seine Ausgabe von der Wellensenke verwaltet (auch als "Synthiesenke" oder "Rendersenke" bezeichnet).

Der DMus-Porttreiber implementiert einen Kernelstreamingfilter mit einem Eingabenadel, der DirectMusic-Daten aus der DirectMusic-Benutzermoduskomponente akzeptiert, dmusic.dll. Der Porttreiber verfügt auch über einen Wellenausgabe-Pin, der den synthetisierten Audiodatenstrom ausgibt. Die Wellensenke verwaltet diesen Pin und teilt dem Synth mit, wo im Arbeitsspeicher die Daten geschrieben werden sollen. Diese Anordnung isoliert den Synth von den Details des Kernelstreamings. Ihr DMus-Miniporttreiber muss sich nur mit den Details der Synthesierung von Wellendaten aus dem EINGABE-MIDI-Stream befassen. Der Porttreiber sendet die Wellendaten an das System, und das Filterdiagramm von SysAudio verbindet die Filter, damit alles ordnungsgemäß fließt. Wie im folgenden Diagramm gezeigt, werden MIDI-Daten in den DMus-Porttreiber eingefügt und nach der Sequenzierung an den DMus-Miniporttreiber übergeben.

Diagramm, das den Fluss von MIDI- und DLS-Daten durch den PortDMus-Treiber veranschaulicht.

Der Miniporttreiber konvertiert die MIDI-Daten in das Wellenformat, das in einen Puffer gerendert wird, der von einem anderen Teil des Porttreibers festgelegt wird: der Wellensenke. Anstatt wie im Benutzermodus zu DirectSound zu wechseln, geht die Wellenausgabe über den KMixer-Systemtreiber an die Audiohardware. DirectSound ist eigentlich nur eine API, die KMixer verfügbar macht, und die DirectSound-Beschleunigung besteht darin, dass die Mixerfunktionen in der Hardware beschleunigt werden, anstatt in Software von KMixer emuliert zu werden.

Der SysAudio-Systemtreiber, der das Audiofilterdiagramm erstellt, verbindet den DMus-Porttreiber mit einer Hardware. Der Teil der Wellensenke des Porttreibers übergibt die Daten über seinen Wellenauslaufstecker, den SysAudio mit dem Hardwaregerät verbinden kann. Es ruft Wellendaten aus dem DMus-Miniporttreiber ab (ohne Rücksicht darauf, ob es sich um einen Hardware- oder Softwaresynth handelt) und behandelt alle Zeitsteuerungsprobleme. Im Vergleich zum Benutzermodus ist der Miniporttreiber analog zum Synth, während die Wellensenke nur Teil des Porttreibers ist.

Wenn ein DMus-Miniporttreiber seine Ausgabe zurück an den Host bereitstellen kann, macht er einen Wellenpin mit einer Datenrichtung von KSPIN_DATAFLOW_OUT verfügbar (siehe KSPIN), die SysAudio erkennt und mit KMixer verbindet.

Weitere Informationen zur Wellensenke finden Sie unter Eine Wellensenke für Kernel-Mode Softwaresynthesizer.

Dieser Abschnitt enthält außerdem Folgendes:

IMXF-Schnittstellen

Zuweisung