Microsoft DirectX 8.0 (Visual Basic) |
カーブは、MIDI コントローラの一連の変更で構成され、値がなめらかにトランジションする。たとえば、ボリュームのフェードアウトまたはフェードインがある。
DirectMusicPerformance8.SendCurvePMSG で 1 つのパフォーマンス メッセージを送信することによって、カーブを実行できる。このメソッドに DMUS_CURVE_PMSG 型のメッセージを渡すことによって、カーブの開始時と終了時の値、期間、および形状を設定する。オプションで、コントローラが無効の場合に返されるリセット値を設定することもできる。
このメッセージ構造体の measure、offset、beat、grid、および 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