Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die Schnittstellen zum und vom Allocator sind IMXF und IAllocatorMXF. Diese Schnittstellen ermöglichen die Wiederverwendung von DMUS_KERNEL_EVENT-Strukturen, ohne Arbeitsspeicher zuordnen und freizugeben. IMXF::PutMessage gibt dem Allocator eine Struktur und IAllocatorMXF::GetMessage ruft eine frisch auf Null gesetzte DMUS_KERNEL_EVENT-Struktur aus dem Allocator zur Wiederverwendung ab. (Der Allokator wird mit leeren DMUS_KERNEL_EVENT Strukturen im Pool erstellt, sodass er nie leer beginnt.) Wie in der folgenden Abbildung dargestellt, kommen IRPs (in Form von DMUS_EVENTHEADER Strukturen) von dmusic.dll zum Entpacker.
Der Entpacker ruft IAllocatorMXF::GetMessage auf, um eine leere DMUS_KERNEL_EVENT Struktur abzurufen. Der Entpacker ruft die DMUS_KERNEL_EVENT Strukturen aus dem IRP ab, füllt diese Strukturen aus (je eine pro MIDI-Ereignis), und übergibt sie dann an den Sequencer (mit seiner MXF-Schnittstelle). Der Sequenzer sortiert sie neu basierend auf ihren Zeitstempeln und übergibt sie, wenn sie fällig werden, an den Miniport-Treiber, indem IMXF::PutMessage aufgerufen wird. Der Miniporttreiber zieht die MIDI-Daten aus den DMUS_KERNEL_EVENT Strukturen heraus, sodass er sie in Wellendaten rendern kann. Er gibt die verwendeten DMUS_KERNEL_EVENT-strukturen zurück zum Allocator mit einem weiteren IMXF::PutMessage-Aufruf.
Die umgekehrte Situation tritt bei der Erfassung auf. MIDI-Daten stammen von der Hardware bis zum Miniporttreiber, und der Miniporttreiber ruft IAllocatorMXF::GetMessage auf, um eine leere DMUS_KERNEL_EVENT Struktur zu erhalten. DMUS_KERNEL_EVENT-Strukturen werden mit Zeitstempeln und Daten gefüllt und über IMXF::PutMessage an die Aufnahmesenke übergeben. Der Miniporttreiber kann mehr als eine Nachricht pro Struktur übergeben, wenn das DMUS_KEF_EVENT_INCOMPLETE Flag in der DMUS_KERNEL_EVENT-Struktur festgelegt wird. Die Aufnahmesenke im DMus-Porttreiber analysiert diesen Rohdatenstrom und gibt DMUS_KERNEL_EVENT Strukturen aus, die zeitstempelte MIDI-Nachrichten (eine pro Struktur) enthalten.
Es ist auch möglich, dass der Miniporttreiber selbst zeitstempelte Nachrichten an die Aufnahmesenke sendet. In diesem Fall legt der Treiber das DMUS_KEF_EVENT_INCOMPLETE Bit in DMUS_KERNEL_EVENT nicht fest. Die Aufnahmesenke übergibt die mit Zeitstempel versehenen Strukturen direkt an den Packer, der die Nachrichten in IRPs packt und an dmusic.dllsendet. DirectMusic-Aufnahme ist nur für die Aufnahme von MIDI vorgesehen. Verwenden Sie für die Wave-Aufnahme die DirectSound-Aufnahme.
Wenn der Packer die Daten aus einer DMUS_KERNEL_EVENT-Struktur herauszieht, verwirft er die genutzte DMUS_KERNEL_EVENT-Struktur in den Allocator mit IMXF::PutMessage. Wenn der IRP-Puffer voll ist, wird er an dmusic.dllweitergeleitet. Der Packer empfängt leere IRPs von dmusic.dll, füllt sie aus und schließt sie ab. Weitere IRPs fließen kontinuierlich ein, sodass immer eine verfügbar ist, um bearbeitet zu werden.