MIDIEVENT

ストリームバッファ中の MIDI イベントを記述します。

typedef struct midievent_tag {
    DWORD  dwDeltaTime;  // 前回からの時間(tick数)
    DWORD  dwStreamID;   // 予約(0)
    DWORD  dwEvent;      // イベントタイプとパラメータ
    DWORD  dwParms[1];   // ロングイベントのパラメータ
} MIDIEVENT;

メンバ

dwDeltaTime

前回の MIDI イベントと現在の MIDI イベントの間の時間を tick 単位で指定します。 tick の長さは、ストリームに関連付けられたタイムフォーマットとあるいはテンポによって定義されます。

dwStreamID

予約されています。 0 を指定しなければなりません。

dwEvent

イベントコードとイベントパラメータもしくは長さを組み合わせて指定します。

このメンバの上位8ビットはフラグとイベントコードを含んでいます。フラグは以下の値のいずれかになります。このフラグには MEVT_F_LONG か MEVT_F_SHORT のどちらかが指定されなければなりません。 MEVT_F_CALLBACK フラグは任意で指定できます。

意味
0x00000000 (MEVT_F_SHORT)

イベントはショートイベントです。イベントパラメータは dwEvent メンバの下位24ビットに含まれます。

0x40000000 (MEVT_F_CALLBACK)

イベントが実行されようとしているとき、システムはコールバックを発生させます。

0x80000000 (MEVT_F_LONG)

イベントはロングイベントです。 dwEvent メンバの下位24ビットには、 dwParms メンバに格納されるイベントパラメータの長さが指定されます。

イベントコードは以下の値のいずれかになります。

意味
0x00 (MEVT_SHORTMSG)

ショートイベントです。 dwEvent メンバの下位24ビットのデータはMIDIショートメッセージです。

0x01 (MEVT_TEMPO)

ショートイベントです。 dwEvent メンバの下位24ビットのデータは、以降のイベントの新しいテンポを表します。このテンポは、 MIDI ファイル内のテンポ変更メタイベントのフォーマットと同じフォーマットで指定されます。すなわち、4分音符の長さをマイクロ秒単位で指定します。(ストリームに指定されたタイムフォーマットが SMPTE 時間の場合は、このイベントは効果を持ちません。)

0x02 (MEVT_NOP)

ショートイベントです。このイベントはプレースホルダであり、実際には何もしません。 dwEvent メンバの下位24ビットのデータは無視されます。 dwEvent メンバに MEVT_F_CALLBACK フラグを指定している場合は、コールバックを発生させます。

0x80 (MEVT_LONGMSG)

ロングイベントです。イベントデータはそのまま送られます。このデータはシステムエクスクルーシブデータとみなされます。すなわち、イベントが実行された時点でランニングステータスがクリアされ、以前のイベントからのランニングステータスはこのイベントデータのどのチャンネルのイベントにも割り当てられません。同じ時刻のチャンネルメッセージグループを送るのにこのイベントを使用するのは好ましくありません。 MEVT_SHORTMSG をセットし、 dwDeltaTime メンバに 0 を入れたイベントを代わりに使うべきです。

0x82 (MEVT_COMMENT)

ロングイベントです。イベントデータは無視されます。ストリームデータをストリーム形式でファイルに格納しようとした場合に、このイベントは記録情報を格納するのに用いられることになります。(プログラムまたはシーケンサを作成するのに役立つことになります。)このデータのバッファ内では、ゼロバイトはコメントのクラスとその後のバイトがコメントデータを含んでいることを示します。

0x84 (MEVT_VERSION)

ロングイベントです。イベントデータに MIDISTRMBUFFVER 構造体を含まなければなりません。

dwParms

dwEvent メンバに MEVT_F_LONG フラグとバッファの長さを指定した場合は、このメンバはイベントのパラメータを含みます。整数個のダブルワード値(4バイト値)が格納されるように、このパラメータの実際のデータ以外の部分を 0 で埋めなければなりません。例えば、イベントデータの長さが5バイトだった場合には、合計を8バイトにするために後ろの3バイトを0で埋めなければなりません。この場合、 dwEvent メンバの下位24ビット(データの長さ)には実際の長さ(ここでは 5)を指定しなければなりません。

dwEvent メンバに MEVT_F_SHORT フラグを指定した場合は、このメンバは使用されません。

対応情報

Windows 95 以降 / Windows NT 3.1 以降

変数との対応

HSP 変数 メンバ
メンバ名 オフセット サイズ
midiev.0 dwDeltaTime 0 4
midiev.1 dwStreamID 4 4
midiev.2 dwEvent 8 4
midiev.3 dwParms[0] 12 4