{
   "description" : "\"Skyline\" by Bobby Macdonald. Created as a Final Project for the course MUSC 115 - Experimental Sound Design, Santa Clara University, Fall 2019.",
   "ancestor_list" : [],
   "name" : "Skyline by Bobby Macdonald",
   "author" : "Bruno Ruviaro",
   "code" : "// =============================\r\n// \"Skyline\" by Bobby Macdonald (composition and code)\r\n//\r\n// Final Project for MUSC 115 - Experimental Sound Design\r\n// Bruno Ruviaro, instructor\r\n// Santa Clara University\r\n// Fall 2019\r\n//\r\n// =============================\r\n\r\n(\r\ns.waitForBoot({\r\n\t//KEYS\r\n\tSynthDef(\"keyMod\", {\r\n\t\targ freq = 440, amp = 0.2, gate = 1, pan = 0, att = 0.01, rel = 0.1;\r\n\t\tvar snd, env; // variables snd, env\r\n\t\tenv = Env.adsr(\r\n\t\t\tattackTime: att,\r\n\t\t\tdecayTime:  0.3,\r\n\t\t\tsustainLevel: 0.5,\r\n\t\t\treleaseTime: rel\r\n\t\t).kr(gate: gate);\r\n\t\tsnd = SinOsc.ar(freq: freq, mul: amp);\r\n\t\tsnd = snd * env;\r\n\t\tsnd = FreeVerb.ar(\r\n\t\t\tin: snd,\r\n\t\t\tmix: 0.3,\r\n\t\t\troom:  0.6,\r\n\t\t\tdamp: 0.6\r\n\t\t);\r\n\t\tsnd = Pan2.ar(snd, pan);\r\n\t\tOut.ar(0, snd);\r\n\r\n\t\t// 'doneAction: 2' here\r\n\t\tDetectSilence.ar(snd, 0.001, 0.2, doneAction: 2);\r\n\t}).add;\r\n\r\n\t//LEAD\r\n\r\n\tSynthDef(\"melody\", { arg amp, att, rel, pan = 0, freq, ffreq, verbMix = 0.5;\r\n\t\tvar env, snd;\r\n\r\n\t\tenv = Env.perc(att, rel, amp).kr;\r\n\r\n\t\tsnd = LFTri.ar(freq, mul: amp);\r\n\r\n\t\tsnd = LPF.ar(snd, ffreq, 1);\r\n\r\n\t\tsnd = snd * env;\r\n\r\n\t\tsnd = FreeVerb.ar(\r\n\t\t\tin: snd,\r\n\t\t\tmix: verbMix,\r\n\t\t\troom: 0.5,\r\n\t\t\tdamp: 0.5,\r\n\t\t\tmul: 1\r\n\t\t);\r\n\r\n\t\tsnd = Mix.ar(snd);\r\n\t\tsnd = Limiter.ar(snd);\r\n\t\tsnd = Pan2.ar(snd, pan);\r\n\t\tOut.ar(0, snd);\r\n\r\n\t\tDetectSilence.ar(snd, doneAction: 2);\r\n\t}).add;\r\n\r\n\t//KICK\r\n\tSynthDef(\"kick1\", {arg out = 0, amp = 0.3, sinFreq = 60, glissf = 0.9, att = 0.01, rel = 0.45, pan = 0;\r\n\t\tvar gliss = XLine.kr(sinFreq, sinFreq*glissf, rel);\r\n\t\tvar snd = SinOsc.ar(gliss);\r\n\t\tvar env = Env.perc(att, rel).kr(doneAction: 2);\r\n\t\tsnd = snd * env * amp;\r\n\t\tOut.ar(out, Pan2.ar(snd, pan));\r\n\t}).add;\r\n\r\n\t//SNARE - snareElectro\r\n\tSynthDef(\"snare\", {\r\n\t\targ\r\n\t\t//Standard Values\r\n\t\tout = 0, pan = 0, amp = 0.4, att = 0.001, rel = 0.15, curve = -4,\r\n\t\t//Other Controls, blend ranges from 0 to 1\r\n\t\tpopfreq = 160, sweep = 0.01, noisefreq = 810, rq = 1.6, blend = 0.41;\r\n\r\n\t\tvar pop, popEnv, popSweep, noise, noiseEnv, snd;\r\n\r\n\t\t// pop makes a click coming from very high frequencies\r\n\t\t// slowing down a little and stopping in mid-to-low\r\n\t\tpopSweep = Env.new(levels: [20.4, 2.6, 1] * popfreq, times: [sweep / 2, sweep], curve: \\exp).ar;\r\n\r\n\t\tpopEnv = Env.perc(attackTime: att, releaseTime: 0.73 * rel, level: blend, curve: curve).kr;\r\n\r\n\t\tpop = SinOsc.ar(freq: popSweep, mul: popEnv);\r\n\r\n\t\t// bandpass-filtered white noise\r\n\t\tnoiseEnv = Env.perc(attackTime: att, releaseTime: rel, level: 1 - blend, curve: curve).kr(doneAction: 2);\r\n\r\n\t\tnoise = BPF.ar(in: WhiteNoise.ar, freq: noisefreq, rq: rq, mul: noiseEnv);\r\n\r\n\t\tsnd = Mix.ar(pop + noise) * amp;\r\n\r\n\t\tOut.ar(out, Pan2.ar(snd, pan));\r\n\t}).add;\r\n\r\n\tSynthDef(\"hihat1\", {\r\n\t\targ out = 0, amp = 0.5, att = 0.01, rel = 0.2, ffreq = 6000, pan = 0;\r\n\t\tvar snd = WhiteNoise.ar(amp);\r\n\t\tvar env = Env.perc(att, rel).kr(doneAction: 2);\r\n\t\tsnd = HPF.ar(snd * env, ffreq);\r\n\t\tOut.ar(out, Pan2.ar(snd, pan));\r\n\t}).add;\r\n\r\n\t//  PBINDS  //\r\n\r\n\r\n\t~bpm = TempoClock.new(125/60).permanent_(true);\r\n\r\n\t~keyMotif = Pbind(\r\n\t\t\\instrument, \"keyMod\",\r\n\t\t\\degree, Pseq([Pn(4, 12), 5, 5, 5, 5, Pn(4, 16)], inf),\r\n\t\t\\dur, 1/2,\r\n\t\t\\att, 0.02,\r\n\t\t\\rel, 2,\r\n\t\t\\amp, 0.2,\r\n\t\t\\ctranspose, 2\r\n\t).play.stop;\r\n\r\n\t~keyBuild = Pbind(\r\n\t\t\\instrument, \"keyMod\",\r\n\t\t\\degree, Pseq([0, 1, 2, 1], inf),\r\n\t\t\\dur, 8,\r\n\t\t\\att, 0.02,\r\n\t\t\\rel, 2,\r\n\t\t\\amp, 0.2,\r\n\t\t\\ctranspose, -10\r\n\t).play.stop;\r\n\r\n\t~keyMoreBuild = Pbind(\r\n\t\t\\instrument, \"keyMod\",\r\n\t\t\\degree, Pseq([[-4 ,0], [-3, 1], [-2, 2], [-3, 1]], inf),\r\n\t\t\\dur, 8,\r\n\t\t\\att, 0.02,\r\n\t\t\\rel, 2,\r\n\t\t\\amp, 0.2,\r\n\t\t\\ctranspose, -10\r\n\t).play.stop;\r\n\r\n\t~firstLead = Pbind(\r\n\t\t\\instrument, \"melody\",\r\n\t\t\\degree, Pseq([7, 4, 8, 4, 8, 7, 9, 6], inf),\r\n\t\t\\dur, Pseq([3/2, 13/2], inf),\r\n\t\t\\att, 0.1,\r\n\t\t\\rel, 2,\r\n\t\t\\amp, 0.6,\r\n\t\t\\ffreq, 3800,\r\n\t\t\\ctranspose, 2\r\n\t).play.stop;\r\n\r\n\t~leadInterlude = Pbind(\r\n\t\t\\instrument, \"melody\",\r\n\t\t\\degree, Pseq([7, 6, 4, 6, 7, 6, 4, 6,\r\n\t\t\tPrand([8, 9], 1), 6, 4, 6, 11, 6, 4, 6], inf),\r\n\t\t\\dur, 1/4,\r\n\t\t\\att, 0.01,\r\n\t\t\\rel, 1.5,\r\n\t\t\\amp, 0.6,\r\n\t\t\\ffreq, 3800,\r\n\t\t\\ctranspose, 2\r\n\t).play.stop;\r\n\r\n\t~kickDrum = Pbind(\r\n\t\t\\instrument, \"kick1\",\r\n\t\t\\dur, 1,\r\n\t\t\\att, 0.01,\r\n\t\t\\rel, 0.3,\r\n\t\t\\glissf, Pwrand([0.9, 0.5], [0.9, 0.1], inf),\r\n\t\t\\amp, 1\r\n\t).play.stop;\r\n\r\n\t~snareBuild = Pbind(\r\n\t\t\\instrument, \"snare\",\r\n\t\t\\dur, 1/4,\r\n\t\t\\att, 0.01,\r\n\t\t\\rel, 0.1,\r\n\t\t\\amp, 0.2\r\n\t).play.stop;\r\n\r\n\t~snareDrop = Pbind(\r\n\t\t\\instrument, \"snare\",\r\n\t\t\\dur, Pseq([1/4, 1/2], 5),\r\n\t\t\\att, 0.01,\r\n\t\t\\rel, 0.1,\r\n\t\t\\amp, 0.2\r\n\t).play.stop;\r\n\r\n\t~snareMain = Pbind(\r\n\t\t\\instrument, \"snare\",\r\n\t\t\\dur, Pseq([Rest(1), 1], inf),\r\n\t\t\\att, 0.01,\r\n\t\t\\rel, 0.1,\r\n\t\t\\amp, 0.3\r\n\t).play.stop;\r\n\r\n\t~hihatMain = Pbind(\r\n\t\t\\instrument, \"hihat1\",\r\n\t\t\\dur, 1/4,\r\n\t\t\\att, 0.01,\r\n\t\t\\rel, Pwrand([0.1, 0.3], [0.95, 0.05], inf),\r\n\t\t\\ffreq, 10000,\r\n\t\t\\pan, Pwhite(-0.5, 0.5),\r\n\t\t\\amp, 0.6\r\n\t).play.stop;\r\n\r\n\r\n\t// SCORE\r\n\r\n\t{\r\n\t\t~keyMotif.reset.play(~bpm);\r\n\t\t32.wait;\r\n\r\n\t\t~keyBuild.reset.play(~bpm);\r\n\t\t32.wait;\r\n\r\n\t\t~keyBuild.stop;\r\n\t\t~keyMoreBuild.reset.play(~bpm);\r\n\t\t32.wait;\r\n\r\n\t\t~kickDrum.reset.play(~bpm);\r\n\t\t64.wait;\r\n\r\n\t\t~kickDrum.stop;\r\n\t\t~firstLead.reset.play(~bpm);\r\n\t\t32.wait;\r\n\r\n\t\t~snareBuild.reset.play(~bpm);\r\n\t\t28.wait;\r\n\t\t~snareBuild.stop;\r\n\t\t~snareDrop.reset.play(~bpm);\r\n\t\t4.wait;\r\n\r\n\t\t~snareMain.reset.play(~bpm);\r\n\t\t~kickDrum.reset.play(~bpm);\r\n\t\t~hihatMain.reset.play(~bpm);\r\n\t\t64.wait;\r\n\r\n\t\t~snareMain.stop;\r\n\t\t~kickDrum.stop;\r\n\t\t~hihatMain.stop;\r\n\t\t~firstLead.stop;\r\n\t\t~keyMotif.stop;\r\n\t\t~leadInterlude.reset.play(~bpm);\r\n\t\t32.wait;\r\n\r\n\t\t~keyMotif.reset.play(~bpm);\r\n\t\t32.wait;\r\n\r\n\t\t~snareBuild.reset.play(~bpm);\r\n\t\t28.wait;\r\n\t\t~snareBuild.stop;\r\n\t\t~snareDrop.reset.play(~bpm);\r\n\t\t4.wait;\r\n\r\n\t\t~snareMain.reset.play(~bpm);\r\n\t\t~kickDrum.reset.play(~bpm);\r\n\t\t~hihatMain.reset.play(~bpm);\r\n\t\t32.wait;\r\n\r\n\t\t~snareMain.stop;\r\n\t\t~kickDrum.stop;\r\n\t\t~hihatMain.stop;\r\n\t\t~leadInterlude.stop;\r\n\t\t32.wait;\r\n\r\n\t\t~keyMoreBuild.stop;\r\n\t\t32.wait;\r\n\r\n\t\t~keyMotif.stop;\r\n\r\n\t}.fork(~bpm);\r\n\r\n}); // end of waitForBoot\r\n);\r\n\r\n\r\n/*\r\n~keyMotif.reset.play(~bpm);\r\n//~keyBuild.reset.play(~bpm);\r\n~keyMoreBuild.reset.play(~bpm);\r\n~kickDrum.reset.play(~bpm);\r\n~firstLead.reset.play(~bpm);\r\n~snareMain.reset.play(~bpm);\r\n~hihatMain.reset.play(~bpm);\r\n~leadInterlude.reset.play(~bpm);\r\n~snareDrop.reset.play(~bpm);\r\n*/",
   "is_private" : null,
   "id" : "1-5cn",
   "labels" : [
      "composition",
      "musc115"
   ]
}
