{
   "is_private" : null,
   "id" : "1-5b5",
   "code" : "//By: Patrick Kirk\r\n\r\n\r\n\r\n\r\n/////////////////\r\n/// SYNTHDEFS ///\r\n/////////////////\r\n\r\n//Evaluate all and track should play\r\n\r\n\r\n(\r\nSynthDef(\"windSaw\", {arg freq = 85, att = 0.001, amp = 0.3, maxOsc = 20, loOsc = 5, rel = 5, maxAmp = 0.6, loAmp = 0.1, gate = 1;\r\n\tvar snd, env;\r\n\tenv = Env.adsr(\r\n\t\tattackTime: att,\r\n\t\tdecayTime: 3,\r\n\t\tsustainLevel: 0.75,\r\n\t\treleaseTime: rel,\r\n\t\tpeakLevel: amp\r\n\t).kr(doneAction: 2, gate: gate);\r\n\tsnd = LFSaw.ar(\r\n\t\tfreq: freq*[2, 3, 4],\r\n\t\tmul: env*SinOsc.kr(freq: XLine.kr(maxOsc, loOsc, 5).range(maxAmp, loAmp)));\r\n\tsnd = snd + LFTri.ar(\r\n\t\tfreq: freq*6,\r\n\t\tmul: env*SinOsc.kr(freq: XLine.kr(maxOsc, loOsc, 5).range(maxAmp, loAmp)));\r\n\tsnd = Splay.ar(snd);\r\n\tOut.ar(0, snd);\r\n\r\n}).add;\r\n\r\nSynthDef(\"whiteUp\", { arg amp = 0.8, dur = 16.8;\r\n\tvar snd, env;\r\n\tenv = Env.perc(\r\n\t\tattackTime: dur,\r\n\t\treleaseTime: 0.01,\r\n\t\tlevel: amp,\r\n\t\tcurve: 4\r\n\t).kr(doneAction: 2);\r\n\tsnd = WhiteNoise.ar(env*SinOsc.kr(XLine.kr(8, 1, dur)).range(0.2, 0.8))\r\n\t+ PinkNoise.ar(2*env*SinOsc.kr(XLine.kr(16, 8, dur)).range(0.2, 0.8));\r\n\tsnd = Splay.ar(snd);\r\n\tOut.ar(0, snd);\r\n}).add;\r\n\r\nSynthDef(\"whiteDown\", { arg amp = 0.5;\r\n\tvar snd, env;\r\n\tenv = Env.perc(\r\n\t\tattackTime: 0.01,\r\n\t\treleaseTime: 4,\r\n\t\tlevel: amp,\r\n\t\tcurve: 2\r\n\t).kr(doneAction: 2);\r\n\tsnd = WhiteNoise.ar(env*SinOsc.kr(XLine.kr(1, 8, 8)).range(0.2, 0.8));\r\n\tsnd = Splay.ar(snd);\r\n\tOut.ar(0, snd);\r\n}).add;\r\n\r\n\r\n\r\nSynthDef(\"sawSynth\", { arg freq = 440, amp = 0.1, att = 0.001, rel = 0.2, lofreq = 1000, hifreq = 3000;\r\n    var env, snd;\r\n    env = Env.perc(\r\n\t\tattackTime: att,\r\n\t\treleaseTime: rel,\r\n\t\tlevel: amp\r\n\t).kr(doneAction: 2);\r\n    snd = Saw.ar(freq: freq * [0.99, 1, 1.001, 1.008], mul: env);\r\n\tsnd = LPF.ar(\r\n\t\tin: snd,\r\n\t\tfreq: LFNoise2.kr(1).range(lofreq, hifreq)\r\n\t);\r\n    snd = Splay.ar(snd);\r\n    Out.ar(0, snd);\r\n}).add;\r\n\r\n\r\nSynthDef(\"snare\", {arg out = 0, amp = 0.3, sinFreq = 180, att = 0.01, rel = 0.2, ffreq = 2000, pan = 0;\r\n\tvar env, env2, snd1, snd2, snd3, sum;\r\n\tenv = Env.perc(\r\n\t\tattackTime: att,\r\n\t\treleaseTime: rel,\r\n\t\tlevel: amp\r\n\t).kr(doneAction: 2);\r\n\tenv2 = Env.perc(\r\n\t\tattackTime: 0.001,\r\n\t\treleaseTime: 0.02,\r\n\t\tlevel: amp*1.3\r\n\t).kr(doneAction: 2);\r\n\tsnd1 = HPF.ar(\r\n\t\tin: WhiteNoise.ar,\r\n\t\tfreq: ffreq,\r\n\t\tmul: env\r\n\t);\r\n\tsnd2 = SinOsc.ar(freq: sinFreq, mul: env);\r\n\tsnd3 = LPF.ar(\r\n\t\tin: FSinOsc.ar(300),\r\n\t\tfreq: 12000,\r\n\t\tmul: env\r\n\t);\r\n\tsum = snd1 + snd2 + snd3;\r\n\tOut.ar(out, Pan2.ar(sum, pan));\r\n}).add;\r\n\r\n\r\n\r\nSynthDef(\"tom\", {arg out = 0, amp = 0.3, sinFreq = 180, att = 0.01, rel = 0.2, ffreq = 2000, pan = 0;\r\n\tvar env, env2, snd1, snd2, snd3, sum;\r\n\tenv = Env.perc(\r\n\t\tattackTime: att,\r\n\t\treleaseTime: rel,\r\n\t\tlevel: amp\r\n\t).kr(doneAction: 2);\r\n\tenv2 = Env.perc(\r\n\t\tattackTime: 0.001,\r\n\t\treleaseTime: 0.02,\r\n\t\tlevel: amp*1.3\r\n\t).kr(doneAction: 2);\r\n\tsnd1 = HPF.ar(\r\n\t\tin: WhiteNoise.ar,\r\n\t\tfreq: ffreq,\r\n\t\tmul: env\r\n\t);\r\n\tsnd2 = SinOsc.ar(freq: sinFreq, mul: env);\r\n\tsnd3 = LPF.ar(\r\n\t\tin: FSinOsc.ar([500, 600, 700]),\r\n\t\tfreq: 12000,\r\n\t\tmul: env\r\n\t);\r\n\tsum = snd1 + snd2 + snd3;\r\n\tOut.ar(out, Pan2.ar(sum, pan));\r\n}).add;\r\n\r\nSynthDef(\"hihat\", {arg amp = 0.5, att = 0.01, rel = 0.3, ffreq = 6000, idk = 300, pan = 0;\r\n\tvar env, env2, snd, snd2, sum;\r\n\tenv = EnvGen.kr(Env.perc(0, 0.01), doneAction: 2);\r\n\tenv2 = EnvGen.kr(Env.perc(\r\n\t\tattackTime: att,\r\n\t\treleaseTime: rel,\r\n\t\tlevel: amp), doneAction: 2);\r\n\tsnd = WhiteNoise.ar;\r\n\tsnd = HPF.ar(in: snd, freq: ffreq, mul: env);\r\n\tsnd2 = HPF.ar(\r\n\t\tin: FSinOsc.ar(idk),\r\n\t\tfreq: 1000,\r\n\t\tmul: env2\r\n\t);\r\n\tsum = snd + snd2;\r\n\tOut.ar(0, Pan2.ar(sum, pan));\r\n}).add;\r\n\r\nSynthDef(\"bazz\", {arg freq=60, amp=0.01, att = 0.025, dec = 0.6, rel = 0.5, crunchy = 200, gate=1;\r\n\tvar snd, env, snd2, sum;\r\n\tenv = Env.adsr(attackTime: att, decayTime: dec, sustainLevel: 0.5, releaseTime: rel).kr(2, gate);\r\n\tenv = env/3;\r\n\tsnd = LFSaw.ar(freq: SinOsc.kr(XLine.kr(7, 2, 1)).range(freq, freq/2), mul: env/2)\r\n\t+ LFSaw.ar(freq: freq, mul: env)\r\n\t+ LFTri.ar(freq: freq*[3], mul: env/2)\r\n\t+ SinOsc.ar(freq: freq*[2, 4, 6], mul: env);\r\n\tsnd = LPF.ar(\r\n\t\tin: snd,\r\n\t\tfreq: XLine.kr(10000, crunchy, att*5)\r\n\t);\r\n\tsum = snd;\r\n\tsum = Splay.ar(sum);\r\n\tOut.ar(0, sum);\r\n}).add;\r\n\r\n//mostly adapted from an FM synthdef by Schemawound: http://sccode.org/1-4Tq\r\nSynthDef(\"FM\", {|out = 0, gate = 1, amp = 1, carFreq = 500, modFreq = 50, modAmount = 2000, clipAmount = 0.1|\r\n\tvar env, snd, car, ampEnv, clip;\r\n\r\n\tenv = EnvGen.ar(Env.adsr(0.5, 0.5, 0.7, 0.1, peakLevel: modAmount), gate);\r\n\tsnd = SinOsc.ar(modFreq) * env;\r\n\tcar = SinOsc.ar(carFreq + snd);\r\n\tampEnv = EnvGen.ar(Env.adsr(0.1, 0.3, 0.7, 0.2, peakLevel: amp), gate, doneAction: 2);\r\n\tclip = clipAmount * 300;\r\n\tsnd = (car * ampEnv * clip).clip(-0.7, 0.7);\r\n\tsnd = Splay.ar(snd);\r\n\tOut.ar(out,  snd* 0.1);\r\n\t}).add;\r\n\r\nSynthDef(\"kick\", {arg out = 0, amp = 0.3, sinfreq = 60, glissf = 0.9, att = 0.01, rel = 0.45, pan = 0;\r\n\tvar env, snd, ramp;\r\n\tenv = Env.perc(att, rel, amp).kr(doneAction: 2);\r\n\tramp = XLine.kr(\r\n\t\tstart: sinfreq,\r\n\t\tend: sinfreq * glissf,\r\n\t\tdur: rel\r\n\t);\r\n\tsnd = SinOsc.ar(freq: ramp, mul: env);\r\n\tsnd = Pan2.ar(snd, pan);\r\n\tOut.ar(out, snd);\r\n}).add;\r\n\r\nSynthDef(\"kickKnock\", {arg out = 0, pan = 0, amp = 0.3;\r\n\tvar main, mainFreq, mainAmp;\r\n\tvar pop, popFreq, popAmp;\r\n\tvar click, clickAmp;\r\n\tvar snd;\r\n\r\n\tmainFreq = EnvGen.ar(Env([261, 120, 51], [0.035, 0.08], curve: \\exp));\r\n\tmainAmp = EnvGen.ar(Env.linen(0.005, 0.1, 0.3), doneAction: 2);\r\n\tmain = SinOsc.ar(mainFreq) * mainAmp;\r\n\tpopFreq = XLine.kr(750, 261, 0.02);\r\n\tpopAmp = EnvGen.ar(Env.linen(0.001, 0.02, 0.001)) * 0.15;\r\n\tpop = SinOsc.ar(popFreq) * popAmp;\r\n\tclickAmp = EnvGen.ar(Env.perc(0.001, 0.01)) * 0.15;\r\n\tclick = LPF.ar(Formant.ar(910, 4760, 2110), 3140) * clickAmp;\r\n\r\n\tsnd = main + pop + click;\r\n\tsnd = snd.tanh;\r\n\r\n\tOut.ar(out, Pan2.ar(snd, pan, amp));\r\n}).add;\r\n\r\n\r\n//////////////\r\n/// PBINDS ///\r\n//////////////\r\n\r\n//in order of appearance\r\n\r\n\r\n~tinkle = Pbind(\r\n\t\\instrument, \"hihat\",\r\n\t\\dur, Pseq([1/4, Rest(1/4)], inf),\r\n\t\\att, 0.001,\r\n\t\\rel, 0.1,\r\n\t\\idk, Pn(Pgeom(300, 1.5, 8.4), inf),\r\n\t\\amp, 0.45,\r\n\t\\tempo, 126/60\r\n);//I meant for this to be a hi hat but it turned to be something different but better\r\n\r\n~softBuild = Pbind(\r\n\t\\instrument, \"sawSynth\",\r\n\t\\midinote, Pseq([Pseq([60, 63, 67, 70, 74], 1), Rest(1), Pseq([60, 63, 67, 70, 74].reverse, 1), Rest(1)], 10),\r\n\t\\att, 0.001,\r\n\t\\rel, Pgeom(0.1, 1.07, 100),\r\n\t\\dur, 1/4,\r\n\t\\tempo, 126/60\r\n\r\n);\r\n\r\n~kickIntro = Pbind(\r\n\t\\instrument, \"kick\",\r\n\t\\dur, Pseq([Pn(1, 16), Pn(1/2, 16), Pn(1/4, 32)], 1),\r\n\t\\amp, Pseq([Pgeom(0.1, 1.15, 8.4), Pn(0.6, inf)], 1),\r\n\t\\tempo, 126/60\r\n);\r\n\r\n~sawBuild = Pbind(\r\n    \\instrument, \"sawSynth\",\r\n\t\\freq, Pseq([Pgeom(600, 1.01, 15), Pgeom(625, 1.015, 15), Pgeom(650, 1.02, 15), Pgeom(675, 1.025, 15)], inf),\r\n\t\\dur, Pseq([Pn(1/4,14), Rest(1/2)], inf),\r\n\t\\hifreq, 4000,\r\n\t\\amp, Pn(Pgeom(0.05, 1.05, 15), inf)*Pstutter(15, Pgeom(1, 1.3, 8)),\r\n\t\\tempo, 126/60\r\n);\r\n\r\n~whiteUp = Pbind(\r\n\t\\instrument, \"whiteUp\",\r\n\t\\dur, Pseq([17], 1),\r\n\t\\amp, 0.5,\r\n\t\\tempo, 126/60\r\n);\r\n\r\n~windDown = Pbind(\r\n\t\\instrument, \"windSaw\",\r\n\t\\freq, Pn(60, inf),\r\n\t\\dur, Pn(Pseq([12, Rest(20)], 1), inf),\r\n\t\\amp, 0.2,\r\n\t\\tempo, 126/60\r\n);\r\n\r\n~kick = Pbind(\r\n\t\\instrument, \"kickKnock\",\r\n\t\\dur, Pseq([Pn(1, 30), Rest(2)], inf),\r\n\t\\att, 0.01,\r\n\t\\rel, 0.22,\r\n\t\\sinfreq, 60,\r\n\t\\glissf, 0.9,\r\n\t\\amp, 1,\r\n\t\\tempo, 126/60\r\n);\r\n\r\n~snare = Pbind(\r\n\t\\instrument, \"snare\",\r\n\t\\dur, Pseq([Rest(1), 1], inf),\r\n\t\\att, 0.01,\r\n\t\\rel, 0.22,\r\n\t\\amp, 0.75,\r\n\t\\tempo, 126/60\r\n);\r\n\r\n~bazz = Pbind(\r\n\t\\instrument, \"bazz\",\r\n\t\\dur, Pseq([\r\n\t\tPseq([Pn(Pseq([1/2, Rest(1/4)], 1), 4), Pn(1/2, 2)], 3),\r\n\t\tPseq([Pn(Pseq([1/2, Rest(1/4)], 1), 4), Rest(1)], 1)], inf),\r\n\t\\midinote, 0.6*Pseq([\r\n\t\tPseq( [Pn(Pseq([67, \\rest],1), 4), 67, Prand([63, 64, 65, 66, 68, 69, 70, 71], 1)], 3),\r\n\t\tPseq( [Pn(Pseq([67, \\rest],1), 4), \\rest], 1)], inf),\r\n\t\\legato, 0.75,\r\n\t\\amp, 0.025,\r\n\t\\tempo, 126/60\r\n);\r\n\r\n~whiteUpShort = Pbind(\r\n\t\\instrument, \"whiteUp\",\r\n\t\\dur, Pseq([7.8], 1),\r\n\t\\amp, 0.6,\r\n\t\\tempo, 126/60\r\n);\r\n\r\n~tom = Pbind(\r\n\t\\instrument, \"tom\",\r\n\t\\dur, Pseq([\r\n\t\tPn(Pseq([Rest(1/2), 1/2, Rest(1), 1/2, 1/2, Rest(1)], 1), 5),\r\n\t\tRest(1/2), 1/2, Rest(1), Pn(1/4, 6), Rest(1/2),\r\n\t\tPn(Pseq([Rest(1/2), 1/2, Rest(1), 1/2, 1/2, Rest(1)], 1), 1),\r\n\t\tRest(1/2), 1/2, Rest(1), 1/3, 1/3, 1/3, 1/3, 1/3, Rest(1/3)\r\n\t], inf),\r\n\t\\ffreq, Pwhite(1800, 2500, inf),\r\n\t\\rel, Pwhite(0.1, 0.6, inf),\r\n\t\\amp, 0.25,\r\n\t\\tempo, 126/60\r\n);\r\n\r\n~whiteDown = Pbind(\r\n\t\\instrument, \"whiteDown\",\r\n\t\\dur, Pseq([8], 1),\r\n\t\\amp, 0.6,\r\n\t\\tempo, 126/60\r\n);\r\n\r\n~fM = Pbind(\r\n\t\\instrument, \"FM\",\r\n\t\\dur, Pseq([\r\n\t\tPseq([3, Rest(1)], 3),\r\n\t\tPseq([3/4, Rest(1/4)], 4)], inf),\r\n\t\\legato, 0.75,\r\n\t\\amp, 0.1,\r\n\t\\tempo, 126/60\r\n);\r\n\r\n~fMOut = Pbind(\r\n\t\\instrument, \"FMFizzle\",\r\n\t\\dur, Pseq([15], 1),\r\n\t\\amp, Pgeom(1, 0.8, 15),\r\n\t\\tempo, 126/60\r\n);\r\n\r\n\r\n///\\\\\\\\\\\\\\\\\\\\\\\\\\\r\n/// SEQUENCE \\/\\\r\n//\\\\\\\\\\\\\\\\\\\\\\///\r\n\r\n\r\nPspawner({ arg spawn;\r\n\r\n\t~tinkleVar = spawn.par(~tinkle);\r\n\tspawn.wait(16);\r\n\t~softBuildVar = spawn.par(~softBuild);\r\n\tspawn.wait(28);\r\n\t~whiteUpVar = spawn.par(~whiteUp);\r\n\tspawn.wait(4);\r\n\t~kickIntroVar = spawn.par(~kickIntro);\r\n\tspawn.seq(~sawBuild);\r\n\tspawn.suspend(~softBuildVar);\r\n\tspawn.suspend(~tinkleVar);\r\n\t~kickVar = spawn.par(~kick);\r\n\t~snareVar = spawn.par(~snare);\r\n\t~windDownVar = spawn.par(~windDown);\r\n\tspawn.wait(16);\r\n\t~whiteUpShortVar = spawn.par(~whiteUpShort);\r\n\tspawn.wait(16);\r\n\tspawn.par(~tinkleVar);\r\n\t~bazzVar = spawn.par(~bazz);\r\n\t~tomVar = spawn.par(~tom);\r\n\tspawn.wait(32);\r\n\t~whiteUpShortVar = spawn.par(~whiteUpShort);\r\n\tspawn.suspend(~kickVar);\r\n\tspawn.suspend(~tinkleVar);\r\n\tspawn.suspend(~snareVar);\r\n\tspawn.suspend(~windDownVar);\r\n\tspawn.wait(16);\r\n\t~fMVar = spawn.par(~fM);\r\n\tspawn.wait(16);\r\n\t~kickVar = spawn.par(~kick);\r\n\tspawn.par(~snareVar);\r\n\tspawn.wait(28);\r\n\tspawn.suspend(~kickVar);\r\n\tspawn.suspend(~bazzVar);\r\n\tspawn.suspend(~snareVar);\r\n\tspawn.suspend(~tomVar);\r\n\tspawn.wait(4);\r\n\tspawn.suspend(~fMVar);\r\n\r\n\r\n}).play;\r\n)",
   "labels" : [
      "pspawner"
   ],
   "description" : "Use of Synthdefs, Pbinds, and Pspawner to create a unique track. This track was create for Bruno Ruviaro's course in Experimental Sound Design.",
   "ancestor_list" : [],
   "author" : "pkirk",
   "name" : "Wind Down: Track Creation Project"
}
