Platform SDK: DirectX

準備時間

セグメントを演奏するときに、パフォーマンスはセグメントのトラックを繰り返し呼び出す。この呼び出しにより、1 秒の何分のいくつかの指定された時間範囲分のメッセージが生成される。これらのメッセージは、これまでの呼び出しで生成されたメッセージの後ろに挿入される。デフォルトでは、およそ 1 秒分のメッセージが、いつでもキューにある。

遅延時間とバンパー時間」の図を参照すること。

[C++]

キューは、IDirectMusicTrack::Play の呼び出しによって、絶えず満タンにされているガス タンクのようなものである。パフォーマンスが Play を呼び出すごとに、現在のタイムに準備時間を加算して、呼び出しのタイムが計算される。現在のタイムが 10,000 ミリ秒 (または、等価な REFERENCE_TIME 単位) で、準備時間がデフォルトで 1000 ミリ秒である場合、終了タイムは 11,000 となる。つまり、11,000 までの演奏分の新しいメッセージをすべて準備して、キューに格納しなければならない。

キューのサイズは、IDirectMusicPerformance::SetPrepareTime メソッドを呼び出して変更することができる。また、現在のサイズは、IDirectMusicPerformance::GetPrepareTime を使って取得することができる。

ほとんどのアプリケーションでは、デフォルトの準備時間を変更する必要はない。ここで説明した処理は、アプリケーションからは認識されていない。ただし、アプリケーションは IDirectMusicPerformance::PlaySegment にDMUS_SEGF_AFTERPREPARETIME フラグを渡すことができるので、準備時間の概念を理解しておくと有効である。

[Visual Basic]

キューは、絶えず満タンにされているガス タンクのようなものである。パフォーマンスがメッセージを送信するようにセグメントに要求するごとに、現在のタイムに準備時間を加算して、呼び出しの終了タイムが計算される。現在のタイムが 10,000 ミリ秒で、準備時間がデフォルトで 1000 ミリ秒である場合、終了タイムは 11,000 となる。つまり、11,000 までの演奏分の新しいメッセージをすべて準備して、キューに格納しなければならない。

キューのサイズは、DirectMusicPerformance.SetPrepareTime を呼び出して変更することができる。現在のサイズは、DirectMusicPerformance.GetPrepareTime を使って取得することができる。

ほとんどのアプリケーションでは、デフォルトの準備時間を変更する必要はない。ここで説明した処理は、アプリケーションからは認識されていない。ただし、アプリケーションは DirectMusicPerformance.PlaySegment に DMUS_SEGF_AFTERPREPARETIME フラグを渡すことができるので、準備時間の概念を理解しておくと有効である。

通常、セグメントの開始タイムを "現在" に設定すると、パフォーマンスは現在キューに格納されているメッセージをすべて無効にする。この時点で有効なままのトラック (たとえば、新しいプライマリ セグメントの導入にかかわらず、演奏が続けられるセカンダリ セグメントのトラック) は、新しいセグメントによる音楽環境の変化を考慮して、メッセージを再送信しなければならない。不必要な処理を避け、連続性を確実にするために (たとえば、長い音符や、音楽以外の DLS サウンドが途切れないようにするために)、DMUS_SEGF_AFTERPREPARETIME フラグを使って、現在キューにあるメッセージがすべて処理されてポート バッファに渡されるまで、セグメントの演奏を開始しないように指定することができる。したがって、たとえば、タイム 10,000 までのメッセージがキューにあり、現在のタイムが 9,000 の場合、演奏用にキューに格納されるセグメントは、ちょうど 10,000 ミリ秒後に演奏を開始する。

詳細については、「セグメントのタイミング」を参照すること。