ChucK クラスの作成方法
クラスの作成方法。
http://www.local-guru.net/blog/2009/01/17/modularizing-chuck-files
Blue Monday。一部変更したけど、ほぼ原型まま。
(2009/05/02修正: gainが5だったのを1に修正)
class DrumSet { // define hihat Shakers hhs => JCRev r; .025 => r.mix; Std.mtof(76) => hhs.freq; // define bass drum SinOsc s => ADSR bda; 80 => s.freq; (0::ms, 10::ms, 0.0, 0::ms) => bda.set; // define snare drum Noise n => ADSR sna => Gain g => dac; 1 => g.gain; (0::ms, 25::ms, 0.0, 0::ms) => sna.set; public void connect(UGen ugen) { r => ugen; bda => ugen; g => ugen; } public void hh() { 1 => hhs.noteOn; } public void bd() { 1 => bda.keyOn; } public void sn() { 1 => sna.keyOn; } } class Bass { SawOsc sb => LPF filt => ADSR a => Gain g2; 440 => filt.freq; 0.3 => filt.Q; 0.0 => g2.gain; (10::ms, 45::ms, 0.5, 40::ms) => a.set; public void connect(UGen u) { g2 => u; } public void bass(int tone) { Std.mtof(tone) => sb.freq; 1 => g2.gain; 1 => a.keyOn; 125::ms => now; 1 => a.keyOff; } } // this synchronizes to period 1::minute / 135 => dur DUR_4BEAT; DUR_4BEAT * 4 => dur DUR_BAR; DUR_4BEAT / 4 => dur DUR_16BEAT; DUR_BAR - (now % DUR_BAR) => now; DrumSet drm; drm.connect(dac); Bass bass; bass.connect(dac); [41, 41, 44, 46] @=> int bline[]; 0 => int pos; for (0 => int count; ; 1 +=> count) { if (count != 0 && count % 8 == 0) { 1 + pos => pos; } if (count % 2 == 0) { drm.hh(); } if (count % 8 == 0) { drm.bd(); } if (count % 8 == 4) { drm.sn(); } if (count % 4 == 0) { spork ~ bass.bass(bline[pos % 4]); } if (count % 4 == 2) { spork ~ bass.bass(12 + bline[pos % 4]); } DUR_16BEAT => now; }
せっかくなので作ったフィルイン。小節単位で同期されるので、適当なタイミングでaddすればよい。
// this synchronizes to period 1::minute / 135 => dur DUR_4BEAT; DUR_4BEAT * 4 => dur DUR_BAR; DUR_4BEAT / 4 => dur DUR_16BEAT; DUR_BAR - (now % DUR_BAR) => now; DrumSet drm; drm.connect(dac); [ 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 ] @=> int fillin[]; for (0 => int count; count < 32; 1 +=> count) { if (fillin[count % 32]) { drm.sn(); } DUR_16BEAT => now; }
miniAudicleでクラスだけロードするのはどうしたら良いものか。。