Platform SDK: DirectX |
ここでは、DirectX for 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
チャンネルのピッチ ベンドは、この操作に影響を与えない。