Microsoft DirectX 8.0 (Visual Basic)

確実なタイミングでのバンド チェンジ

バンド セグメントを演奏するときに重要な問題となるのは、スタイル トラックで演奏されるノートのタイミングのばらつきである。たとえば、小節 1 の 1 拍目のノートが、実際の拍の境界よりわずかに進んだり遅れたりする場合がある。バンド セグメントではこの状況を認識していないので、いくつかのノートが間違った音色で演奏される場合がある。

この問題を避けるために、アプリケーションはバンド セグメントを早めにキューに格納するべきである。たとえば、スタイル セグメントの styleSeg とバンド セグメントの bandSeg があり、パフォーマンス (perf) の次の小節境界で、スタイル セグメントとバンド セグメントの両方を演奏する場合を考える。スタイルには、セグメントの開始タイムよりも、最大 30 ティック (ミュージック タイムで) 早く開始される可能性のあるノートが含まれていることがわかっている。次のサンプル コードでは、バンド セグメントがスタイル セグメントよりも 31 ティック前に演奏されることが保証されている。したがって、すべての音色は、ノートが演奏される前に適切に設定される。

' まず、次の小節のタイムを取得して、
' ミュージック タイムに変換する。 
 
Dim ctResolved As Long
Dim mtResolved As Long
 
ctResolved = perf.GetResolvedTime(ctResolved, DMUS_SEGF_MEASURE)
mtResolved = perf.ClockToMusicTime(ctResolved)
 
' バンド セグメントを、小節境界の 31 ティック前に演奏する。
 
mtResolved = mtResolved - 31 
Call perf.PlaySegmentEx(bandSeg, 0, mtResolved)
 
' スタイル セグメントを小節境界で演奏する。 
 
Call perf.PlaySegmentEx(styleSeg, DMUS_SEGF_MEASURE, 0 )

  セグメントで演奏されるノートにばらつきがない場合 (たとえば、MIDI ファイルからロードされたセグメントの場合) は、同時に演奏されるバンド セグメントのタイミングについて注意する必要はない。デフォルトでは、すべてのバンド セグメントは 1 ティック早く開始される。