KSMUSICFORMAT 结构 (ksmedia.h)

KSMUSICFORMAT 结构用于发送和接收有关从 WDM 音频设备输入和输出的 MIDI 数据的信息。

语法

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

成员

TimeDeltaMs

指示何时应播放这一系列 MIDI 数据字节。 如果这是缓冲区中的第一个 KSMUSICFORMAT 结构,则此字段表示增量 (时间变化(以毫秒为单位),KSSTREAM_HEADER结构中的PresentationTime) 。 否则,字段表示与上一条消息 (KSMUSICFORMAT 结构) ) 增量偏移量 (毫秒。 如果此时间是过去时间,则会立即播放该消息。

ByteCount

指定遵循此结构的数据字节数。 由于后续结构或属性应与 DWORD 对齐,并且可能允许额外的空白或已用字节, 因此 ByteCount 应为实际存在的字节数,并且不包括任何分隔数据结构的填充。

注解

此结构用于发送和接收 IRP,其中包含有关 MIDI 输入和输出流的信息。 IRP 本身在其 SystemBuffer 字段中包含指向KSSTREAM_HEADER结构的指针,该结构用作要从流式驱动程序引脚读取或写入的数据包的标头。 KS 流标头在其 “数据” 字段中包含指向包含数据的缓冲区的指针。 该缓冲区中的数据由一系列消息组成,每个消息都是 KSMUSICFORMAT 结构,紧跟一些数据字节。

这些 IRP 中的时间戳始终在连续发布的 IRP 中增加。 但是,由于序列中的每个 IRP 在开始为下一个 IRP 提供服务之前都已完全提供服务,因此在 IRP 之间也必须始终增加时间。 这可能会导致异常情况,如以下示例中所述。

操作 说明
IRP #1 PresentationTime = 123 毫秒
消息 #1 TimeDeltaMs: 0 将在 123 毫秒播放。
消息 #2 TimeDeltaMs:1 将在 124 毫秒播放。
消息 #3 TimeDeltaMs:7 将在 131 毫秒播放。
IRP #2 PresentationTime = 120 毫秒
消息 #1 TimeDeltaMs:5 本应以 125 毫秒的速度播放,但实际上以 131 毫秒播放。 在上一个 IRP(131 毫秒)完成之前,不会处理此 IRP。
消息 #2 TimeDeltaMs:15 将在 140 毫秒播放。

要求

要求
Header ksmedia.h (包括 Ksmedia.h)

另请参阅

KSSTREAM_HEADER