Microsoft DirectX 8.0 (Visual Basic)

カーブ

カーブは、MIDI コントローラの一連の変更で構成され、値がなめらかにトランジションする。たとえば、ボリュームのフェードアウトまたはフェードインがある。

DirectMusicPerformance8.SendCurvePMSG で 1 つのパフォーマンス メッセージを送信することによって、カーブを実行できる。このメソッドに DMUS_CURVE_PMSG 型のメッセージを渡すことによって、カーブの開始時と終了時の値、期間、および形状を設定する。オプションで、コントローラが無効の場合に返されるリセット値を設定することもできる。

このメッセージ構造体の measureoffsetbeatgrid、および mtOriginalStart メンバは、DirectMusic Producer セグメントによって送信されたメッセージ内で使用される。アプリケーションによって送信されたメッセージでは、これらの値は 0 になっている。

MergeIndex メンバは、変更が累積であるかオーバーライドであるかを示す。マージ インデックスが異なる場合、2 つのカーブ メッセージは累積される。マージ インデックスが同じ場合は、前のメッセージによる設定が新しいメッセージによって順次オーバーライドされる。

ccData メンバは、コントローラの変更の対象となる MIDI コントローラ番号を含み、空の場合は無視される。コントローラ番号については、MIDI の仕様を参照すること。

次のサンプル コードでは、現在のボリュームを 5 秒間でフェードアウトしている。

Dim curveMsg As DMUS_CURVE_PMSG
 
curveMsg.curveShape = DMUS_CURVES_LINEAR
curveMsg.mtDuration = 5000
curveMsg.Type = DMUS_CURVET_CCCURVE
curveMsg.ccData = 7  ' MIDI チャンネル ボリューム コントローラ
curveMsg.flags = DMUS_CURVE_START_FROM_CURRENT
 
dmPerf.SendCurvePMSG 0, _
  DMUS_PMSGF_REFTIME Or DMUS_PMSGF_LOCKTOREFTIME, _
  DMUS_PCHANNEL_BROADCAST_PERFORMANCE, curveMsg

  より簡単にボリュームのフェードを実装するには、DirectMusicAudioPath8.SetVolume を使用する。このメソッドでは、常に、カーブに平行なシェイプを使用する。

次のコードでは、ピッチ ベンドを現在の値から 3 秒間の最大値に変更している。この時間内に、現在再生中のセグメントがほかのセグメントに置き換えられて無効になった場合は、ピッチは g_Pitch の値にリセットされる。

curveMsg.curveShape = DMUS_CURVES_LINEAR
curveMsg.startValue = 0  ' 現在位置から開始位置まで無視される。
curveMsg.endValue = 16383
curveMsg.mtDuration = 3000
curveMsg.Type = DMUS_CURVET_PBCURVE
curveMsg.ccData = 0
curveMsg.flags = DMUS_CURVE_RESET Or DMUS_CURVE_START_FROM_CURRENT
curveMsg.resetValue = g_Pitch
curveMsg.mtResetDuration = 0
 
dmPerf.SendCurvePMSG 0, _
  DMUS_PMSGF_REFTIME Or DMUS_PMSGF_LOCKTOREFTIME, _
  DMUS_PCHANNEL_BROADCAST_PERFORMANCE, curveMsg