ならば

音とかで遊んでいたログ

マウス

マウスの横方向の移動をパンに、縦方向の移動を音高に対応させて、音を鳴らすプログラム。左右のクリックで楽器を変更することもできる。

Hid hi;
HidMsg msg;
if ( !hi.openMouse(0) ) me.exit();

Shakers s => JCRev r => Pan2 p => dac;
800 => s.freq => float freq;
s.preset() => int pst;
.1 => r.mix;
p.pan() => float pan;

while(hi => now) {
    while(hi.recv(msg)) {
        // X軸の変化量はパンに使う
        msg.deltaX / 500.0 +=> pan;
        Math.min(Math.max(-1.0, pan), 1.0) => pan;
        pan => p.pan;
        // Y軸の変化量は音高に使う
        msg.deltaY * 10 -=> freq;
        Math.min(Math.max(50, freq), 10000) => freq;
        freq => s.freq;
        // 左右のクリックで楽器を変更する
        if (msg.isButtonUp()) {
            s.preset() + (msg.which ? -1 : 1) => pst;
            if (pst < 0) 22 => pst;
            if (pst > 22) 0 => pst;
            <<<"changed preset to", pst => s.preset>>>;
        }
        s.noteOn(1);
    }
}

クリックされたボタンはパラメータwhichの値で区別できる。

  • 左ボタン:0
  • 右ボタン:1
  • 中央ボタン:2

マウスの座標を得るためのパラメータはないっぽい。
以前にも一度使ったShakersは、マラカスやタンバリンなど23種類の楽器・環境音をシミュレートするユニットジェネレータ。楽器の種類はパラメータpresetで読み書きする。