Microsoft DirectX 8.0 (C++) |
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 コレクションの適切な音色を使って演奏が続けられる。
コレクションの詳細については、「音色コレクションの使い方」を参照すること。