{
   "description" : "Soundscape inspired partly by the festive season of Ganesh Chaturthi but mostly by homesickness.\r\n\r\n(Melody: Imagine Dragon's \"Demons\")\r\n\r\nSoundCloud: https://soundcloud.com/tanya-sonker/musc-115-final-home/s-wYqGN\r\nSamples: https://drive.google.com/drive/folders/1l6YHKmooAtkYTsJgvGV0nQZFeAg8CHiv?usp=sharing",
   "ancestor_list" : [],
   "name" : "\"Home\" - MUSC 115 Final",
   "author" : "tsonker",
   "code" : "/*\r\n Note:\r\n   1) download samples and change path\r\n   2) run blocks in order: \"samples\", \"synthdefs\", \"pbinds\", \"sequence\"\r\n   3) preferably kill/reboot server and then run to avoid distortion\r\n*/\r\n\r\n\r\n/////////////////\r\n///  SAMPLES ///\r\n///////////////\r\n\r\n(\r\nb = Buffer.readChannel(server: s, path: \"/Users/tanyasonker/Downloads/Tabla.wav\", channels: [0]);\r\nc = Buffer.readChannel(server: s, path: \"/Users/tanyasonker/Downloads/good-morning-RJ-voiceover.wav\", channels: [0]);\r\nd = Buffer.readChannel(server: s, path: \"/Users/tanyasonker/Downloads/Tabla2.wav\", channels: [0]);\r\ne = Buffer.readChannel(server: s, path: \"/Users/tanyasonker/Downloads/sigh.wav\", channels: [0]);\r\n)\r\n\r\n/////////////////\r\n/// SYNTHDEFS ///\r\n/////////////////\r\n(\r\nSynthDef(\"grain-asr\", {arg buffer, rate = 1, startPos = 0, gate = 1, att = 0.01, rel = 0.1, amp = 1, pan = 0;\r\n\tvar env, snd;\r\n\tenv = Env.asr(att, amp, rel).kr(gate: gate, doneAction: 2);\r\n\tsnd = PlayBuf.ar(1, buffer, rate: rate, startPos: startPos * BufSamples.kr(buffer));\r\n\tsnd = snd * env;\r\n\tOut.ar(0, Pan2.ar(snd, pan));\r\n}).add;\r\n\r\nSynthDef(\"fm2_a\", {arg freq = 440, modindex = 10, amp = 0.1, pos = 0, gate = 1, att = 0.01, rel = 0.3;\r\n\tvar carrier, modulator, freqdev, env, modfreq;\r\n\tmodindex = Line.kr(modindex, 1, att);\r\n\tmodfreq = freq / 2;\r\n\tfreqdev = modfreq * modindex;\r\n\tmodulator = Pulse.ar(freq: modfreq, mul: freqdev);\r\n\tcarrier = SinOsc.ar(freq: [freq + modulator, freq * 1.011 + modulator]);\r\n\tcarrier = carrier + SinOsc.ar(freq: [freq + modulator, freq * 1.011 + modulator] * 1/2);\r\n\tenv = Env.asr(\r\n\t\tattackTime: att,\r\n\t\tsustainLevel: amp,\r\n\t\treleaseTime: rel\r\n\t).kr(doneAction: 2, gate: gate);\r\n\tcarrier = carrier + FreeVerb.ar(in: carrier, mix: 0.33, room: 0.75, damp: 0.25, mul: 1, add: 0);\r\n\tcarrier = Pan2.ar(in: carrier, pos: pos, level: env);\r\n\tOut.ar(0, carrier * amp);\r\n}).add;\r\n\r\n//plugin: MdaPiano\r\nSynthDef(\"chords1\", { |out=0, freq=440, gate=1, amp=0.5, att=0.1, rel=0.01|\r\n\tvar env = Env.adsr(\r\n\t\tattackTime: 0.01,\r\n\t\tdecayTime: att,\r\n\t\treleaseTime: rel).kr(doneAction: 2);\r\n\tvar snd = MdaPiano.ar(freq: [freq, freq], gate: gate, release: 0, tune: 0.9, stereo: 0.3, sustain: 0, mul: env * 1/2);\r\n    DetectSilence.ar(snd, 0.01);\r\n    Out.ar(out, snd * 0.5);\r\n}).add;\r\n\r\nSynthDef(\"chords2\", { |out=0, freq=440, gate=1, amp=0.5, att=0.1, rel=0.01|\r\n\tvar env = Env.adsr(\r\n\t\tattackTime: 0.01,\r\n\t\tdecayTime: att,\r\n\t\treleaseTime: rel).kr(doneAction: 2);\r\n\tvar snd = MdaPiano.ar(freq: [freq, freq], gate: gate, release: 0, tune: 0.7, stereo: 0.3, sustain: 0, mul: env * amp);\r\n    DetectSilence.ar(snd, 0.01);\r\n    Out.ar(out, snd * amp);\r\n}).add;\r\n\r\n//drumkit adapted from: http://sccode.org/1-54H\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\r\nSynthDef(\"am1_b\", {arg freq = 440, modfreq = 2, amp = 0.2, att = 0.01, rel = 3, out = 0, pan = 0;\r\n    var carrier, modulator, env;\r\n    env = Env.perc(\r\n        attackTime: att,\r\n        releaseTime: rel,\r\n        level: amp\r\n    ).kr(2);\r\n    modulator = LFSaw.ar(modfreq).range(0, 1);\r\n\tcarrier = LFTri.ar(freq: [freq * 0.25, freq * 0.15], mul: env * modulator * 10);\r\n\tcarrier = Pan2.ar(in: carrier, pos: pan);\r\n\tOut.ar(out, carrier);\r\n}).add;\r\n\r\nSynthDef(\"am1_a\", {arg freq = 440, modfreq = 2, amp = 0.2, att = 0.01, rel = 3, out = 0, pan = 0;\r\n    var carrier, modulator, env;\r\n    env = Env.perc(\r\n        attackTime: att,\r\n        releaseTime: rel,\r\n        level: amp\r\n    ).kr(2);\r\n    modulator = SinOsc.ar(modfreq).range(0, 1);\r\n\tcarrier = SinOsc.ar(freq: [freq * 1.15, freq * 0.35], mul: env * modulator * 10);\r\n\tcarrier = Pan2.ar(in: carrier, pos: pan);\r\n\tOut.ar(out, carrier * amp);\r\n}).add;\r\n\r\n\r\nSynthDef(\"waves\", { arg dur = 1, amp = 0.5;\r\n\tvar env = Env.pairs([[0,0], [0.4, 1], [1, 0.2], [1.1, 0.5], [1.5, 0.2], [2, 0.5], [2.4, 0.7], [3.5, 0], [4, 1], [4.5, 0.7], [5, 0.8],[5.5, 0.3], [6, 0.5], [9, 0]], \\lin);\r\n\tvar snd = Splay.ar(PinkNoise.ar([440, 442], mul: env.kr(doneAction: 2) * amp));\r\n\tOut.ar(0, snd);\r\n}).add;\r\n)\r\n\r\n\r\n/////////////////\r\n///  PBINDS  ///\r\n/////////////////\r\n\r\n(\r\n\r\n~bass = Pbind(\r\n\t\\instrument, \"fm2_a\",\r\n\t\\midinote, Pseq([\r\n\t\t[39, 46],\r\n\t\t[34, 41],\r\n\t\t[36, 43],\r\n\t\t[32, 39],\r\n\t\t[39, 46],\r\n\t\t[34, 41],\r\n\t\t[36, 43],\r\n\t\t[32, 39],\r\n\t\t39,\r\n\t\t46,\r\n\t\t34,\r\n\t\t41,\r\n\t\t36,\r\n\t\t43,\r\n\t\t32,\r\n\t\t39,\r\n\t\t39,\r\n\t\t46,\r\n\t\t34\r\n\t], 1),\r\n\t\\dur, Pseq([\r\n\t\tPn(Pseq([1.5, 2, 2, 2]), 2),\r\n\t\tPn(2, 26)] * 1.5),\r\n\t\\ctranspose, 12,\r\n\t\\att, 0.01,\r\n\t\\rel, 0.01,\r\n\t\\amp, 0.1\r\n);\r\n\r\n~chords = Pbind(\r\n\t\\instrument, \"chords2\",\r\n\t\\midinote,Pseq([\r\n\t\tPn(Pseq([63, 63, 70, 67, 65]), 3),\r\n\t\t72, 67, 65, 63, 63, 68, 68, 68,\r\n\t\tPn(Pseq([63, 63, 70, 67, 65]), 2),\r\n\t\t72, 67, 65, 63, 63, 68, 68, 68,\r\n\t\tPn(70, 4),\r\n\t\t67,\r\n\t\tPn(70, 4),\r\n\t\t75, 74, 72,\r\n\t\tPn(67, 5),\r\n\t\tPn(68, 5),\r\n\t\tPn(67, 2),\r\n\t\tPn(75, 5),\r\n\t\tPn(74, 5),\r\n\t\t72,\r\n\t\tPn(67, 5),\r\n\t\tPn(68, 5),\r\n\t\t67, 70, 63, 62,\r\n\t\tPn(67, 2),\r\n\t\t70,\r\n\t\t62, 60,\r\n\t\tPn(67, 5),\r\n\t\tPn(68, 5),\r\n\t\tPn(67, 4),\r\n\t\t70, 63, 62,\r\n\t\tPn(67, 2), 70, 62, 60,\r\n\t\tPn(67, 5),\r\n\t\tPn(68, 5),\r\n\t\tPn(63, 2)\r\n\t]),\r\n\t\\dur, Pseq([\r\n\t\tPn(Pseq([0.5, 0.5, 2, 1, 0.5]), 3),\r\n\t\t1.5, 1.5, Pn(0.5, 3), Pn(1, 3),\r\n\t\tPn(Pseq([0.5, 0.5, 2, 1, 0.5]), 2),\r\n\t\t1.5, 1.5, Pn(0.5, 3), Pn(1, 3),\r\n\t\tPn(1/2, 3), 1,\r\n\t\t1/2,\r\n\t\t1,\r\n\t\tPn(1/2, 3),\r\n\t\tPn(1/2, 2), 1,\r\n\t\tPn(1/2, 3), Pn(1, 2),\r\n\t\t1, Pn(1/2, 3), 1,\r\n\t\tPn(1, 2),\r\n\t\tPn(1/2, 3), Pn(1, 2),\r\n\t\t1, Pn(1/2, 3), Pn(1, 2),\r\n\t\t1,\r\n\t\tPn(1/2, 3), Pn(1, 2),\r\n\t\tPn(1/2, 3), Pn(1, 2),\r\n\t\tPn(1/2, 3), 1,\r\n\t\tPn(1/2, 1),\r\n\t\t1,\r\n\t\t1/2, 1,\r\n\t\tPn(1/2, 3), Pn(1, 2),\r\n\t\t1, Pn(1/2, 3), 1,\r\n\t\t1, 2, Pn(1/2, 2),\r\n\t\tPn(1/2, 2), 2,\r\n\t\tPn(1/2, 5),\r\n\t\tPn(1/2, 3), Pn(1, 2),\r\n\t\t1, Pn(1/2, 4),\r\n\t\t1/2, 4\r\n\t\t] * 0.6),\r\n\t\\ctranspose, 12,\r\n\t\\att, 0.01,\r\n\t\\rel, 0.1,\r\n\t\\amp, 0.3\r\n);\r\n\r\n~snare = Pbind(\r\n\t\\instrument, \"snare\",\r\n\t\\dur, Pseq([Rest(1), 1/2, Rest(1.7), 1/2], 7),\r\n\t\\att, 0.01,\r\n\t\\rel, 0.1,\r\n\t\\sinfreq, 180,\r\n\t\\ffreq, 3000,\r\n\t\\amp, 0.2\r\n);\r\n\r\n~kick = Pbind(\r\n\t\\instrument, \"kick\",\r\n\t\\dur, Pseq([1/2, 1/2, Rest(1/2), 1, 1/2, Rest(0.7)], 7),\r\n\t\\att, 0.01,\r\n\t\\rel, 0.22,\r\n\t\\sinfreq, 120,\r\n\t\\glissf, 0.5,\r\n\t\\amp, 0.6,\r\n);\r\n\r\n~tabla1 = Pbind(\r\n\t\\instrument, \"grain-asr\",\r\n\t\\buffer, b,\r\n\t\\startPos, 0,\r\n\t\\dur, 4,\r\n\t\\rate, Pn(1, 1),\r\n\t\\amp, 0.7,\r\n);\r\n\r\n~tabla2 = Pbind(\r\n\t\\instrument, \"grain-asr\",\r\n\t\\buffer, d,\r\n\t\\startPos, 0,\r\n\t\\dur, 3.5,\r\n\t\\rate, Pn(1, 1),\r\n\t\\amp, 0.7,\r\n);\r\n\r\n~radio = Pbind(\r\n\t\\instrument, \"grain-asr\",\r\n\t\\buffer, c,\r\n\t\\startPos, 0,\r\n\t\\dur, 6,\r\n\t\\rate, Pn(1, 1),\r\n\t\\amp, 0.1,\r\n);\r\n\r\n\r\n~temple = Pbind(\r\n\t\\instrument, \"grain-asr\",\r\n\t\\buffer, b,\r\n\t\\startPos, Pwhite(0.10, 0.15),\r\n\t\\dur, 1/2,\r\n\t\\att, 0.31,\r\n\t\\rel, 0.5,\r\n\t\\rate, Pseq([1, 5, 3, 3.3], 3),\r\n\t\\amp, Pwhite(0.02, 0.95),\r\n\t\\pan, Pwhite(-1.0, 1.0),\r\n\t\\legato, Pn(Pgeom(0.1, 1.05, 40))\r\n);\r\n\r\n~alarm1 = Pbind(\r\n    \\instrument, \"am1_b\",\r\n\t\\freq, Pwhite(700, 705),\r\n\t\\dur, Pseq([Pn(0.1, 5), 0.2], 4),\r\n    \\amp, Pwhite(0.15, 0.2) * 0.2,\r\n    \\att, 0.01,\r\n    \\rel, 0.1,\r\n\t\\modfreq, Pwhite(10, 30),\r\n\t\\pos, 0\r\n);\r\n\r\n~alarm2 = Pbind(\r\n    \\instrument, \"am1_a\",\r\n\t\\freq, Pwhite(700, 705),\r\n\t\\dur, Pseq([Pn(0.12, 5), 0.2], 4),\r\n    \\amp, Pwhite(0.15, 0.2),\r\n    \\att, 0.01,\r\n    \\rel, 0.1,\r\n\t\\modfreq, Pwhite(10, 30),\r\n\t\\pos, 0\r\n);\r\n\r\n~snooze = Pbind(\r\n\t\\instrument, \"snare\",\r\n\t\\dur, Pn(1, 1),\r\n\t\\att, 0.01,\r\n\t\\rel, 0.1,\r\n\t\\sinfreq, 80,\r\n\t\\ffreq, 100,\r\n\t\\amp, 0.2\r\n);\r\n\r\n~waves = Pbind(\r\n\t\\instrument, \"waves\",\r\n\t\\dur, Pn(12, 1),\r\n\t\\amp, 0.4\r\n);\r\n\r\n~sigh = Pbind(\r\n\t\\instrument, \"grain-asr\",\r\n\t\\buffer, e,\r\n\t\\startPos, 0.1,\r\n\t\\dur, 3,\r\n\t\\rate, Pn(1, 1),\r\n\t\\amp, 0.1,\r\n);\r\n)\r\n\r\n\r\n/////////////////\r\n/// SEQUENCE ///\r\n/////////////////\r\n(\r\nt = TempoClock(60/60);\r\ns = TempoClock(94/60);\r\n{\r\n\t~alarm1.play(t);\r\n\t3.5.wait(t);\r\n\t~snooze.play(t);\r\n\t1.wait(t);\r\n\t~temple.play(t);\r\n\t6.wait(t);\r\n\t~waves.play(t);\r\n\t8.wait(t);\r\n\t~radio.play(t);\r\n\t4.wait(t);\r\n\t~chords.play(t);\r\n\t1.25.wait(t);\r\n\t~bass.play(t);\r\n\t6.wait(t);\r\n\t~snare.play(s);\r\n\t~kick.play(s);\r\n\t17.5.wait(t);\r\n\t~tabla1.play(t);\r\n\t4.wait(t);\r\n\t~tabla2.play(t);\r\n\t4.wait(t);\r\n\t~tabla2.play(t);\r\n\t4.wait(t);\r\n\t~tabla2.play(t);\r\n\t4.wait(t);\r\n\t~tabla1.play(t);\r\n\t 3.wait(t);\r\n\t~tabla1.play(t);\r\n\t3.wait(t);\r\n\t~tabla1.play(t);\r\n\t4.wait(t);\r\n\t~tabla2.play(t);\r\n\t10.wait(t);\r\n\t~alarm2.play(t);\r\n\t4.wait(t);\r\n\t~snooze.play(t);\r\n\t1.wait(t);\r\n\t~sigh.play(t);\r\n}.fork(t);\r\n)\r\n\r\n\r\n\r\n/////////////////\r\n///  SAMPLES ///\r\n/// SOURCES ///\r\n///////////////\r\n/*\r\nTabla:\r\n1) https://www.looperman.com/loops/detail/135386/indian-tabla-68-another-pattern-68bpm-trap-tabla-loop\r\n2) https://www.looperman.com/loops/detail/137303/tabla-pattern-68bpm-trap-tabla-loop\r\n\r\nRJ Voice over:\r\nhttps://soundcloud.com/user808720009/lage-raho-munna-bhai-good\r\n\r\nSigh:\r\nhttp://soundbible.com/132-Female-Sigh.html\r\n*/",
   "is_private" : null,
   "id" : "1-5b9",
   "labels" : [
      "fm",
      "piano",
      "granular sampling",
      "musc115",
      "tabla"
   ]
}
