var osc1 = T("osc", "pulse", T("glide", 5, 880), 0.25); var osc2 = T("osc", "tri" , T("glide", 5, 880), 0.50); var vco = T("+", osc1, osc2); var env1 = T("adsr", 50, 100, 1, 0, 2000); var vcf = T("rlpf", T("+", 2300, env1).kr(), vco); var env2 = T("adsr", 0, 200, 0.5); var vca = T("*", vcf, env2); var efx1 = T("efx.dist" , 0, 0, 8000, vca).off(); var efx2 = T("efx.chorus", efx1); var efx3 = T("efx.delay" , efx2); var params = { osc1: { waveform:1, freq:8, fine:0 }, osc2: { waveform:3, freq:1, fine:0 } }; var score = getScore().split(/\s+/).map(function(x) { return (timbre.utils.atom(x) - 12) * 64; }); var m64tof = function(m64) { return 440 * Math.pow(Math.pow(2, (1/(12*64))), m64 - (69*64)); }; var metro = T("interval", timbre.utils.bpm2msec(80, 16), function() { var note = score[metro.count % score.length]; osc1.freq.value = m64tof(note + params.osc1.fine) / params.osc1.freq; osc2.freq.value = m64tof(note + params.osc2.fine) / params.osc2.freq; env1.bang(); env2.bang(); }); var ex0 = efx3; ex0.onbang = function() { osc1.freq.value *= 2; osc2.freq.value *= 2; }; ex0.onplay = function() { metro.on().bang(); }; ex0.onpause = function() { metro.off(); }; ex0.play();