Microsoft DirectX 8.0 (C++) |
セグメントを演奏するときに、パフォーマンスはセグメントのトラックを繰り返し呼び出す。この呼び出しにより、1 秒の何分のいくつかの指定された時間範囲分のメッセージが生成される。これらのメッセージは、これまでの呼び出しで生成されたメッセージの後ろに挿入される。デフォルトでは、およそ 1 秒分のメッセージが、いつでもキューにある。
パフォーマンスがメッセージを演奏するようにトラックに要求するごとに、現在のタイムに準備時間を加算して、呼び出しの終了タイムが計算される。現在のタイムが 10,000 ミリ秒 (または、等価な REFERENCE_TIME 単位) で、準備時間がデフォルトで 1000 ミリ秒である場合、終了タイムは 11,000 となる。つまり、11,000 までの演奏分の新しいメッセージをすべて準備して、キューに格納しなければならない。
キューのサイズは、IDirectMusicPerformance8::SetPrepareTime メソッドを呼び出して変更することができる。また、現在のサイズは、IDirectMusicPerformance8::GetPrepareTime を使って取得することができる。
ほとんどのアプリケーションでは、デフォルトの準備時間を変更する必要はない。ここで説明した処理は、アプリケーションからは認識されていない。ただし、アプリケーションは IDirectMusicPerformance8::PlaySegment または IDirectMusicPerformance8::PlaySegmentEx にDMUS_SEGF_AFTERPREPARETIME フラグを渡すことができるので、準備時間の概念を理解しておくと役立つ。
このフラグを使用しない場合、セグメントの開始タイムを "現在" に設定すると、パフォーマンスは現在キューに格納されているメッセージをすべて無効にする。この時点で有効なままのトラック (たとえば、新しいプライマリ セグメントの導入にかかわらず、演奏が続けられるセカンダリ セグメントのトラック) は、新しいセグメントによる環境の変化を考慮して、メッセージを再送信しなければならない。これによって、追加の処理が発生し、好ましくない結果になる場合もある。
DMUS_SEGF_AFTERPREPARETIME フラグを使用して、現在キュー内にあるすべてのメッセージが処理され、ポート バッファに渡されるまで、セグメントを演奏しないことを指定できる。タイム 10,000 までのメッセージがキューにあり、現在のタイムが 9,000 ms の場合、演奏用にキューに格納され、DMUS_SEGF_AFTERPREPARETIME フラグが設定されたセグメントは、ちょうど 10,000 ミリ秒後に演奏を開始する。
詳細については、「セグメントのタイミング」を参照すること。「遅延時間とバンパー時間」の図も参照すること。