Microsoft DirectX 8.0 (C++)

カスタム音色による MIDI ファイルの演奏

MIDI ファイルを演奏する場合、デフォルトでは、Gm.dls ファイルに含まれる Roland GM/GS Sound Set の音色が使用される。ただし、MIDI ファイルを演奏するときに、任意の DLS コレクションの音色を使用できる。

まず、コレクションをロードして、IDirectMusicCollection8 インターフェイスへのポインタを取得する。

次の関数の例では、ファイル名を使ってコレクションをロードしている。

HRESULT LoadCollectionByName(
        IDirectMusicLoader8 *pILoader, 
        char *pszFileName, 
        IDirectMusicCollection8 **ppICollection)
{
    HRESULT hr;
    DMUS_OBJECTDESC Desc;             // ディスクリプタ。
 
    // コレクション オブジェクトのファイル名と GUID を使って、
    // Desc を初期化することから開始する。
    // ファイル名は char 文字列から始まるので、
    // Unicode に変換する。
 
    mbstowcs(Desc.wszFileName,pszFileName,DMUS_MAX_FILENAME);
    Desc.dwSize = sizeof(DMUS_OBJECTDESC);
    Desc.guidClass = CLSID_DirectMusicCollection;  
    Desc.dwValidData = DMUS_OBJ_CLASS 
            | DMUS_OBJ_FILENAME 
            | DMUS_OBJ_FULLPATH;
 
    hr = pILoader->GetObject(&Desc, 
            IID_IDirectMusicCollection8,
            (void **) ppICollection);
    return hr;
}

次に、IDirectMusicSegment8::SetParam を呼び出して、DLS データをセグメントに接続する。次のサンプル コードは、セグメントと LoadCollectionByName 関数から返されるコレクションを接続する方法を示す。

// pSegment は MIDI ファイルから作成され、
// pLoadedCollection は有効な IDirectMusicCollection8 ポインタであると仮定する。
 
HRESULT hr = pSegment->SetParam(GUID_ConnectToDLSCollection,
        0xFFFFFFFF, 0, 0,
        (void*)pLoadedCollection);

最後に、IDirectMusicSegment8::Download を呼び出すことによって、コレクション内の音色をパフォーマンスまたはオーディオパスにダウンロードする。

MIDI セグメントにカスタム コレクションを付加するときに、GM コレクションへの接続は切断されない。たとえば、パッチ番号が 12 の 1 つの音色を含むコレクションをロードし、これをセグメントに接続する場合、12 以外のパッチ番号を持つ MIDI チャンネルでは、GM コレクションの適切な音色を使って演奏が続けられる。

コレクションの詳細については、「音色コレクションの使い方」を参照すること。