Platform SDK: DirectX

DirectMusic ローダー

[C++]

DirectMusic オブジェクトをミュージック パフォーマンスに組み込む前に、それらをファイルまたはリソースからロードしなければならない。IDirectMusicLoader インターフェイスは、これらのオブジェクトのロードを管理するために使用される。また、オブジェクトを検索および列挙し、何度もロードされないようにキャッシングするためにも使用される。

アプリケーションでは、既存のローダーのインスタンスを、一度に 1 つだけ使用するべきである。1 つのグローバル ローダー オブジェクトを作成し、ロードがすべて終了するまでオブジェクトを解放しないようにする。この方法により、オブジェクトが効果的に検索およびキャッシングされる。

DirectMusic における IStream の実装により、データがソースからストリームに入れられる。データの解析は、IPersistStream の実装を通して、さまざまなオブジェクト自身によって処理される。標準的な DirectMusic データだけを処理する場合は、これらのインターフェイスを直接使用する必要はない。

ほかのオブジェクトによって参照されるオブジェクトは、透過的にロードされる。たとえば、DirectMusic Producer からロードされるスタイルに、ほかのファイルにデータがあるバンドへの参照が含まれているとする。スタイルの IPersistStream は参照を見つけると、データ ストリームを渡した IStream から IDirectMusicGetLoader インターフェイスを取得する。このインターフェイスを使用して、DirectMusicLoader へのポインタを取得する。続いて、IDirectMusicLoader::GetObject を呼び出して、バンドをロードする。

[Visual Basic]

DirectMusic オブジェクトをミュージック パフォーマンスに組み込む前に、それらをファイルまたはリソースからロードしなければならない。DirectMusicLoader クラスは、これらのオブジェクトのロードを管理するために使用される。

アプリケーションでは、既存の DirectMusicLoader オブジェクトを、一度に 1 つだけ使用するべきである。1 つのグローバル ローダー オブジェクトを作成し、ロードがすべて終了するまでオブジェクトを解放しないようにする。この方法により、オブジェクトが効果的に検索およびロードされる。

ただし、アプリケーションがセグメントを何度もロードする場合は、DirectMusic が内部で使用しているキャッシュ システムのために、同じセグメント オブジェクトは、ループの開始ポイントや DLS コレクションへの接続などの設定を、同じ内容で取得するように注意する。これを避けるには、セグメントを再ロードする前に、DirectMusicLoader オブジェクトを Nothing に設定して解放し、新しいオブジェクトを作成する。

ほかのオブジェクトによって参照されるオブジェクトは、透過的にロードされる。たとえば、DirectMusic Producer からロードされるスタイルに、ほかのファイルにデータがあるバンドへの参照が含まれているとする。DirectMusic は自動的にバンドをロードし、アプリケーションは DirectMusicStyle.GetBand メソッドを使ってこれを取り出す。

ローダーの使用方法の詳細については、次のトピックを参照すること。