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 毫秒 | |
Message #1 TimeDeltaMs:0 | 將會以 123 毫秒播放。 |
Message #2 TimeDeltaMs:1 | 將會以 124 毫秒播放。 |
Message #3 TimeDeltaMs:7 | 將會以 131 毫秒播放。 |
IRP #2 PresentationTime = 120 毫秒 | |
Message #1 TimeDeltaMs:5 | 應該以 125 毫秒播放,但實際上是在 131 毫秒播放。 在前一個 IRP 完成 131 毫秒之前,不會處理此 IRP。 |
Message #2 TimeDeltaMs:15 | 將會以 140 毫秒播放。 |
規格需求
需求 | 值 |
---|---|
標頭 | ksmedia.h (包含 Ksmedia.h) |