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 ストリーム ヘッダーの Data フィールドには、 データ を含むバッファーへのポインターが含まれています。 そのバッファー内のデータは一連のメッセージで構成され、それぞれが 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 を含む) |