Microsoft DirectX 8.0 (C++) |
通常は、ロードされたセグメントのバンド トラックによって、プログラム チェンジが実行される。ただし、手動で行うこともできる。
まず、IDirectMusicBand8::CreateSegment メソッドを呼び出して、セカンダリ セグメントを作成する。次に、IDirectMusicPerformance8::PlaySegment または IDirectMusicPerformance8::PlaySegmentEx を呼び出して、作成したセグメントを演奏する。通常は dwFlags パラメータ内の DMUS_SEGF_MEASURE または DMUS_SEGF_GRID を使って、適切な境界でバンド チェンジが有効になるよう保証する。
次のサンプル関数では、バンドからセグメントを作成し、そのセグメントを演奏している。音色がダウンロード済みであるか、自動ダウンロードが有効になっていると仮定している。
HRESULT myPlayBand( IDirectMusicBand8 *pBand, // バンド オブジェクトへのポインタ。 IDirectMusicPerformance8 *pPerf, // バンドを使用するパフォーマンス。 REFERENCE_TIME rfTime, // 演奏されるタイム。 DWORD dwFlags) // パフォーマンス フラグ。 { IDirectMusicSegment *pSegment; // QI が必要な IDirectMusicSegment8 は必要ではない。 HRESULT hr = pBand->CreateSegment(&pSegment); if (SUCCEEDED(hr)) { hr = pPerf->PlaySegment(pSegment, dwFlags | DMUS_SEGF_SECONDARY, rfTime, NULL); pSegment->Release(); } return hr; }
パフォーマンスは、一度に複数のバンドの音色を演奏することができる。たとえば、アプリケーションが 1 つのバンドを使ってプライマリ セグメントを演奏しているときに、別のバンドを持つスタイルのモチーフを演奏する場合を考える。2 つのバンドの音色が異なるパフォーマンス チャンネルにマップされている限り、競合は発生しない。ただし、通常、モチーフ セグメントは独自のバンド トラックを持たない。したがって、最初にバンド セグメントを作成してから演奏しなければ、モチーフのパフォーマンス チャンネルからは音が出ない