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 つのバンドの音色が異なるパフォーマンス チャンネルにマップされている限り、競合は発生しない。ただし、通常、モチーフ セグメントは独自のバンド トラックを持たない。したがって、最初にバンド セグメントを作成してから演奏しなければ、モチーフのパフォーマンス チャンネルからは音が出ない