{
   "description" : "It is the first short composition, that I fully implemented in SuperCollider, it utilizes traditional synthesis techniques and feedback, exploring score-based composition approaches and variability through random parameters.",
   "ancestor_list" : [],
   "author" : "iakamuri",
   "name" : "Far Enough",
   "id" : "1-5hW",
   "is_private" : null,
   "code" : "(\r\n\r\ns.waitForBoot({\r\n\r\n\tSynthDef(\\farEnough, {\r\n\t\targ pitch, freq=70, addFreq=17, attack=1, release = 12;\r\n\t\tvar sig, sig1, saws, env, shapeEnv, local, local2;\r\n\t\tsig =\r\n\t\tMix.new(\r\n\t\t\tArray.fill(8,\r\n\t\t\t\t{SinOsc.ar(freq + addFreq.rand, 0.95.rand, 0.03)}));\r\n\r\n\t\tenv = EnvGen.kr(\r\n\t\t\tEnv.perc(attack, release ),\r\n\t\t\tdoneAction:2);\r\n\t\tsig1 = sig + (sig *\r\n\t\t\tMix.new(\r\n\t\t\t\tArray.fill(8,\r\n\t\t\t\t\t{SinOsc.ar(0.02, 0.7.rand, LFNoise1.kr(0.02, 0.08))})));\r\n\r\n\t\tsig = sig * env;\r\n\t\tsig1 = sig1 * env;\r\n\r\n\t\tsig = PitchShift.ar(sig, 0.1, SinOsc.kr(pitch.rrand(0.1, 0.2), 3.2.rand, 0.9, 3));\r\n\t\tsig1 = PitchShift.ar(sig1, 0.1, SinOsc.kr(pitch.rrand(0.1, 9.2), 0, 0.9, 3));\r\n\r\n\t\tsaws = Mix.new(\r\n\t\t\tArray.fill(8,\r\n\t\t\t\t{LFSaw.ar(\\sawFreq.ir(4000) + addFreq.rand, 0.9.rand, 0.02)}));\r\n\t\tshapeEnv = EnvGen.kr(Env([0.1, 0.02, 0.8, 0.0], [1, 5, 3 , 2]));\r\n\r\n\t\tsaws = saws * shapeEnv;\r\n\t\tsaws = saws * env;\r\n\r\n\t\tlocal = LocalIn.ar(2) + [sig+sig1, sig1+sig];\r\n\t\tlocal = DelayN.ar(local, 0.8, [0.3, 0.33.rand]);\r\n\t\tlocal2 = LocalIn.ar(2) + [saws, saws];\r\n\t\tlocal2 = DelayN.ar(local2, 0.8, [0.02, 0.02.rand]);\r\n\t\tlocal = local + local2;\r\n\r\n\t\tlocal = Compander.ar(\r\n\t\t\tlocal, local,\r\n\t\t\t0.2, slopeBelow: 1.3,\r\n\t\t\tslopeAbove: 0.1,\r\n\t\t\tclampTime:0.1,\r\n\t\t\trelaxTime:0.01);\r\n\t\tlocal = local.tanh;\r\n\t\tlocal = HPF.ar(local, 70);\r\n\t\t//local = BRF.ar(local, 260);\r\n\t\tLocalOut.ar(local * 0.8);\r\n\t\tOut.ar(0, local);\r\n\r\n\t}).add;\r\n\r\n\r\n\r\n\r\n\tSynthDef(\\impul, {\r\n\t\targ freq = 1000;\r\n\t\tvar sig, sig1, env;\r\n\t\tsig = Pan2.ar(\r\n\t\t\tMix.ar(\r\n\t\t\t\tArray.fill(8,\r\n\t\t\t\t\t{Impulse.ar(freq + 130.rand, 0.7.rand,\r\n\t\t\t\t\t\tLFNoise1.kr(20, 0.2.rand))})), 0);\r\n\t\t4.do({ sig = AllpassN.ar(sig, 0.050, [0.050.rand, 0.050.rand], 1) });\r\n\t\tsig1 = sig * LFNoise1.ar(23, Dust2.kr(20));\r\n\t\t4.do({ sig1 = AllpassN.ar(sig, 0.050, [0.050.rand, 0.050.rand], 1) });\r\n\t\tenv = EnvGen.kr(Env.perc(5, 20), doneAction:2);\r\n\t\tsig = (sig  + sig1)*env;\r\n\r\n\r\n\t\tOut.ar(0, sig);\r\n\t}).add;\r\n\r\n\r\n\r\n\r\n\tSynthDef(\\f, {\r\n\t\targ pitch, addFreq=200;\r\n\t\tvar sig, sig1, env, local;\r\n\t\tsig =\r\n\t\tMix.new(Array.fill(8,\r\n\t\t\t{SinOsc.ar(\\freq.ir(300) + addFreq.rand, 0.45.rand, 0.02)}));\r\n\r\n\t\tenv = EnvGen.kr(\r\n\t\t\tEnv.perc(\r\n\t\t\t\t\\attack.ir(0.1),\r\n\t\t\t\t\\release.ir(10)),\r\n\t\t\tdoneAction:2);\r\n\r\n\t\tsig1 = sig + (sig * SinOsc.ar(30, 0.7.rand));\r\n\r\n\t\tsig1 = sig1 * env;\r\n\t\tsig = sig * env;\r\n\t\tsig = PitchShift.ar(sig, 0.1, SinOsc.kr(pitch.rrand(0.1, 3.2), 0, 0.9, 3));\r\n\r\n\t\tlocal = LocalIn.ar(2) + [sig+sig1, sig1+sig];\r\n\t\tlocal = DelayN.ar(local, 0.8, [0.3, 0.33.rand]);\r\n\t\tLocalOut.ar(local * 0.8);\r\n\t\tOut.ar(0, local);\r\n\t}).add;\r\n\r\n\r\n\tSynthDef(\\bur, {\r\n\t\targ freq=232, gate=10, dauer = 20, amp=1;\r\n\t\tvar sig, env, lastEnv;\r\n\r\n\t\tsig = SinOsc.ar(freq);\r\n\t\tenv = EnvGen.kr(Env.perc, Impulse.kr(gate), doneAction:2);\r\n\r\n\t\tsig = sig * env;\r\n\t\tsig = Compander.ar(sig, sig, 0.2, 4.3, clampTime:0.1, relaxTime:0.001);\r\n\t\tlastEnv = EnvGen.kr(Env([0, 1, 1, 0], [0.01, dauer, 3, 0.02]), doneAction:2);\r\n\t\tsig = sig * lastEnv;\r\n\t\tsig = sig * amp;\r\n\t\tOut.ar(0, sig!2);\r\n\t}).add;\r\n\r\n\r\n\ts.sync;\r\n\r\n\r\n\r\n\r\n\r\n\ts.record(\"home\", 0, 2); //RECORD\r\n\r\n\tfork{\r\n\t\tfor(1, 100000){arg i;\r\n\t\t\t0.01.wait;\r\n\t\t\ti = i/100;\r\n\r\n\t\t\ti.postln;\r\n\r\n\t\t\tif(i ==1){Synth(\\farEnough, [\\addFreq, 4,\\attack, 4, \\release, 10])};\r\n\t\t\tif(i ==7){\r\n\t\t\t\tSynth(\\farEnough, [\\addFreq, 21, \\release, 13]);\r\n\t\t\t\tSynth(\\farEnough, [\\addFreq, 20,\\release, 10]);\r\n\t\t\t};\r\n\r\n\t\t\tif(i == 11){Synth(\\farEnough, [\\addFreq, 38,\\release, 10])};\r\n\t\t\tif(i == 17.77){Synth(\\farEnough, [\\addFreq, 43,\\release, 16])};\r\n\t\t\tif(i == 24){Synth(\\farEnough, [\\addFreq, 403,\\attack, 6, \\release, 16])};\r\n\t\t\tif(i == 26.2){Synth(\\farEnough, [\\addFreq, 803,\\release, 9])};\r\n\t\t\tif(i == 29.6){Synth(\\farEnough, [\\addFreq, 2803,\\release, 15])};\r\n\r\n\t\t\tif(i == 29.9){Synth(\\impul)};\r\n\t\t\tif(i == 36.9){\r\n\t\t\t\tSynth(\\impul, [\\freq, 700]);\r\n\t\t\t\tSynth(\\farEnough, [\\addFreq, 12,\\release, 12]);\r\n\t\t\t\tSynth(\\farEnough, [\\addFreq, 17,\\release, 14]);\r\n\t\t\t};\r\n\r\n\t\t\tif(i == 44.3){Synth(\\impul, [\\freq, 964])};\r\n\r\n\t\t\tif(i == 47.2){Synth(\\f)};\r\n\t\t\tif(i == 52){Synth(\\farEnough, [\\addFreq, 2400,\\release, 20])};\r\n\t\t\tif(i == 61.3){\r\n\t\t\t\tSynth(\\impul, [\\freq, 2904]);\r\n\t\t\t\tSynth(\\farEnough, [\\addFreq, 240,\\release, 20]);\r\n\r\n\t\t\t};\r\n\r\n\t\t\tif(i == 102.3){Synth(\\f,\r\n\t\t\t\t[\\freq, 400 + 500.rand,\r\n\t\t\t\t\t\\attack, 6,\r\n\t\t\t\t\t\\release, 20\r\n\t\t\t]);\r\n\t\t\t};\r\n\r\n\t\t\tif(i ==143){Synth(\\farEnough, [\r\n\t\t\t\t\\addFreq, 2.1,\r\n\t\t\t\t\\attack, 14,\r\n\t\t\t\t\\release, 30]\r\n\t\t\t)};\r\n\r\n\r\n\r\n\t\t};\r\n\r\n\r\n\t};\r\n\r\n\t//another routine\r\n\r\n\tfork{\r\n\t\t\"hello\".postln;\r\n\t\t62.wait;         ///////////after 62 SECs\r\n\t\t2.do({\r\n\t\t\tSynth(\\f, [\r\n\t\t\t\t\\freq, 30 + 5.rand,\r\n\t\t\t\t\\addFreq, 3000.rand,\r\n\t\t\t\t\\attack, 14,\r\n\t\t\t\t\\release, 30\r\n\t\t\t]);\r\n\t\t\t10.wait;\r\n\t\t});\r\n\t\t10.wait;\r\n\t\t\"click\".postc();\r\n\r\n\r\n\t\t4.do({Synth(\\bur, [\r\n\t\t\t\\freq, 230 + 30.rand,\r\n\t\t\t\\gate, [11, 2, 5, 9].choose,\r\n\t\t]);\r\n\t\t});\r\n\t\t11.wait;\r\n\r\n\t\tSynth(\\f);\r\n\t\t4.wait;\r\n\r\n\t\tSynth(\\f,\r\n\t\t\t[\\freq, 400 + 50.rand,\r\n\t\t\t\t\\attack, 6,\r\n\t\t\t\t\\release, 20\r\n\t\t\t]\r\n\t\t);\r\n\r\n\t\t0.3.wait;\r\n\r\n\r\n\r\n\t\t3.do({Synth(\\bur, [\r\n\t\t\t\\freq, 230 + 30.rand,\r\n\t\t\t\\gate, [11, 2, 9].choose,\r\n\t\t\t\\dauer, 33,\r\n\t\t\t\\amp, [0.1, 0.8, 0.03].choose,\r\n\t\t]);\r\n\t\t});\r\n\r\n\t\t14.wait;\r\n\r\n\t\t2.do({Synth(\\bur, [\r\n\t\t\t\\freq, 230 + 300.rand,\r\n\t\t\t\\gate, [3, 5].choose,\r\n\t\t\t\\dauer, 13,\r\n\t\t\t\\amp, [0.1, 0.8, 0.03].choose,\r\n\t\t]);\r\n\t\t});\r\n\r\n\r\n\r\n\t};\r\n\r\n\r\n\t113.wait; //113 seconds later\r\n\r\n\tSynth(\\f,\r\n\t\t\t[\\freq, 400 + 50.rand,\r\n\t\t\t\t\\attack, 16,\r\n\t\t\t\t\\release, 23\r\n\t\t\t]\r\n\t\t);\r\n\r\n\tfork{\r\n\t\tp=[\r\n\t\t\tPbind(\\instrument, \\bur,\r\n\t\t\t\t\\freq, 200 + 30.rand,\r\n\t\t\t\t\\dur, 0.09.rand,\r\n\t\t\t\t\\amp, Pfunc({[0.04, 0.6].choose}),\r\n\t\t\t\t\\dauer, 12\r\n\t\t\t).play,\r\n\r\n\t\t\t5.3.wait;\r\n\r\n\t\t\tPbind(\\instrument, \\bur,\r\n\t\t\t\t\\dur, 0.09,\r\n\t\t\t\t\\amp, Pfunc({[0.1, 0.6].choose}),\r\n\t\t\t\t\\dauer, 16\r\n\t\t\t).play,\r\n\r\n\t\t\tPbind(\\instrument, \\bur,\r\n\t\t\t\t\\dur, 0.1,\r\n\t\t\t\t\\amp, Pfunc({[0.04, 0.6].choose}),\r\n\t\t\t\t\\dauer, 16\r\n\t\t\t).play,\r\n\r\n\t\t];\r\n\r\n\t\t19.wait;\r\n\t\tp[0].stop;\r\n\t\t0.2.wait;\r\n\t\tp[1].stop;\r\n\t\tp[2].stop;\r\n\r\n\r\n\r\n\t};\r\n\r\n\r\n\ts.sync;\r\n});\r\n)",
   "labels" : [
      "composition",
      "score",
      "miniature"
   ]
}
