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;
}