Win32 API 日本語リファレンス
ホームMedia.Audio.DirectMusic › IDirectMusicBuffer

IDirectMusicBuffer

COM
IIDd2ac2878-b39b-11d1-8704-00600893b1bd継承元IUnknown自前メソッド開始 vtbl3

メソッド 13

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT Flush()
vtbl 4 HRESULT TotalTime(LONGLONG* prtTime)
prtTimeLONGLONG*inoutバッファ内全メッセージが占める総再生時間(REFERENCE_TIME、100ナノ秒単位)を受け取るポインタ。
vtbl 5 HRESULT PackStructured(LONGLONG rt, DWORD dwChannelGroup, DWORD dwChannelMessage)
rtLONGLONGinメッセージのタイムスタンプ(REFERENCE_TIME、100ナノ秒単位)。
dwChannelGroupDWORDinメッセージの宛先チャンネルグループ(1起点)。
dwChannelMessageDWORDin格納する3バイト以下の標準MIDIメッセージ(ステータス+データ)。
vtbl 6 HRESULT PackUnstructured(LONGLONG rt, DWORD dwChannelGroup, DWORD cb, BYTE* lpb)
rtLONGLONGinメッセージのタイムスタンプ(REFERENCE_TIME、100ナノ秒単位)。
dwChannelGroupDWORDinメッセージの宛先チャンネルグループ(1起点)。
cbDWORDinlpbが指す非構造化データのバイト数(SysExなど)。
lpbBYTE*inout格納する生MIDIデータバイト列へのポインタ。
vtbl 7 HRESULT ResetReadPtr()
vtbl 8 HRESULT GetNextEvent(LONGLONG* prt, DWORD* pdwChannelGroup, DWORD* pdwLength, BYTE** ppData)
prtLONGLONG*inout取り出したイベントのタイムスタンプを受け取るポインタ。不要ならNULL可。
pdwChannelGroupDWORD*inout取り出したイベントのチャンネルグループを受け取るポインタ。
pdwLengthDWORD*inout取り出したイベントデータのバイト長を受け取るポインタ。
ppDataBYTE**inout取り出したイベントデータ本体を指すポインタの受け取り先(バッファ内を参照)。
vtbl 9 HRESULT GetRawBufferPtr(BYTE** ppData)
ppDataBYTE**inoutバッファ内部の生メモリ先頭を指すポインタの受け取り先。直接読み書きに使う。
vtbl 10 HRESULT GetStartTime(LONGLONG* prt)
prtLONGLONG*inoutバッファの開始基準時刻(REFERENCE_TIME)を受け取るポインタ。
vtbl 11 HRESULT GetUsedBytes(DWORD* pcb)
pcbDWORD*inout現在バッファに格納されているデータの使用バイト数を受け取るポインタ。
vtbl 12 HRESULT GetMaxBytes(DWORD* pcb)
pcbDWORD*inoutバッファに格納可能な最大バイト数を受け取るポインタ。
vtbl 13 HRESULT GetBufferFormat(GUID* pGuidFormat)
pGuidFormatGUID*inoutバッファのデータ形式を識別するGUIDの受け取り先。
vtbl 14 HRESULT SetStartTime(LONGLONG rt)
rtLONGLONGinバッファの開始基準時刻として設定するREFERENCE_TIME値。
vtbl 15 HRESULT SetUsedBytes(DWORD cb)
cbDWORDinバッファ内有効データのバイト数として設定する値。直接書き込み後に整合させる。

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

出力引数:
#define global IID_IDirectMusicBuffer "{D2AC2878-B39B-11D1-8704-00600893B1BD}"
#usecom global IDirectMusicBuffer IID_IDirectMusicBuffer "{}"
#comfunc global IDirectMusicBuffer_Flush             3
#comfunc global IDirectMusicBuffer_TotalTime         4 var
#comfunc global IDirectMusicBuffer_PackStructured    5 int64,int,int
#comfunc global IDirectMusicBuffer_PackUnstructured  6 int64,int,int,var
#comfunc global IDirectMusicBuffer_ResetReadPtr      7
#comfunc global IDirectMusicBuffer_GetNextEvent      8 var,var,var,var
#comfunc global IDirectMusicBuffer_GetRawBufferPtr   9 var
#comfunc global IDirectMusicBuffer_GetStartTime      10 var
#comfunc global IDirectMusicBuffer_GetUsedBytes      11 var
#comfunc global IDirectMusicBuffer_GetMaxBytes       12 var
#comfunc global IDirectMusicBuffer_GetBufferFormat   13 var
#comfunc global IDirectMusicBuffer_SetStartTime      14 int64
#comfunc global IDirectMusicBuffer_SetUsedBytes      15 int
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。