Microsoft DirectX 8.0 (Visual Basic)

セグメントのタイミング

ここでは、セグメントの演奏のタイミングに関するさまざまな面について説明する。

セグメントのタイムとパフォーマンスのタイムとの関係を明確にするために、ここでは次の用語を使用する。

開始ポイント
セグメントの開始タイムになりうるセグメント内の最初のポイント。デフォルトの場合、この値は 0 で、セグメントの先頭を示す。ただし、この値はアプリケーションで変更できる。
セグメントの開始タイム
サウンドの生成が開始されるセグメント内のポイント。このタイムは通常開始ポイントと同じであるが、開始ポイントが意図的に過去の演奏タイムに揃えられている場合は、遅くすることもできる。
演奏タイム
新しいセグメントの開始ポイントがキューに入れられるパフォーマンス内のポイント。DirectMusic API では、このタイムは開始タイムと呼ばれることもある。
開始マーカー
セグメント内の有効な開始タイムを示すマーカー。
演奏マーカー
制御セグメント内で、別のセグメントの開始ポイントをキューに入れることができるポイントを示すマーカー。

  開始マーカーおよび演奏マーカーは、オーサーによってセグメントのマーカー トラックに配置され、アプリケーションで変更することはできない。

セグメントは、通常、最初から演奏される。DirectMusicSegment8.SetStartPoint メソッドを使用して、別のポイントからセグメントを開始することもできる。この開始ポイントは、セグメントを演奏するときは常に使用される。

DirectMusicSegment8.SetRepeats を使ってリピート回数を設定した場合、DirectMusicSegment8.SetLoopPoints を呼び出してループを定義しなければ、セグメント全体がその回数だけ反復される。

演奏タイムは、DirectMusicPerformance8.PlaySegmentEx の 2 つのパラメータによって決定される。

セグメントを過去のタイムに揃える

セグメントの開始タイムを制御セグメントの次のグリッド、拍、または小節に揃える代わりに、セグメントの演奏をすぐに開始し、現在のセグメントのリズムに合わせたい場合がある。このようにするには、セグメントの開始ポイントのキューを既に経過したリズム境界に与える。キューを与えたセグメントのリズムは、現在のセグメントに揃えられ、新しいセグメントは直ちに演奏を開始できる。

過去のセグメントにキューを与えるには、DMUS_SEGF_ALIGN フラグを使用する。適切なリズム境界でセグメントの開始ポイントにキューを与えるには、DMUS_SEGF_GRID、DMUS_SEGF_BEAT、または DMUS_SEGF_MEASURE のいずれかを追加する。この代わりに、DMUS_SEGF_MARKER を使用して、開始ポイントを制御セグメントの最後に演奏された演奏マーカーに揃えることもできる。

開始ポイントが過去である場合、セグメントの開始タイムが現在または将来になるように調整しなければならない。パフォーマンスは、次の規則に従って、セグメントの開始タイムを決定する。いずれの場合も、"次" とは "次に可能" であることを意味する。つまり、セグメントの、過去ではない部分にあるという意味である。

演奏マーカーと開始マーカーによって、セグメント、特にモチーフに柔軟にキューを与えることができる。モチーフが、プライマリ セグメントの小節の先頭で演奏を開始するときに最適に演奏されるように作成されているとする。このモチーフに DMUS_SEGF_MEASURE フラグでキューを与えると、次の小節境界に達して、モチーフが演奏されるまでに大幅な遅延が発生する場合がある。しかし、DMUS_SEGF_ALIGN フラグを追加すると、リズムを乱すことなく、すぐにモチーフの演奏を開始できる。DMUS_SEGF_MARKER フラグを追加すると、小節、拍、またはグリッドだけでなく、制御セグメント内の適切な境界でモチーフを演奏できるようになる。

テンポの変更によってセグメントの開始タイムが受ける影響については、「クロック タイムとミュージック タイム」を参照すること。

次の図は、DMUS_SEGF_MEASURE、DMUS_SEGF_ALIGN、および DMUS_SEGF_VALID_START_BEAT の各フラグを使ってキューに入れられたセグメントのタイミングを決定する過程を示している。縦の実線は小節の境界を示し、点線は拍の境界を示す。セグメントの開始ポイントは、現在のプライマリ セグメントの前にある小節境界に揃えられる。セグメントの開始タイムは、未解決の演奏タイムの後に挿入されているセグメントの最初の拍になる。

論理的なタイムと実際のタイム

一部のイベントは、論理的なタイムと実際のタイムの両方を持っている。実際のタイムはイベントが発生するときであり、論理的なタイムはイベントが属する音楽的な位置を表す。

たとえば、セグメントは、拍の開始に属するプログラム チェンジを含む場合がある。この拍の開始は論理的なタイムである。しかし、拍のノートが演奏される前にプログラム チェンジが行われるようにしたいので、これよりも少し早い物理的なタイムを割り当てる。

セグメントが論理的なタイム (同じ拍の開始) にループする場合、プログラム チェンジも行われる。