Platform SDK: DirectX

ステップ 3 : エフェクトの修正と停止

[C++]

ここでは、DirectX for Visual Basic でのアプリケーション開発について説明する。

[Visual Basic]

Boids.dls の Vocals 音色の定義では、鼓動音サンプルのリージョンは B7 〜 B8 である。サンプル アプリケーションで演奏されているように、ユーザーは [Note] スライダを使って、このリージョン内で音符を選択することができる。スライダを移動するごとに、既に演奏中の音符は停止され、新しい音符が送信される。

音符の継続時間は無期限であるため、音符は DirectMusicPerformance.SendMIDIPMSG を使って、スタンダード MIDI ノートオン メッセージの形式で送信される (または、DirectMusicPerformance.SendNotePMSG を使って、継続時間に非常に大きな値を指定する)。現在の周波数とベロシティは、最後の 2 つのパラメータで与えられる。このメソッドはチャンネルを別のパラメータとして受け付けるため、スタンダード MIDI メッセージと異なり、MIDI ステータス バイト (&H90) の下位 4 ビットにはチャンネル番号が含まれれない。

Call perf.SendMIDIPMSG(0, DMUS_PMSGF_REFTIME, hbchannel, _
        &H90, B7Freq, gVelocity)

鼓動音の音符の変更に加えて、ユーザーは音符を演奏するチャンネルにピッチ ベンドを割り当てることもできる。ピッチ ベンドも、スタンダード MIDI メッセージとして送信される。

Call perf.SendMIDIPMSG(0, DMUS_PMSGF_REFTIME, hbchannel, _
        &HE0, lo, hi)

lo および hi パラメータは 7 ビット値で、ピッチ ベンドには 16,384 とおりの設定が可能である。詳細については、MIDI の仕様を参照すること。

鼓動音の音符を停止するために、サンプル アプリケーションは SendNotePMSG メソッドを使って、現在演奏されている音符と同じピッチの音符を送信する。DMUS_NOTE_PMSG 型の flags メンバには、通常の DMUS_NOTEF_NOTEON の代わりに 0 を設定する。

Private Sub B7NoteOff()
 
  Dim noteMsg As DMUS_NOTE_PMSG
  noteMsg.flags = 0
  noteMsg.midiValue = B7Freq  ' B7Freq is pitch of last note-on
  Call perf.SendNotePMSG(0, DMUS_PMSGF_REFTIME, hbchannel, noteMsg)
End Sub

チャンネルのピッチ ベンドは、この操作に影響を与えない。