キーボードシンセサイザー(改)でRydeenっぽいの

キーボードシンセサイザー(仮)でRydeenっぽいの - I am Electrical machineのつづき
ソースを以下のように改良↓

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

Gain g => WvOut w => dac;
"ry.wav" => w.wavFilename;
.2 => g.gain;
2 => int sid;

fun void keyOn(int n) {
    SinOsc s => g;
    [261, 293, 329, 349, 391, 440, 493, 523] @=> int bs[];
    n-49 => n;
    bs[n] => s.freq;
    1::day => now;//押しっぱなしにしてれば最大1日鳴りっぱなしになる
}

while(hi => now) {
    while(hi.recv(msg)) {
        if (msg.isButtonDown()) {
            spork ~ keyOn(msg.ascii);
        } else if(msg.isButtonUp()) {
            Machine.remove(sid);//ボタンが離されたら追加されたShadeを削除
            sid+1 => sid;//idを増やす
        }
    }
}

さっきよりはマシになりました。
Download
でも、わざわざキーボードをシンセにしなくてもなぁ・・・と思いました。なので、テンキーがサンプラーっぽいのを生かして簡易サンプラーみたいなものを作ってみました。

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

["/絶対パス/beat1.WAV",
"/絶対パス/beat2.WAV",
"/絶対パス/beat3.WAV"] @=> string fName[];
fName.cap() => int n;
SndBuf buf[n];

Gain g => dac;

fun void keyOn(int m) {
    m-49 => m;
    fName[m] => buf[m].read;
    buf[m] => g;
    buf[m].samples()::samp => now;
}

while(hi => now) {
    while(hi.recv(msg)) {
        if (msg.isButtonDown()) {
            spork ~ keyOn(msg.ascii);
        } 
    }
}

とりあえず、こんなんでサンプラーっぽくはなるんですが、押す度に音量が上がっていきます・・・。音量を調整するgainをいぢっても直らないです。どうすりゃいいんだorz
ちなみに、素材はFreesound - pack: RZ-1 Sampler grungy Drums by zenobicここにお世話になりました。
とりあえず、ドラマーの人がこの簡易サンプラー、キーボーダーの人が上のシンセキーボード、ベースの人は・・・?
ChucKでセッション出来たらすごいですね