次の方法で共有


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 ミリ秒で再生されます。

必要条件

要件 価値
ヘッダー ksmedia.h (Ksmedia.h を含む)

関連項目

KSSTREAM_HEADER