( SynthDef("song1sa", {arg freq, cov, den; var hzl, hzr, vol, phase, osc1, osc2, here, there, lifecycle, trig; hzl = [8,9,12,16] * freq / 8; hzr = [8,10,13,16] * freq / 8; phase = (2.5 - (cov / 100)) * pi; vol = 1 / (1 - phase.sin); lifecycle = ((den / 100) / 4) * SinOsc.kr(freq / 30, phase, vol, 0 - (vol * phase.sin)); trig = lifecycle > 0; here = [0, 0.3pi, 0.9pi, 1.5pi]; there = [0.2pi, 0.5pi, 1.1pi, 1.7pi]; osc1 = SinOsc.ar(hzl, here, trig * lifecycle).sum; osc2 = SinOsc.ar(hzr, there, trig * lifecycle).sum; Out.ar(0,[osc1,osc2]); }).load(~oilfield); ) ====================== // song1 ( ~oilfield = Server.local.boot; ) ( ~sa = Group.tail(~oilfield); ~ri = Group.tail(~oilfield); ~ga = Group.tail(~oilfield); ~ma = Group.tail(~oilfield); ~pa = Group.tail(~oilfield); ~da = Group.tail(~oilfield); ~ni = Group.tail(~oilfield); ) ( ~root = 27.5 * (2 ** (5 / 12)); ) ( // sa var freq, cov, den; freq = ~root; cov = 30; den = 50; ~oilfield.sendMsg("/s_new", "song1sa", 3110, 1, ~sa.nodeID, "freq", 2 * freq, "cov", cov, "den", den / 10); ~oilfield.sendMsg("/s_new", "song1sa", 3111, 1, ~sa.nodeID, "freq", 4 * freq, "cov", cov, "den", den / 10); ~oilfield.sendMsg("/s_new", "song1sa", 3112, 1, ~sa.nodeID, "freq", 4 * freq * 9 / 8, "cov", cov, "den", den / 10); ~oilfield.sendMsg("/s_new", "song1sa", 3113, 1, ~sa.nodeID, "freq", 4 * freq * 8 / 9, "cov", cov, "den", den / 10); ~oilfield.sendMsg("/s_new", "song1sa", 3114, 1, ~sa.nodeID, "freq", 4 * freq * 5 / 4, "cov", cov, "den", den / 10); ~oilfield.sendMsg("/s_new", "song1sa", 3115, 1, ~sa.nodeID, "freq", 4 * freq * 4 / 5, "cov", cov, "den", den / 10); ~oilfield.sendMsg("/s_new", "song1sa", 3116, 1, ~sa.nodeID, "freq", 4 * freq * 3 / 2, "cov", cov, "den", den / 10); ~oilfield.sendMsg("/s_new", "song1sa", 3117, 1, ~sa.nodeID, "freq", 4 * freq * 2 / 3, "cov", cov, "den", den / 10); ~oilfield.sendMsg("/s_new", "song1sa", 3118, 1, ~sa.nodeID, "freq", 4 * freq * 13 / 8, "cov", cov, "den", den / 10); ~oilfield.sendMsg("/s_new", "song1sa", 3119, 1, ~sa.nodeID, "freq", 4 * freq * 8 / 13, "cov", cov, "den", den / 10); ) ( // sa.roots var freq, cov, den; freq = ~root; cov = 20; den = 70; ~oilfield.sendMsg("/n_set", 3111, "freq", 2 * freq, "cov", cov, "den", den / 5); ~oilfield.sendMsg("/n_set", 3113, "freq", 2 * freq * 8 / 9, "cov", cov, "den", den / 5); ~oilfield.sendMsg("/n_set", 3115, "freq", 2 * freq * 4 / 5, "cov", cov, "den", den / 5); ~oilfield.sendMsg("/n_set", 3117, "freq", 2 * freq * 2 / 3, "cov", cov, "den", den / 5); ~oilfield.sendMsg("/n_set", 3119, "freq", 2 * freq * 8 / 13, "cov", cov, "den", den / 5); ) ( // sa.overtones var freq, cov, den; freq = ~root; cov = 30; den = 10; ~oilfield.sendMsg("/n_set", 3110, "freq", 8 * freq, "cov", cov, "den", den / 5); ~oilfield.sendMsg("/n_set", 3112, "freq", 8 * freq * 9 / 8, "cov", cov, "den", den / 5); ~oilfield.sendMsg("/n_set", 3114, "freq", 8 * freq * 5 / 4, "cov", cov, "den", den / 5); ~oilfield.sendMsg("/n_set", 3116, "freq", 8 * freq * 3 / 2, "cov", cov, "den", den / 5); ~oilfield.sendMsg("/n_set", 3118, "freq", 8 * freq * 13 / 8, "cov", cov, "den", den / 5); ) ( ~oilfield.sendMsg("/n_free", 3110); ~oilfield.sendMsg("/n_free", 3111); ~oilfield.sendMsg("/n_free", 3112); ~oilfield.sendMsg("/n_free", 3113); ~oilfield.sendMsg("/n_free", 3114); ~oilfield.sendMsg("/n_free", 3115); ~oilfield.sendMsg("/n_free", 3116); ~oilfield.sendMsg("/n_free", 3117); ~oilfield.sendMsg("/n_free", 3118); ~oilfield.sendMsg("/n_free", 3119); ) ---------- ( [~sa, ~ri, ~ga, ~ma, ~pa, ~da, ~ni].do({ arg x; x.free }); ~oilfield.quit; )