// rhythm sequencer // extern p = [ /* ui.checkbox */ ]; var bpm = 132; var seq, s1, s2, hh, hh_env, sd, sd_env, bd, bd_env; var metro, drumkit, beam; // sequence seq = T("+"); // sequence(1) s1 = function(freq) { var s1, env; s1 = T("*", T("fami", freq, 0.6), T("*", T("pulse", 12), env = T("perc", 120))).appendTo(seq); env.addEventListener("~ended", function() { seq.remove(s1); }).bang(); }; s1.freqs = [ 880, 440, 880*2, 220, 880*2, 660, 880*2, 660 ]; s1.i = 0; // sequence(2) s2 = function() { var s2, env; s2 = T("*", T("saw", T("ease", "cubic.out", 300, 880*4, 220).bang(), 0.4), env = T("perc", 300)).appendTo(seq); env.addEventListener("~ended", function() { seq.remove(s2); }).bang(); }; s2.i = 1; // hihat hh = T("*", T("hpf", 8000, T("noise")), hh_env = T("perc", "32db", 30)); hh.i = 2; // snare sd = T("*", T("rlpf", 5000, 0.4, T("pink")), sd_env = T("perc", "32db", 120)); sd.i = 3; // bass drum bd = T("clip", T("*", T("rlpf", 40, 0.5, T("pulse", 40, 2)), bd_env = T("perc", "32db", 60))); bd.i = 4; // metro metro = T("interval", timbre.utils.bpm2msec(bpm, 16), function() { var i = metro.count % p[0].length; if (p[s1.i][i]) s1(s1.freqs[i & 7]); if (p[s2.i][i] || beam) s2(); beam = false; if (p[hh.i][i]) { hh_env.mul = [0.4, 0.6][i & 1]; hh_env.bang(); } if (p[sd.i][i]) { sd_env.mul = [0.4, 0.2][i & 1]; sd_env.d = [180, 120][i & 1]; sd_env.bang(); } if (p[bd.i][i]) { bd_env.bang(); } }); // drumkit drumkit = T("dac", seq, hh, sd, bd); drumkit.onbang = function() { beam = true; }; drumkit.onplay = function() { interval.on(); }; drumkit.onpause = function() { interval.off(); }; drumkit.play();