Microsoft DirectX 8.0 (C++)

ステップ 2 : ファイルのロード

次は、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 : ファイルの再生」に続く。