ChucK 日記:ワゴンセール活用
ヨドバシカメラの DTM 売り場にて,980円で叩き売りされてたサンプリングCDをゲット。中身の方は,叩き売られていたのもさもありなんと言った感じの,いまいち使い難い素材ばかり。それでも,適当に切り刻んで,ぐちゃぐちゃに混ぜれば,何かしら面白くなるんじゃないかな,と思って作ってみたのが,この ChucK プログラム。 SndBuf を使えば,こういったサンプラー的な使い方が簡単にできる。
混ぜるだけではイマイチ面白くなかったので,ローパスフィルター (LPF) をワウペダル風に噛ませてみたり,コンプレッサー (Dyno) を使って無駄に音圧を強めてみたりと,ちょこちょこと小手先の技を加えてある。こういったエフェクト類を簡単に使えるのも ChucK の魅力。まあでも所詮は小手先の技ということで,たいして面白くなっていない。バリエーションが豊かになるような工夫が無いと,プログラムとしての面白みが出ないなと反省。
以下,書きなぐりのソースコード。
1::minute / 120 => dur beat; Dyno comp => Gain gain => dac; comp.compress(); 0.4 => comp.thresh; 9 => comp.ratio; 14 => gain.gain; SndBuf loop_gt => LPF lpf_gt => comp; SndBuf loop_bs => comp; SndBuf loop_dr => comp; SndBuf loop_ht => comp; SndBuf bd => comp; SndBuf cym => comp; 4 => lpf_gt.Q; "data/funk_gt.wav" => loop_gt.read; "data/funk_bs.wav" => loop_bs.read; "data/funk_dr.wav" => loop_dr.read; "data/funk_gt.wav" => loop_gt.read; "data/funk_bd.wav" => bd.read; "data/funk_cym.wav" => cym.read; 2 => bd.gain; 1.3 => bd.rate; 1.5 => cym.gain; loop_gt.samples() / 32 => int samps; for (0 => int count;;1 +=> count) { if (count % 4 == 0) 0 => bd.pos; if (count % 128 == 0) 0 => cym.pos; Std.rand2(1000, 10000) => lpf_gt.freq; Std.rand2(0, 31) * samps => loop_dr.pos; Std.rand2(0, 31) * samps => loop_ht.pos; if (count % 16 == 0) { 0 => loop_gt.pos; 0 => loop_bs.pos; } else if (count % 16 > 3) { Std.rand2(0, 31) * samps => loop_gt.pos; Std.rand2(0, 31) * samps => loop_bs.pos; } beat / 4 => now; }