KSMUSICFORMAT 结构 (ksmedia.h)
KSMUSICFORMAT 结构用于发送和接收来自 WDM 音频设备的输入和输出的 MIDI 数据的相关信息。
语法
typedef struct {
ULONG TimeDeltaMs;
ULONG ByteCount;
} KSMUSICFORMAT, *PKSMUSICFORMAT;
成员
TimeDeltaMs
指示何时应播放此系列 MIDI 数据字节。 如果这是缓冲区中的第一个 KSMUSICFORMAT 结构,则此字段表示 KSSTREAM_HEADER 结构中 PresentationTime 的增量(时间变化(以毫秒为单位)。 否则,该字段表示上一条消息(KSMUSICFORMAT 结构)的增量偏移量(以毫秒为单位)。 如果这一次是过去,则会立即播放该消息。
ByteCount
指定此结构后面的数据字节数。 由于后续结构或属性应对齐 DWORD,并且可能允许额外的空白或已用字节,因此,ByteCount 应为实际存在的字节数,不包括分隔数据结构的任何填充。
言论
此结构用于发送和接收包含有关 MIDI 输入和输出流的信息的 IRP。 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 毫秒。 |
要求
要求 | 价值 |
---|---|
标头 | ksmedia.h (包括 Ksmedia.h) |