①スケッチの準備
Processingを起動して、空のスケッチウィンドウに以下のコードをコピー&ペーストする。
import themidibus.*; //MidiBusライブラリの読み込み
MidiBus myBus; //MidiBusクラスのインスタンス名
int dev = 2; //MIDIデバイスの設定
int ch = 0; //MIDIチャンネルの設定
int program = 0; //プログラムチェンジ(音色)の設定
int note_on = 0; //ノートオンナンバー
int note_off = 0; //ノートオフナンバー
int pitchbend = 63; //ピッチベンド
int vel = 100; //ベロシティ(音の強さ)の設定0〜127
int lock = 0; //キーボード連打を防止するため
int mouseX_offset = 0;
void setup() {
size (500, 300); //ウィンドウサイズ
MidiBus.list(); ///MIDIデバイスリストの取得
myBus = new MidiBus(this, 0, dev); //インスタンスの作成(入出力音源の設定)
myBus.sendMessage(0xC0, program); //プログラムチェンジ送信
}
void draw() {
background (164, 0, 0);
text ("Push Keys !", 15, 20);
text ("MIDI Device No: " + dev, 15, 60);
text ("Program Change: " + program, 15, 80);
if(note_on==0) {
text ("Note Number: --", 15, 100);
text ("Pushed Key: --", 15, 120);
} else {
text ("Note Number: " + note_on, 15, 100);
text ("Pushed Key: " + key, 15, 120);
}
text ("PitchBend: " + (pitchbend - 63), 15, 140);
}
void keyPressed () { //キーを押した時
if(lock==0){
switch(key) {
case'z': note_on = 41; break;
case'x': note_on = 43; break;
case'c': note_on = 45; break;
case'v': note_on = 47; break;
case'b': note_on = 48; break;
case'n': note_on = 50; break;
case'm': note_on = 52; break;
case',': note_on = 53; break;
case'.': note_on = 55; break;
case'/': note_on = 57; break;
case'_': note_on = 59; break;
case'a': note_on = 60; break;
case's': note_on = 62; break;
case'd': note_on = 64; break;
case'f': note_on = 65; break;
case'g': note_on = 67; break;
case'h': note_on = 69; break;
case'j': note_on = 71; break;
case'k': note_on = 72; break;
case'l': note_on = 74; break;
case';': note_on = 76; break;
case':': note_on = 77; break;
case']': note_on = 79; break;
default: note_on = 0; break;
}
mouseX_offset = mouseX;
pitchbend = 63; //ピッチベンドのリセット
myBus.sendMessage(0xE0, 0, pitchbend); //ピッチベンドの送信
myBus.sendNoteOn ( ch, note_on, vel ); //ノートオンの送信
lock=1;
}
}
void keyReleased () { //キーを離した時
switch(key) {
case'z': note_off = 41; break;
case'x': note_off = 43; break;
case'c': note_off = 45; break;
case'v': note_off = 47; break;
case'b': note_off = 48; break;
case'n': note_off = 50; break;
case'm': note_off = 52; break;
case',': note_off = 53; break;
case'.': note_off = 55; break;
case'/': note_off = 57; break;
case'_': note_off = 59; break;
case'a': note_off = 60; break;
case's': note_off = 62; break;
case'd': note_off = 64; break;
case'f': note_off = 65; break;
case'g': note_off = 67; break;
case'h': note_off = 69; break;
case'j': note_off = 71; break;
case'k': note_off = 72; break;
case'l': note_off = 74; break;
case';': note_off = 76; break;
case':': note_off = 77; break;
case']': note_off = 79; break;
default: note_off = 0; break;
}
myBus.sendNoteOff(ch, note_off, vel); //ノートオフの送信
lock=0;
}
void mouseMoved ()
{
if ((mouseX - mouseX_offset) > -250 && (mouseX - mouseX_offset) < 250) {
pitchbend = (int)map(mouseX-mouseX_offset, -250, 250, 0, 127);
myBus.sendMessage(0xE0, 0, pitchbend); //ピッチベンドの送信
}
}
②キーボードで演奏
Runボタンを押して実行すると赤いウィンドウが表示される。
キーボードの下図のキーを押すことで演奏することができる。
赤ウィンドウが手前にある状態でないと音は鳴らないので注意。
今回のスケッチでは、複数キーの同時発音には対応していない。
③マウスでピッチベンドの操作
キーを押したまま、マウスを左右に振ることで音高を変化させることができる。
④音色の変更
スケッチの6行目のprogramの引数を変更して音色を変えてみよう。
int program = 0; //プログラムチェンジ(音色)の設定