Platform SDK: DirectX |
通常は、ロードされたセグメントのバンド トラックによって、プログラム チェンジが実行される。ただし、手動で行うこともできる。
まず、IDirectMusicBand::CreateSegment メソッドを呼び出して、セカンダリ セグメントを作成する。次に、IDirectMusicPerformance::PlaySegment を呼び出して、作成したセグメントを演奏する。通常は dwFlags パラメータ内の DMUS_SEGF_MEASURE または DMUS_SEGF_GRID (DMUS_SEGF_FLAGS を参照) を使って、適切な境界でバンド チェンジが有効になるよう保証する。
次のコード例では、バンドからセグメントを作成し、そのセグメントを演奏している。
/ * 自動ダウンロードが有効になっているか、アプリケーションが pBand->Download を呼び出していると仮定する。*/ HRESULT myPlayBand( IDirectMusicBand *pBand, // バンド オブジェクトへのポインタ。 IDirectMusicPerformance *pPerf, // バンドを使うパフォーマンス。 REFERENCE_TIME rfTime, // 演奏開始タイム。 DWORD dwFlags) // パフォーマンス フラグ。 { IDirectMusicSegment *pSegment; HRESULT hr = pBand->CreateSegment(&pSegment); if (SUCCEEDED(hr)) { hr = pPerf->PlaySegment(pSegment, dwFlags | DMUS_SEGF_SECONDARY, rfTime, NULL); pSegment->Release(); } return hr; }
まず、DirectMusicBand.CreateSegment を使ってセグメントを作成する。次に、DirectMusicPerformance.PlaySegment を呼び出して、作成したセグメントを演奏する。通常は、IFlags パラメータ内の DMUS_SEGF_MEASURE または DMUS_SEGF_GRID (CONST_DMUS_SEGF_FLAGS を参照) を使って、適切な境界でバンド チェンジが有効になるよう保証する。
パフォーマンスは、一度に複数のバンドの音色を演奏することができる。たとえば、アプリケーションが 1 つのバンドを使ってプライマリ セグメントを演奏しているときに、別のバンドを持つスタイルのモチーフを演奏する場合を考える。最初のバンドの音色が、2 つ目のバンドの音色以外の P チャンネル に割り当てられる限り、衝突は起こらない。ただし、通常、モチーフ セグメントは独自のバンド トラックを持たない。したがって、最初にバンド セグメントを作成してから演奏しなければ、モチーフの P チャンネルからは音が出ない (モチーフ セグメントにバンド トラックを追加することもできるが、別のバンド セグメントを作成する方が簡単である)。