Microsoft DirectX 8.0 (C++) |
次は、DirectMusic のパフォーマンスおよびシンセサイザでサウンド データを処理する。データを取得するには、ローダーにデータの場所を指示する必要がある。ファイルをロードするたびにフル パスを指定することもできるが、デフォルトのディレクトリを設定しておく方が便利である。これには、IDirectMusicLoader8::SetSearchDirectory メソッドを使用する。
サンプル コードでは、デフォルトの Windows メディア ディレクトリへのパスが指定されている。別のフォルダのファイルを取得するには、wstrSearchPath の値を変更する。
次のコードは、チュートリアル サンプル内の WinMain 関数の一部である。
// Windows メディア ディレクトリを見つける。 CHAR strPath[MAX_PATH]; GetWindowsDirectory( strPath, MAX_PATH ); strcat( strPath, "\\media" ); // Unicode に変換する。 WCHAR wstrSearchPath[MAX_PATH]; MultiByteToWideChar( CP_ACP, 0, strPath, -1, wstrSearchPath, MAX_PATH ); // 検索ディレクトリを設定する。 g_pLoader->SetSearchDirectory( GUID_DirectMusicAllTypes, // 検索するファイルの種類。 wstrSearchPath, // 検索する場所。 FALSE // オブジェクト データを消去しない。 );
SetSearchDirectory の呼び出しの中で、fClear パラメータが FALSE に設定されているのは、間違ったディレクトリのオブジェクトが再ロードされる可能性はないからである。アプリケーションが別のフォルダから同じ名前のオブジェクトをロードしない限り、間違ったディレクトリのオブジェクトが再ロードされることはない。
ローダーにファイルの検索場所を指示したら、次は、ファイルを 1 つのセグメントとしてロードする。
WCHAR wstrFileName[MAX_PATH] = L"The Microsoft Sound.wav"; if (FAILED(g_pLoader->LoadObjectFromFile( CLSID_DirectMusicSegment, // クラス識別子。 IID_IDirectMusicSegment8, // 目的のインターフェイスの ID。 wstrFileName, // ファイル名。 (LPVOID*) &g_pSegment // インターフェイスを受け取るポインタ。 ))) { MessageBox( NULL, "Media not found, sample will now quit.", "DMusic Tutorial", MB_OK ); return 0; }
次の「ステップ 3 : ファイルの再生」に続く。