Expand Minimize

KSMUSICFORMAT structure

The KSMUSICFORMAT structure is used to send and receive information about MIDI data that is input from and output to WDM audio devices.

Syntax


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

Members

TimeDeltaMs

Indicates when this series of MIDI data bytes should be played. If this is the first KSMUSICFORMAT structure in the buffer, this field represents the delta (time change, in milliseconds) from the PresentationTime in the KSSTREAM_HEADER structure. Otherwise, the field represents the delta offset (in milliseconds) from the previous message (KSMUSICFORMAT structure). If this time is in the past, then the message is played immediately.

ByteCount

Specifies the number of bytes of data that follow this structure. Because the subsequent structure or properties should be DWORD aligned and might allow for extra blanks or used bytes, ByteCount should be the actual number of bytes present and not include any padding separating the data structures.

Remarks

This structure is used to send and receive IRPs containing information about MIDI input and output streams. The IRP itself contains in its SystemBuffer field a pointer to a KSSTREAM_HEADER structure, which serves as a header for a packet of data that is to be read from or written to a streaming driver pin. The KS stream header contains in its Data field a pointer to the buffer that contains the data. The data in that buffer consists of a sequence of messages, each of which is a KSMUSICFORMAT structure that is immediately followed by some number of bytes of data.

Time stamps in these IRPs always increase across successively issued IRPs. However, because each IRP in a sequence is fully serviced before servicing of the next IRP begins, time must also always increase across IRPs. This can lead to an anomalous situation, as described in the following example.

ActionDescription

IRP #1 PresentationTime = 123 milliseconds

Message #1 TimeDeltaMs: 0

Will be played at 123 milliseconds.

Message #2 TimeDeltaMs: 1

Will be played at 124 milliseconds.

Message #3 TimeDeltaMs: 7

Will be played at 131 milliseconds.

IRP #2 PresentationTime = 120 milliseconds

Message #1 TimeDeltaMs: 5

Supposed to be played at 125 milliseconds, but is actually played at 131 milliseconds. This IRP is not processed until the previous IRP at 131 milliseconds finishes.

Message #2 TimeDeltaMs: 15

Will be played at 140 milliseconds.

 

Requirements

Header

Ksmedia.h (include Ksmedia.h)

See also

KSSTREAM_HEADER

 

 

Send comments about this topic to Microsoft

Show:
© 2015 Microsoft