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

IDirectMusicSynth

COM
IID09823661-5c85-11d2-afa6-00aa0024d8b6継承元IUnknown自前メソッド開始 vtbl3

メソッド 17

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

vtbl 3 HRESULT Open(DMUS_PORTPARAMS8* pPortParams)
pPortParamsDMUS_PORTPARAMS8*inoutシンセを初期化するDMUS_PORTPARAMS8へのポインタ。NULLで既定設定を使用する。
vtbl 4 HRESULT Close()
vtbl 5 HRESULT SetNumChannelGroups(DWORD dwGroups)
dwGroupsDWORDinシンセに割り当てるチャンネルグループ数(各16チャンネル)。
vtbl 6 HRESULT Download(HANDLE* phDownload, void* pvData, BOOL* pbFree)
phDownloadHANDLE*inoutダウンロード結果を識別するハンドルの受け取り先。後のUnloadで使用する。
pvDatavoid*inoutダウンロードする楽器/ウェーブデータブロックへのポインタ。
pbFreeBOOL*inoutシンクがこのメモリを解放してよいか(TRUE)を示すフラグを受け取るポインタ。
vtbl 7 HRESULT Unload(HANDLE hDownload, INT_PTR lpFreeHandle, HANDLE hUserData)
hDownloadHANDLEinアンロードするダウンロードデータのハンドル(Downloadで取得)。
lpFreeHandleINT_PTRinメモリ解放コールバック関数へのポインタ(INT_PTR)。不要なら0。
hUserDataHANDLEin解放コールバックへ渡すユーザー定義データハンドル。
vtbl 8 HRESULT PlayBuffer(LONGLONG rt, BYTE* pbBuffer, DWORD cbBuffer)
rtLONGLONGin再生開始のタイムスタンプ(REFERENCE_TIME、100ナノ秒単位)。
pbBufferBYTE*inout再生するMIDIメッセージデータバッファへのポインタ。
cbBufferDWORDinpbBufferのバイト数。
vtbl 9 HRESULT GetRunningStats(DMUS_SYNTHSTATS* pStats)
pStatsDMUS_SYNTHSTATS*inoutシンセの稼働統計を受け取るDMUS_SYNTHSTATS構造体へのポインタ。
vtbl 10 HRESULT GetPortCaps(DMUS_PORTCAPS* pCaps)
pCapsDMUS_PORTCAPS*inoutシンセが提供するポート能力を受け取るDMUS_PORTCAPS構造体へのポインタ。
vtbl 11 HRESULT SetMasterClock(IReferenceClock* pClock)
pClockIReferenceClock*inシンセが同期するマスタークロックのIReferenceClockへのポインタ。
vtbl 12 HRESULT GetLatencyClock(IReferenceClock** ppClock)
ppClockIReferenceClock**outシンセのレイテンシを反映したIReferenceClockの受け取り先。要Release。
vtbl 13 HRESULT Activate(BOOL fEnable)
fEnableBOOLinシンセを有効化(TRUE)するか無効化(FALSE)するかを指定するブール値。
vtbl 14 HRESULT SetSynthSink(IDirectMusicSynthSink* pSynthSink)
pSynthSinkIDirectMusicSynthSink*inシンセの出力先となるIDirectMusicSynthSinkへのポインタ。
vtbl 15 HRESULT Render(SHORT* pBuffer, DWORD dwLength, LONGLONG llPosition)
pBufferSHORT*inout合成したPCMサンプル(16ビット)を書き込む出力バッファへのポインタ。
dwLengthDWORDinレンダリングするサンプル数。
llPositionLONGLONGinレンダリング開始のサンプル位置(オフセット)。
vtbl 16 HRESULT SetChannelPriority(DWORD dwChannelGroup, DWORD dwChannel, DWORD dwPriority)
dwChannelGroupDWORDin対象チャンネルグループ(1起点)。
dwChannelDWORDin対象チャンネル(0起点、0〜15)。
dwPriorityDWORDin設定するボイス割り当て優先度。
vtbl 17 HRESULT GetChannelPriority(DWORD dwChannelGroup, DWORD dwChannel, DWORD* pdwPriority)
dwChannelGroupDWORDin対象チャンネルグループ(1起点)。
dwChannelDWORDin対象チャンネル(0起点、0〜15)。
pdwPriorityDWORD*inout現在の優先度を受け取るポインタ。
vtbl 18 HRESULT GetFormat(WAVEFORMATEX* pWaveFormatEx, DWORD* pdwWaveFormatExSize)
pWaveFormatExWAVEFORMATEX*inoutシンセ出力の波形フォーマットを受け取るWAVEFORMATEX構造体へのポインタ。サイズ問い合わせ時はNULL。
pdwWaveFormatExSizeDWORD*inoutpWaveFormatExバッファのサイズを入出力するポインタ。
vtbl 19 HRESULT GetAppend(DWORD* pdwAppend)
pdwAppendDWORD*inoutウェーブループ処理に必要な追加サンプル数を受け取るポインタ。

HSP用 COM定義

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

出力引数:
#define global IID_IDirectMusicSynth "{09823661-5C85-11D2-AFA6-00AA0024D8B6}"
#usecom global IDirectMusicSynth IID_IDirectMusicSynth "{58C2B4D0-46E7-11D1-89AC-00A0C9054129}"
#comfunc global IDirectMusicSynth_Open                 3 var
#comfunc global IDirectMusicSynth_Close                4
#comfunc global IDirectMusicSynth_SetNumChannelGroups  5 int
#comfunc global IDirectMusicSynth_Download             6 sptr,sptr,var
#comfunc global IDirectMusicSynth_Unload               7 sptr,sptr,sptr
#comfunc global IDirectMusicSynth_PlayBuffer           8 int64,var,int
#comfunc global IDirectMusicSynth_GetRunningStats      9 var
#comfunc global IDirectMusicSynth_GetPortCaps          10 var
#comfunc global IDirectMusicSynth_SetMasterClock       11 sptr
#comfunc global IDirectMusicSynth_GetLatencyClock      12 sptr
#comfunc global IDirectMusicSynth_Activate             13 int
#comfunc global IDirectMusicSynth_SetSynthSink         14 sptr
#comfunc global IDirectMusicSynth_Render               15 var,int,int64
#comfunc global IDirectMusicSynth_SetChannelPriority   16 int,int,int
#comfunc global IDirectMusicSynth_GetChannelPriority   17 int,int,var
#comfunc global IDirectMusicSynth_GetFormat            18 var,var
#comfunc global IDirectMusicSynth_GetAppend            19 var
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。