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 ティック早く開始される。