キーボードシンセサイザー(改)で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を増やす } } }
さっきよりはマシになりました。
でも、わざわざキーボードをシンセにしなくてもなぁ・・・と思いました。なので、テンキーがサンプラーっぽいのを生かして簡易サンプラーみたいなものを作ってみました。
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でセッション出来たらすごいですね