Microsoft DirectX 8.0 (C++)

バンドの手動ダウンロード

次のいずれかの方法を使うと、バンドを手動でダウンロードすることができる。

アプリケーションが複数のシンセサイザ、つまり複数のポートを使用するオーディオパスを作成する場合、パフォーマンスではなく、ここのオーディオパスにバンドをダウンロードしなければならない。ただし、ほとんどのアプリケーションではシンセサイザを 1 つだけ使用するので、すべての音色データをパフォーマンスにダウンロードしても安全である。

複数のオーディオパスは、通常同じシンセサイザを共有する。バンドをオーディオパスにダウンロードすると、音色データはそのオーディオパス上のポートにダウンロードされ、同じポートを使用するすべてのオーディオパスで利用できるようになる。データを各オーディオパスにダウンロードする必要はない。

たとえば、レーシング ゲームで車のエンジン音の DLS 音色を使用するセグメントがあるとする。レースの各自動車の 3D パラメータを個々に操作するために、複数のオーディオパスでサウンドを再生する。この音色は、一度だけダウンロードする必要がある。

同じ音色を繰り返しダウンロードしても問題は生じない。1 つのバンド内にある音色が何度も現れる場合や、複数のバンドを同時に開いてダウンロードするときに同じ音色がこれらのバンドで使用されている場合でも、その音色のデータは 1 回だけシンセサイザに送信される。

次の関数は、ディスクからバンドをロードして、そのバンドをパフォーマンスにダウンロードする。

HRESULT myDownloadBand(
    IDirectMusicLoader8 *pILoader,      // ローダー インターフェイス。
    IDirectMusicBand8 **ppBand,         // ポインタを取得するため。
    IDirectMusicPerformance8 *pPerf,    // バンドを使用するパフォーマンス。
    WCHAR *pwszFile)                    // ロードするファイル。
{
    HRESULT hr;
    DMUS_OBJECTDESC Desc;
 
    // バンド オブジェクトのファイル名と GUID を使って、
    // Desc を初期化することから開始する。
 
    wcscpy(Desc.wszFileName,pwszFile);
    Desc.dwSize = sizeof(Desc);
    Desc.guidClass = CLSID_DirectMusicBand; 
    Desc.dwValidData = DMUS_OBJ_CLASS | 
            DMUS_OBJ_FILENAME | DMUS_OBJ_FULLPATH;
 
    hr = pILoader->GetObject(&Desc, IID_IDirectMusicBand8,
            (void **) ppBand);
    if (SUCCEEDED(hr))
    {
        hr = (*ppBand)->Download(pPerf);
    }
    return hr;
}