{
   "author" : "hwright",
   "name" : "Good Life 115granular",
   "ancestor_list" : [],
   "description" : "https://soundcloud.com/user-665612115/good-life-115granular",
   "labels" : [],
   "id" : "1-55v",
   "is_private" : null,
   "code" : "// =================================\r\n// A4 - musc-115-granular\r\n// GRANULAR SAMPLING\r\n// =================================\r\n\r\n/*\r\nThe code below is exactly what we built in class.\r\nYou will need a MONO sample.\r\n\r\n*/\r\n\r\n// make sure to boot server first\r\n\r\n// load a sound file (or two...)\r\n\r\nb = Buffer.read(s, \"/Users/harrisonwright/Desktop/Good life .wav\");\r\nc = Buffer.read(s, \"/Users/harrisonwright/Desktop/acapella good life beginning sc.wav\");\r\nd = Buffer.read(s, \"/Users/harrisonwright/Desktop/play 2nd vocals.wav\");\r\ne = Buffer.read(s, \"/Users/harrisonwright/Desktop/LSE Kick 3 copy.wav\");\r\nf = Buffer.read(s, \"/Users/harrisonwright/Desktop/good life saying.wav\");\r\ng = Buffer.read(s, \"/Users/harrisonwright/Desktop/riser.wav\");\r\nk = Buffer.read(s, \"/Users/harrisonwright/Desktop/four.wav\");\r\n\r\n// buffer handy tools:\r\ng.play;\r\n// check number of channels\r\nd.numChannels;\r\n// check duration\r\nh.duration;\r\n// check how many samples are in the sample\r\nc.numFrames;\r\n\r\n// SynthDefs\r\n(\r\nSynthDef(\"shortcuts\", {arg rate = 1, amp = 1, buffer, startPos = 0, attack = 0.02, release = 0.5, ffreq = 1000, rq = 0.1, 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: 2,\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    snd = Pan2.ar(snd, panning);\r\n    Out.ar(0, snd);\r\n}).add;\r\n\r\nSynthDef(\"play\", {arg rate = 1, amp = 1, buffer, startPos = 0, attack = 0.02, release = 0.5, panning = 0, ffreq, dur;\r\n    var snd, env;\r\n\tenv = Env.linen(attackTime: 0, sustainTime: dur, releaseTime: 0, level: amp).kr(doneAction: 2);\r\n    snd = PlayBuf.ar(\r\n        numChannels: 2,\r\n        bufnum: buffer,\r\n        rate: rate,\r\n        startPos: startPos.linlin(0, 1, 0, BufFrames.kr(buffer))\r\n    );\r\n\tsnd = snd;\r\n\tsnd = HPF.ar(snd, ffreq, env);\r\n    snd = Pan2.ar(snd, panning);\r\n    Out.ar(0, snd);\r\n}).add;\r\n\r\nSynthDef(\"granny2\", {arg rate = 1, amp = 1, buffer, startPos = 0, attack = 0.02, release = 0.5, ffreq = 1000, rq = 0.1, 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: 2,\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    snd = Pan2.ar(snd, panning);\r\n    Out.ar(0, snd);\r\n}).add;\r\n\r\nSynthDef(\"clap\", {\r\n    |out = 0, amp = 0.5, pan = 0, dur = 1|\r\n    var env1, env2, snd, noise1, noise2;\r\n\r\n    env1 = EnvGen.ar(\r\n        Env.new(\r\n            [0, 1, 0, 0.9, 0, 0.7, 0, 0.5, 0],\r\n            [0.001, 0.009, 0, 0.008, 0, 0.01, 0, 0.03],\r\n            [0, -3, 0, -3, 0, -3, 0, -4]\r\n        )\r\n    );\r\n\r\n    noise1 = WhiteNoise.ar(env1);\r\n    noise1 = HPF.ar(noise1, 600);\r\n    noise1 = LPF.ar(noise1, XLine.kr(7200, 4000, 0.03));\r\n    noise1 = BPF.ar(noise1, 1620, 3);\r\n\r\n    env2 = EnvGen.ar(Env.new([0, 1, 0], [0.02, 0.18], [0, -4]), doneAction:2);\r\n\r\n    noise2 = WhiteNoise.ar(env2);\r\n    noise2 = HPF.ar(noise2, 1000);\r\n    noise2 = LPF.ar(noise2, 7600);\r\n    noise2 = BPF.ar(noise2, 1230, 0.7, 0.7);\r\n\r\n    snd = noise1 + noise2;\r\n    snd = snd * 2;\r\n    snd = snd.softclip;\r\n\r\n    Out.ar(out, Pan2.ar(snd,pan,amp));\r\n}).add;\r\n)\r\n\r\n// Some testing Pbinds\r\n(\r\n~one = Pbind(\r\n\t\\instrument, \"play\",\r\n\t\\rate, 1,\r\n\t\\dur, 64,\r\n\t\\amp, Pseq([0.25], 1),\r\n\t\\startPos, 0,\r\n\t\\buffer, c,\r\n\t\\panning, 0,\r\n\t\\ffreq, 20,\r\n);\r\n\r\n~two = Pbind(\r\n\t\\instrument, \"play\",\r\n\t\\rate, 1,\r\n\t\\dur, 32.041666667,\r\n\t\\amp, Pseq([0.25], 1),\r\n\t\\startPos, 0,\r\n\t\\buffer, d,\r\n\t\\panning, 0,\r\n\t\\ffreq, 20,\r\n);\r\n\r\n~kick = Pbind(\r\n\t\\instrument, \"play\",\r\n\t\\rate, 1,\r\n\t\\dur, 1,\r\n\t\\amp, Pseq([0.1], 4),\r\n\t\\startPos, 0,\r\n\t\\buffer, e,\r\n\t\\panning, 0,\r\n\t\\ffreq, 20,\r\n);\r\n\r\n~good = Pbind(\r\n\t\\instrument, \"play\",\r\n\t\\rate, 1,\r\n\t\\dur, 6.0416666667,\r\n\t\\amp, Pseq([0.25], 1),\r\n\t\\startPos, 0,\r\n\t\\buffer, f,\r\n\t\\panning, 0,\r\n\t\\ffreq, 20,\r\n);\r\n\r\n~rise = Pbind(\r\n\t\\instrument, \"play\",\r\n\t\\rate, 1,\r\n\t\\dur, 6.045,\r\n\t\\amp, Pseq([0.45], 1),\r\n\t\\startPos, 0,\r\n\t\\buffer, g,\r\n\t\\panning, 0,\r\n\t\\ffreq, 2500,\r\n);\r\n\r\n~three = Pbind(\r\n    \\instrument, \"shortcuts\",\r\n\t\\rate, -1,\r\n\t\\dur, Pseq([ 5/6, 4/6, 3/6, 3/12, 3/12, 3/12, 9/12, 6/12, 5/6, 4/6, 3/6, 3/6, 3/6, 3/6, 3/6, 5/6, 4/6, 3/6, 3/12, 3/12, 3/12, 9/12, 3/6, 5/6, 4/6, 3/6, 3/6, 3/6, 3/6, 3/6], 1),\r\n\t\\amp, 8,\r\n\t\\startPos,0.5,\r\n    \\attack, 0.02,\r\n    \\release, 0.4,\r\n\t\\ffreq, Pseq([220, 220, 220, 220, 330, 440, 220, 262, 196, 196, 196, 196, 392, 220, 440, 175, 175, 175, 175, 262, 349, 175, 196, 147, 147, 131, 147, 294, 165, 330], 1),\r\n\t\\rq, 0.01,\r\n    \\buffer, b,\r\n\t\\panning, Pwhite(-0.5, 0.5)\r\n\r\n);\r\n\r\n~voc = Pbind(\r\n    \\instrument, \"granny2\",\r\n\t\\rate, Prand([2, 2, 2], inf),\r\n\t\\amp, 15,\r\n\t\\startPos, Pseq([0.25], inf),\r\n    \\attack, 0.02,\r\n    \\release, 0.4,\r\n\t\\ffreq, Pseq([165, 165, 165, 165, 165, 147, 147, 147, 147, 147, 130, 130, 130, 130, 130, 110, 110, 110, 110, 110], inf),\r\n\t\\rq, 0.01,\r\n    \\buffer, b,\r\n\t\\dur, Pseq([5/6, 4/6, 6/6, 6/6, 3/6], 4),\r\n\t\\panning, 0,\r\n);\r\n\r\n~voc2 = Pbind(\r\n    \\instrument, \"granny2\",\r\n\t\\rate, Prand([2, 2, 2], inf),\r\n\t\\amp, 30,\r\n\t\\startPos, Pseq([0.25], inf),\r\n    \\attack, 0.02,\r\n    \\release, 0.4,\r\n\t\\ffreq, 165,\r\n\t\\rq, 0.01,\r\n    \\buffer, b,\r\n\t\\dur, Pseq([5/6, 5/6, 5/6, 5/6, 5/6, 5/12, 5/12, 5/12, 5/24, 5/24, 5/24, 5/24], 1),\r\n\t\\panning, 0,\r\n);\r\n\r\n~three2 = Pbind(\r\n    \\instrument, \"shortcuts\",\r\n\t\\rate, -1,\r\n\t\\dur, Pseq([5/6, 5/6, 5/6, 5/6, 5/6, 5/12, 5/12, 5/12, 5/24, 5/24, 5/24, 5/24], 1),\r\n\t\\amp, 4,\r\n\t\\startPos, 0.5,\r\n    \\attack, 0.02,\r\n\t\\release, Pseq([0.4, 0.4, 0.4, 0.4, 0.4, 0.2, 0.2, 0.2, 0.1, 0.1, 0.1, 0.1], 1),\r\n\t\\ffreq, 220,\r\n\t\\rq, 0.01,\r\n    \\buffer, b,\r\n\t\\panning, Pwhite(-0.5, 0.5)\r\n);\r\n\r\n~clap = Pbind(\r\n\t\\instrument, \"clap\",\r\n\t\\freq, 60,\r\n\t\\dur, Pseq([ Rest(1), 2, 2, 2, 2, 2, 2, 2], 1),\r\n\t\\amp, 0.5\r\n);\r\n\r\n~clap2 = Pbind(\r\n\t\\instrument, \"clap\",\r\n\t\\freq, 60,\r\n\t\\dur, Pseq([ Rest(1), 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2], 1),\r\n\t\\amp, 0.5\r\n);\r\n\r\n~drops = Pbind(\r\n    \\instrument, \"granny2\",\r\n\t\\rate, Prand([2, 2, 2], inf),\r\n\t\\amp, 25,\r\n\t\\startPos, Pseq([0.18], inf),\r\n    \\attack, 0.02,\r\n    \\release, 0.4,\r\n\t\\ffreq, Pseq([165, 165, 165, 165, 165, 147, 147, 147, 147, 147, 130, 130, 130, 130, 130, 110, 110, 110, 110, 110], inf),\r\n\t\\rq, 0.05,\r\n    \\buffer, d,\r\n\t\\dur, Pseq([5/6, 4/6, 6/6, 6/6, 3/6], 4),\r\n\t\\panning, 0,\r\n);\r\n\r\n~drops2 = Pbind(\r\n    \\instrument, \"granny2\",\r\n\t\\rate, Prand([2, 2, 2], inf),\r\n\t\\amp, 25,\r\n\t\\startPos, Pseq([0.47], inf),\r\n    \\attack, 0.02,\r\n    \\release, 0.4,\r\n\t\\ffreq, Pseq([165, 165, 165, 165, 165, 147, 147, 147, 147, 147, 130, 130, 130, 130, 130, 110, 110, 110, 110, 110], inf),\r\n\t\\rq, 0.05,\r\n    \\buffer, d,\r\n\t\\dur, Pseq([5/6, 4/6, 6/6, 6/6, 3/6], 4),\r\n\t\\panning, 0,\r\n);\r\n\r\n~drops3 = Pbind(\r\n    \\instrument, \"granny2\",\r\n\t\\rate, Prand([ 2, 2, 1, 2, 3, 1, 1, 1, 1], inf),\r\n\t\\amp, 25,\r\n\t\\startPos, 0.47,\r\n    \\attack, 0.02,\r\n    \\release, 0.4,\r\n\t\\ffreq, Pseq([165, 165, 165, 165, 165, 147, 147, 147, 147, 147, 130, 130, 130, 130, 130, 110, 110, 110, 110, 110], inf),\r\n\t\\rq, 0.05,\r\n    \\buffer, d,\r\n\t\\dur, Pseq([5/6, 4/6, 6/6, 6/6, 3/6], 4),\r\n\t\\panning, 0,\r\n);\r\n\r\n~dropfour = Pbind(\r\n\t\\instrument, \"play\",\r\n\t\\rate, 1,\r\n\t\\dur, 2,\r\n\t\\amp, Pseq([0.1], 1),\r\n\t\\startPos, 0,\r\n\t\\buffer, k,\r\n\t\\panning, 0,\r\n\t\\ffreq, 20,\r\n);\r\n)\r\n\r\n//Test Plays\r\n~one.play(TempoClock(126/60));\r\n~two.play(TempoClock(126/60));\r\n~kick.play(TempoClock(126/60));\r\n~good.play(TempoClock(126/60));\r\n~rise.play(TempoClock(126/60));\r\n~three.play(TempoClock(126/60));\r\n~voc.play(TempoClock(126/60));\r\n~voc2.play(TempoClock(126/60));\r\n~three2.play(TempoClock(126/60));\r\n~clap2.play(TempoClock(126/60));\r\n~dropfour.play(TempoClock(126/60));\r\n\r\n\r\n// =================================\r\n// Putting stuff together with Pspawner\r\n// =================================\r\n\r\n(\r\nPspawner({ arg maestro;\r\ns.record;\r\n\tmaestro.seq(Ppar([ ~three, ~voc], 1));\r\n\tmaestro.seq(Ppar([ ~clap2, Pseq([~three], 2), Pseq([~voc], 2)], 1));\r\n\tmaestro.seq(Ppar([ ~clap2, Pseq([~three], 2), Pseq([~voc], 2), Pseq([~kick], 8)], 1));\r\n\tmaestro.seq(Ppar([~good, ~voc2, ~three2, Pseq([~kick], 1.5) ], 1));\r\n\tmaestro.seq(Ppar([ ~drops, ~clap, Pseq([~three], 1), Pseq([~voc], 1), Pseq([~kick], 4)], 1));\r\n\tmaestro.seq(Ppar([ ~drops2, ~clap, Pseq([~three], 1), Pseq([~voc], 1), Pseq([~kick], 4)], 1));\r\n\tmaestro.seq(Ppar([ ~drops3, ~clap, Pseq([~three], 1), Pseq([~voc], 1), Pseq([~kick], 4)], 1));\r\n\tmaestro.seq( Ppar([ ~three, ~voc], 1));\r\n\tmaestro.seq(~dropfour);\r\n\r\n}).play(TempoClock(126/60));\r\n)\r\ns.stopRecording;\r\ns.makeWindow;"
}
