Freigeben über


KSMUSICFORMAT-Struktur (ksmedia.h)

Die KSMUSICFORMAT-Struktur wird verwendet, um Informationen über MIDI-Daten zu senden und zu empfangen, die von WDM-Audiogeräten eingegeben und an WDM-Audiogeräte ausgegeben werden.

Syntax

typedef struct {
  ULONG TimeDeltaMs;
  ULONG ByteCount;
} KSMUSICFORMAT, *PKSMUSICFORMAT;

Member

TimeDeltaMs

Gibt an, wann diese Reihe von MIDI-Datenbytes wiedergegeben werden soll. Wenn dies die erste KSMUSICFORMAT-Struktur im Puffer ist, stellt dieses Feld das Delta (Zeitänderung, in Millisekunden) aus der PresentationTime in der KSSTREAM_HEADER-Struktur dar. Andernfalls stellt das Feld den Deltaoffset (in Millisekunden) aus der vorherigen Meldung dar (KSMUSICFORMAT-Struktur). Wenn dieser Zeitpunkt in der Vergangenheit liegt, wird die Nachricht sofort wiedergegeben.

ByteCount

Gibt die Anzahl der Byte von Daten an, die dieser Struktur folgen. Da die nachfolgende Struktur oder eigenschaften DWORD ausgerichtet sein sollten und zusätzliche Leerzeichen oder verwendete Bytes zulassen können, sollte ByteCount die tatsächliche Anzahl vorhandener Bytes sein und keinen Abstand zwischen den Datenstrukturen enthalten.

Hinweise

Diese Struktur wird verwendet, um IRPs zu senden und zu empfangen, die Informationen zu MIDI-Eingabe- und Ausgabestreams enthalten. Der IRP selbst enthält in seinem SystemBuffer-Feld einen Zeiger auf eine KSSTREAM_HEADER-Struktur, die als Header für ein Datenpaket dient, das aus einem Streamingtreiber-Pin gelesen oder in diese geschrieben werden soll. Der KS-Streamheader enthält im Feld Daten einen Zeiger auf den Puffer, der die Daten enthält. Die Daten in diesem Puffer bestehen aus einer Sequenz von Nachrichten, von denen jede eine KSMUSICFORMAT-Struktur ist, der unmittelbar eine Anzahl von Datenbytes folgt.

Die Zeitstempel in diesen IRPs nehmen bei den nacheinander ausgestellten IRPs immer zu. Da jedoch jedes IRP in einer Sequenz vollständig gewartet wird, bevor die Wartung des nächsten IRP beginnt, muss auch die Zeit für IRPs immer erhöht werden. Dies kann zu einer anomalen Situation führen, wie im folgenden Beispiel beschrieben.

Aktion BESCHREIBUNG
IRP #1 PresentationTime = 123 Millisekunden
Meldung #1 TimeDeltaMs: 0 Wird bei 123 Millisekunden wiedergegeben.
Meldung #2 TimeDeltaMs: 1 Wird bei 124 Millisekunden wiedergegeben.
Meldung #3 TimeDeltaMs: 7 Wird bei 131 Millisekunden wiedergegeben.
IRP #2 PresentationTime = 120 Millisekunden
Meldung #1 TimeDeltaMs: 5 Soll bei 125 Millisekunden gespielt werden, wird aber tatsächlich mit 131 Millisekunden gespielt. Diese IRP wird erst verarbeitet, wenn das vorherige IRP mit 131 Millisekunden abgeschlossen ist.
Meldung #2 TimeDeltaMs: 15 Wird in 140 Millisekunden wiedergegeben.

Anforderungen

Anforderung Wert
Header ksmedia.h (include Ksmedia.h)

Weitere Informationen

KSSTREAM_HEADER