DirectMusicの初期化
以下のサンプルはMIDIファイルを読み込み、画面上で左クリックで再生、右クリックで停止を行うというものです。
この節ではサンプルソースのDirectMusicの初期化部分について解説を行います。
初期化の手順
DirectMusicの初期化は処理は以下のように手順で行います。
- COMの初期化
- パフォーマンスの作成
- パフォーマンスの初期化
- ローダーの作成
サンプルでは上記の処理をinitSound関数としてまとめています。
COMの初期化
COMの初期化を行うにはCoInitialize関数を使います。
// COMの初期化 if( FAILED( CoInitialize( NULL ) ) ) { return E_FAIL; }CoInitialize関数はこの後に使用するCoCreateInstance関数を使用する前に必要であり、
CoInitialize関数を行わず、CoCreateInstance関数を使用すると失敗してしまいます。
パフォーマンスの作成
次にIDirectMusicPerformance8 インターフェイスを取得するためにCoCreateInstance関数を使います。
// パフォーマンスの作成 if ( FAILED( CoCreateInstance( CLSID_DirectMusicPerformance, NULL, CLSCTX_INPROC, IID_IDirectMusicPerformance8, (void**)&g_pPerformance ) ) ) { return E_FAIL; }
IDirectMusicPerformance8 インターフェイスは、再生の総合的な管理を行うためのものです。
パフォーマンスの初期化
IDirectMusicPerformance8 インターフェイスのメソッドである、InitAudioを使用して、
パフォーマンスを初期化し、オーディオパスを設定します。
// パフォーマンスの初期化 if ( FAILED( g_pPerformance->InitAudio( NULL, NULL, NULL, DMUS_APATH_SHARED_STEREOPLUSREVERB, 64, DMUS_AUDIOF_ALL,NULL ) ) ) { return E_FAIL; }
ローダーの作成
IDirectMusicLoader8 インターフェイスを取得するためにCoCreateInstance関数を使います。
if ( FAILED( CoCreateInstance( CLSID_DirectMusicLoader, NULL, CLSCTX_INPROC, IID_IDirectMusicLoader8, (void**)&g_pLoader ) ) ) { return E_FAIL; }
IDirectMusicLoader8 インターフェイスは音楽ファイルをロードするためなどに使用します。