{
   "description" : "https://soundcloud.com/user-68447368/middle-children-of-history-musc115-final",
   "ancestor_list" : [],
   "name" : "Middle Children of History MUSC115 Final",
   "author" : "ianmcdougall60",
   "id" : "1-563",
   "is_private" : null,
   "code" : "//////////////////////////////////////\r\n////////   Ian McDougall  ///////////\r\n//////////////////////////////////////\r\n\r\n// ===================================\r\n// SynthDefs here\r\n// ===================================\r\n\r\n// Sample definitions\r\n\r\n~fight = Buffer.read(s, \"C:/Users/Ian/Desktop/SUPERCOLLIDER/FINAL PROJECT/Fight Club Speech.wav \");\r\n~fight.duration;\r\n~kanye = Buffer.read(s, \"C:/Users/Ian/Desktop/SUPERCOLLIDER/FINAL PROJECT/Kanye West - Self Conscious on Def Jam Poetry.wav\");\r\n~kanye.duration;\r\n~west1 = Buffer.read(s,\"C:/Users/Ian/Desktop/SUPERCOLLIDER/FINAL PROJECT/west1.wav\");\r\n// Your SynthDefs go here\r\n(\r\n\r\nSynthDef(\"lowbuild\", {arg out = 0, dur = 0.75, amp = 0.3, sinfreq = 80, glissf = 0.9, att = 0.01, rel = 0.45, pan = 0;\r\n\tvar env, snd, ramp;\r\n\tenv =  Env.pairs([[0,0.05], [dur, 0.1]], \\exp).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 = Saw.ar(\r\n\t\tfreq: ramp,\r\n\t\tmul: env,\r\n\t\tadd: 0);\r\n\tsnd = Pan2.ar(snd, pan);\r\n\tOut.ar(out, snd);\r\n}).add;\r\n\r\n\r\nSynthDef(\"speech\", {arg rate = 1, amp = 1, buffer, startPos = 0, attack = 0.02, panning = 0, ffreq = 1000, rq = 0.1, delay = 0.3, decay = 1;\r\n    var snd, env;\r\n\tenv = Env.pairs([[0,10], [48, 15]], \\lin).kr(doneAction: 2);\r\n    snd = PlayBuf.ar(\r\n        numChannels: 1,\r\n        bufnum: buffer,\r\n        rate: rate,\r\n        startPos: startPos.linlin(0, 1, 0, BufFrames.kr(buffer))\r\n    );\r\n    snd = snd * env;\r\n\tsnd = BPF.ar(snd, ffreq, rq);\r\n\tsnd = CombC.ar(snd, maxdelaytime: 2, delaytime: delay, decaytime: decay);\r\n\tsnd = Pan2.ar(snd, panning);\r\n    Out.ar(0, snd);\r\n}).add;\r\n\r\nSynthDef(\\lead, { |out, freq=440, amp=0.1, gate=1, bps=2|\r\n    var snd;\r\n    var seq = Demand.kr(Impulse.kr(bps*4), 0, Dseq(freq*[1,3,2], inf)).lag(0.01);\r\n    snd = LFSaw.ar(freq*{rrand(0.995, 1.005)}!4);\r\n    snd = Splay.ar(snd);\r\n    snd = MoogFF.ar(snd, seq, 0.5);\r\n    snd = snd * EnvGen.ar(Env.asr(0.01,1,0.01), gate, doneAction:2);\r\n    OffsetOut.ar(out, snd * amp);\r\n}).add;\r\n\r\nSynthDef(\"sampler\", {arg rate = 1, amp = 1, buffer, startPos = 0, attack = 0.02, release = 0.5, panning = 0;\r\n    var snd, env;\r\n    env = Env.perc(attackTime: attack, releaseTime: release, level: amp).kr(doneAction: 2);\r\n    snd = PlayBuf.ar(\r\n        numChannels: 1,\r\n        bufnum: buffer,\r\n        rate: rate,\r\n        startPos: startPos.linlin(0, 1, 0, BufFrames.kr(buffer))\r\n    );\r\n    snd = snd * env;\r\n\tsnd = Pan2.ar(snd, panning);\r\n    Out.ar(0, snd);\r\n}).add;\r\n\r\nSynthDef(\"sampfilter\", {arg rate = 1, amp = 1, buffer, startPos = 0, attack = 0.02, release = 0.5, ffreq = 1000, rq = 0.1, panning = 0, delay = 0.3, decay = 1;\r\n    var snd, env;\r\n    env = Env.perc(attackTime: attack, releaseTime: release, level: amp).kr(doneAction: 2);\r\n    snd = PlayBuf.ar(\r\n        numChannels: 1,\r\n        bufnum: buffer,\r\n        rate: rate,\r\n        startPos: startPos.linlin(0, 1, 0, BufFrames.kr(buffer))\r\n    );\r\n    snd = snd * env;\r\n    snd = BPF.ar(snd, ffreq, rq);\r\n\tsnd = CombC.ar(snd, maxdelaytime: 2, delaytime: delay, decaytime: decay);\r\n    snd = Pan2.ar(snd, panning);\r\n    Out.ar(0, snd);\r\n}).add;\r\n\r\nSynthDef(\"hihat\", {arg out = 0, amp = 0.5, att = 0.01, rel = 0.2, ffreq = 6000, pan = 0;\r\n\tvar env, snd;\r\n\tenv = Env.perc(att, rel, amp).kr(doneAction: 2);\r\n\tsnd = WhiteNoise.ar;\r\n\tsnd = HPF.ar(in: snd, freq: ffreq, mul: env);\r\n\tOut.ar(out, Pan2.ar(snd, pan));\r\n}).add;\r\n\r\nSynthDef(\"snare\", {arg out = 0, amp = 0.1, sinfreq = 180, att = 0.01, rel = 0.2, ffreq = 2000, pan = 0;\r\n\tvar env, snd1, snd2, sum;\r\n\tenv = Env.perc(att, rel, amp).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\tsum = snd1 + snd2;\r\n\tOut.ar(out, Pan2.ar(sum, pan));\r\n}).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\n// Basic saw synth for chords and bass\r\nSynthDef(\"sawSynth\", { arg freq = 440, amp = 0.1, att = 0.1, rel = 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\n\r\n\r\n\r\n) // end of SynthDefs\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n// ===================================\r\n// Define a bunch of \"score snippets\"\r\n// ===================================\r\n\r\n(\r\n~hihat1 = Pbind(\r\n\t\\instrument, \"hihat\",\r\n\t\\dur, Pseq([1/8, Rest(2/8), 2/8, 1/8], inf),\r\n\t\\att, 0.01,\r\n\t\\rel, Pseq([0.3, 1, 0.1, 0.3], inf),\r\n\t\\ffreq, 11000,\r\n\t\\pan, 0,\r\n\t\\amp, 0.1 * Pwhite(0.1, 1.8)\r\n);\r\n\r\n\r\n~snare1 = Pbind(\r\n\t\\instrument, \"snare\",\r\n\t\\dur, Pseq([Rest (3/8), 3/8, Rest(2/8), 4/8], inf),\r\n\t\\att, 0.01,\r\n\t\\rel, 0.1,\r\n\t\\sinfreq, 180,\r\n\t\\ffreq, 2000,\r\n\t\\amp, 0.15 * Pwhite(0.1, 1.8)\r\n);\r\n\r\n~kick1 = Pbind(\r\n\t\\instrument, \"kick\",\r\n\t\\dur, Pseq([Rest(6/8), 6/8], 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, 0.3 * Pwhite(0.1, 1.8)\r\n);\r\n\r\n~bass1 = Pbind(\r\n\t\\instrument, \"sawSynth\",\r\n\t\\freq, Pseq([80, 120, 80, 60, 50, 60], inf),\r\n\t\\dur, Pseq([Rest(2/4), Rest(1/4), 1/4, 1/4, Rest(2/4), 3/4, 2/4], inf),\r\n\t\\att, 0.02,\r\n\t\\rel, Pseq([1, 1, 0.3, 0.3, 1, 0.5, 0.5], inf),\r\n\t\\amp, 0.6 * Pwhite(0.1, 1.8),\r\n\t\\lofreq, 50,\r\n\t\\hifreq, 180\r\n);\r\n\r\n~fightspeech = Pbind(\r\n    \\instrument, \"speech\", // notice I'm using granny2 synthdef here\r\n\t\\rate, Pseq([1], 1),\r\n\t\\amp, 20, // boosted to 5 because filtering attenuates a lot of the sound\r\n\t\\startPos, 0,\r\n    \\attack, 0.2,\r\n\t\\ffreq, 300,\r\n\t\\rq, 0.1,\r\n\t\\delay, 0.2,\r\n\t\\decay, 2,\r\n    \\buffer, ~fight, // which buffer to play from\r\n    \\dur, 48,\r\n\t\\panning, 0,\r\n);\r\n\r\n\r\n~pulse = Pbind(\r\n    \\instrument, \\lead,\r\n    \\midinote, Pseq([\r\n        [50, 55, 65, 70],\r\n        [65, 75, 80, 55],\r\n\t\t\t[40, 45, 50, 55],\r\n            [35, 45, 55, 65, 75],\r\n\t\t],\r\n        inf\r\n    ),\r\n    \\dur, Prand([1.25, 1, 2, 1.5], 26),\r\n\t\\att, 0.1,\r\n\t\\rel, 4,\r\n    \\amp, 0.06\r\n);\r\n\r\n~speech1 = Pbind(\r\n    \\instrument, \"sampfilter\", // notice I'm using granny2 synthdef here\r\n\t\\rate, Pseq([2, 4, 1, 9], 10),\r\n\t\\amp, 5, // boosted to 5 because filtering attenuates a lot of the sound\r\n\t\\startPos, Pwhite(0.05, 0.95),\r\n    \\attack, 0.2,\r\n    \\release, 2,\r\n\t\\ffreq, Prand([100, 200, 400, 550, 9000, 50, 100, 2000], inf),\r\n\t\\rq, 0.1,\r\n\t\\delay, 0.2,\r\n\t\\decay, 2,\r\n    \\buffer, ~fight, // which buffer to play from\r\n    \\dur, 0.5,\r\n\t\\panning, Pwhite(-0.5, 0.5)\r\n);\r\n\r\n~speech2 = Pbind(\r\n    \\instrument, \"sampfilter\", // notice I'm using granny2 synthdef here\r\n\t\\rate, Pseq([0.2, 0.4, 0.3, 0.5], 14),\r\n\t\\amp, 12, // boosted to 5 because filtering attenuates a lot of the sound\r\n\t\\startPos, Pwhite(0.05, 0.95),\r\n    \\attack, 0.4,\r\n    \\release, 2.5,\r\n\t\\ffreq, Prand([100, 200, 400, 550, 9000, 50, 100, 2000], inf),\r\n\t\\rq, 0.1,\r\n\t\\delay, 0.2,\r\n\t\\decay, 1,\r\n    \\buffer, ~fight, // which buffer to play from\r\n    \\dur, 0.5,\r\n\t\\panning, Pwhite(-0.5, 0.5)\r\n);\r\n\r\n~kanye1 = Pbind(\r\n    \\instrument, \"sampler\",\r\n\t\\rate, Pseq([1.2], inf), // notice this one ENDS after 4 cycles\r\n\t\\amp, Pseq([1, 1, 0.6, 0.6], 4),\r\n\t\\startPos, Pseq([0.57, 0.4, 0.8, 0.65],4),\r\n    \\attack, 0.01,\r\n\t\\release,Pseq([ 0.5, 1, 1, 1], inf),\r\n    \\buffer, ~kanye, // which buffer to play from\r\n\t\\dur,  Pseq([0.5, Rest(0.25), 1, 1], inf)\r\n);\r\n\r\n~hihat2 = Pbind(\r\n\t\\instrument, \"hihat\",\r\n\t\\dur, Pseq([0.125], inf),\r\n\t\\att, 0.01,\r\n\t\\rel, Pseq([0.3, 1, 0.1, 0.3], inf),\r\n\t\\ffreq, 11000 *Pwhite(0.3, 0.9),\r\n\t\\pan, Pwhite(-1, 1),\r\n\t\\amp, 0.1 * Pwhite(0.1, 1.8)\r\n);\r\n\r\n\r\n~snare2 = Pbind(\r\n\t\\instrument, \"snare\",\r\n\t\\dur, Pseq([1,1], inf),\r\n\t\\att, 0.01,\r\n\t\\rel, Pseq([0.1, 0.1, 0.1, 0.75, 0.1, 0.1, 0.1, 0.75],inf),\r\n\t\\sinfreq, 0,\r\n\t\\ffreq, 200,\r\n\t\\amp, 0.2\r\n);\r\n\r\n~kick2 = Pbind(\r\n\t\\instrument, \"kick\",\r\n\t\\dur, Pseq([1, 0.25, Rest(0.25), 0.125, 0.125, Rest(0.25)], 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, 0.7\r\n);\r\n\r\n\r\n~down = Pbind(\r\n\t\\instrument, \"sawSynth\",\r\n\t\\freq, Pseq([55, 65.41, 82.41, 98].reverse, 4),\r\n\t\\dur, Pseq([1/8, 1/8, 1/8, 1/8, 1/8, 1/8, 1/8], 4),\r\n\t\\ctranspose, [0, -12],\r\n\t\\att, 0.01,\r\n\t\\rel, 0.2,\r\n\t\\amp, 0.4,\r\n\t\\lofreq, 100,\r\n\t\\hifreq, 1000\r\n);\r\n\r\n~up = Pbind(\r\n\t\\instrument, \"sawSynth\",\r\n\t\\freq, Pseq([55, 65.41, 82.41, 98], 4),\r\n\t\\dur, Pseq([1/8, 1/8, 1/8, 1/8, 1/8, 1/8, 1/8], 4),\r\n\t\\ctranspose, [0, -12],\r\n\t\\att, 0.01,\r\n\t\\rel, 0.2,\r\n\t\\amp, 0.4,\r\n\t\\lofreq, 100,\r\n\t\\hifreq, 1000\r\n);\r\n\r\n~down2 = Pbind(\r\n\t\\instrument, \"sawSynth\",\r\n\t\\freq, Pseq([72, 72, 66, 66].reverse, 4),\r\n\t\\dur, Pseq([1/8, 1/8, 1/8, 1/8, 1/8, 1/8, 1/8], 4),\r\n\t\\ctranspose, [0, -12],\r\n\t\\att, 0.01,\r\n\t\\rel, 0.2,\r\n\t\\amp, 0.4,\r\n\t\\lofreq, 100,\r\n\t\\hifreq, 1000\r\n);\r\n\r\n~up2 = Pbind(\r\n\t\\instrument, \"sawSynth\",\r\n\t\\freq, Pseq([80, 76, 72, 70], 4),\r\n\t\\dur, Pseq([1/8, 1/8, 1/8, 1/8, 1/8, 1/8, 1/8], 4),\r\n\t\\ctranspose, [0, -12],\r\n\t\\att, 0.01,\r\n\t\\rel, 0.2,\r\n\t\\amp, 0.4,\r\n\t\\lofreq, 100,\r\n\t\\hifreq, 1000\r\n);\r\n\r\n~lowbuild = Pbind(\r\n\t\\instrument, \"lowbuild\",\r\n\t\\sinfreq, Pseq([100,90, 80, 70, 60 ], 1),\r\n\t\\dur, Pseq([2, 1, 0.5, 0.25, 0.15],inf),\r\n\t\\amp, 0.2,\r\n\t\\rel, 2,\r\n\t\\glissf, Pseq([0.5], inf)\r\n);\r\n\r\n~lowbuild2 = Pbind(\r\n\t\\instrument, \"lowbuild\",\r\n\t\\sinfreq, Pwhite(100, 200),\r\n\t\\dur, Prand([0.1, Rest(0.1), 0.3, 0.2],20),\r\n\t\\amp, 0.2,\r\n\t\\rel, 2,\r\n\t\\glissf, Pseq([4], inf)\r\n);\r\n\r\n~lowbuild3 = Pbind(\r\n\t\\instrument, \"lowbuild\",\r\n\t\\sinfreq, Pwhite(200, 400),\r\n\t\\dur, Prand([0.1, Rest(0.1), 0.3, Rest(0.2)],20),\r\n\t\\amp, 0.2,\r\n\t\\rel, 2,\r\n\t\\glissf, Pseq([0.2], inf)\r\n);\r\n\r\n~kanye2 = Pbind(\r\n    \\instrument, \"sampler\",\r\n\t\\rate, Pseq([1.2], inf), // notice this one ENDS after 4 cycles\r\n\t\\amp, Pseq([1, 1, 0.6, 0.6], 4),\r\n\t\\startPos, Pseq([0.4, 0.2, 0.3, 0.8],4),\r\n    \\attack, 0.01,\r\n\t\\release,Pseq([ 0.5, 1, 1, 1], inf),\r\n    \\buffer, ~kanye, // which buffer to play from\r\n\t\\dur,  Pseq([0.5, Rest(0.25), 1, 1], inf)\r\n);\r\n\r\n~hihat3 = Pbind(\r\n\t\\instrument, \"hihat\",\r\n\t\\dur, Pseq([0.0833333333], inf),\r\n\t\\att, 0.02,\r\n\t\\rel, Pseq([0.2, 0.4, 0.1, 0.15], inf),\r\n\t\\ffreq, Pwhite(700, 18000),\r\n\t\\pan, Pwhite(-1, 1),\r\n\t\\amp, 0.1 * Pwhite(0.1, 1.8)\r\n);\r\n\r\n~fight2 = Pbind(\r\n    \\instrument, \"sampler\",\r\n\t\\rate, Pseq([3], inf), // notice this one ENDS after 4 cycles\r\n\t\\amp, Pseq([1, 1, 0.6, 0.6], 4),\r\n\t\\startPos, Pseq([0.9, 0.2, 0.25, 0.7],4),\r\n    \\attack, 0.01,\r\n\t\\release,Pseq([ 2, 1, 1, 1], inf),\r\n    \\buffer, ~fight, // which buffer to play from\r\n\t\\dur,  Pseq([2, Rest(0.25), 1, 1], inf)\r\n);\r\n\r\n)\r\n\r\n // end of Pbind definitions\r\n\r\n\r\n\r\n\r\n\r\n// ============\r\n// Quick test\r\n// ============\r\n\r\n~hihat1.play;\r\n~snare1.play;\r\n~kick1.play;\r\n~bass1.play;\r\n~pulse.play;\r\n~fightspeech.play;\r\n~speech1.play;\r\n~speech2.play;\r\n~up.play;\r\n~hihat2.play;\r\n~hihat3.play;\r\n\r\n\r\n// =====================\r\n// Sequencing & playing\r\n// using Pspawner\r\n// =====================\r\n\r\n\r\n\r\n\r\n(\r\nPspawner({ arg maestro;\r\n\r\n\t\"start\".postln;\r\n\t~drumbeat1 = maestro.par(Ppar([ ~kick1, ~hihat1]));\r\n\tmaestro.wait(4);\r\n\t~drumbeat12 = maestro.par(Ppar([~pulse, ~snare1]));\r\n    maestro.par(~fightspeech);\r\n\tmaestro.seq(~speech1);\r\n\tmaestro.seq(~speech2);\r\n\tmaestro.suspend(Ppar([~fightspeech, ~drumbeat1]));\r\n\tmaestro.wait(2);\r\n\t~drumbeat2 = maestro.par(Ppar([~kick2, ~snare2, ~hihat2]));\r\n\tmaestro.seq(~kanye1);\r\n\tmaestro.wait(4);\r\n\tmaestro.seq(Ppar([~up, ~down]));\r\n\tmaestro.seq(~up);\r\n\tmaestro.seq(Ppar([~up, ~down]));\r\n\tmaestro.seq(~down);\r\n\tmaestro.seq(Ppar([~up, ~down]));\r\n\tmaestro.seq(~up);\r\n\tmaestro.seq(Ppar([~up, ~down]));\r\n\tmaestro.seq(~down);\r\n\tmaestro.seq(Ppar([~up2, ~down2]));\r\n\tmaestro.seq(~up2);\r\n\tmaestro.seq(Ppar([~up2, ~down2]));\r\n\tmaestro.seq(~down2);\r\n\tmaestro.suspend(~drumplayer2);\r\n\tmaestro.par(Ppar([~hihat3, ~snare2, ~kick2, ~fight2]));\r\n\tmaestro.seq(~lowbuild);\r\n\tmaestro.seq(~lowbuild2);\r\n\tmaestro.seq(~lowbuild3);\r\n\tmaestro.seq(~kanye1);\r\n\tmaestro.seq(Ppar([~speech1, ~kanye2]));\r\n\tmaestro.seq(~speech2);\r\n\t\"end\".postln;\r\n    maestro.suspendAll;\r\n\r\n}).play\r\n)\r\n\r\ns.record;\r\ns.stopRecording;",
   "labels" : []
}
