{
   "name" : "little",
   "author" : "fatherjason",
   "ancestor_list" : [],
   "description" : "I'm gearing up to do a big project soon; so, this is a little etude—if you will—in preparation.  I've been studying Eli Fieldsteel's tutorials for years, and have been studying Nathan Ho's code recently.  So shoutout to those guys for making Supercollider accessible to an amateur like me.",
   "labels" : [
      "glitch",
      "code",
      "eighties bass"
   ],
   "id" : "1-5ib",
   "is_private" : null,
   "code" : "s.boot;\r\n\r\n(\r\ns.newBusAllocators;\r\n~vbus = Bus.audio(s, 2);\r\ns.freeAll;\r\n)\r\n(\r\n\r\nSynthDef(\\reverb, {\r\n\tvar sig, in;\r\n\tin = \\in.ar(0);\r\n\tsig = In.ar(in, 2);\r\n\tsig = Delay2.ar(sig);\r\n\tsig = FreeVerb.ar(sig, 0.75, 0.7, 0.3);\r\n\tsig = LPF.ar(sig, \\cut.ar(2000));\r\n\tsig = LeakDC.ar(sig!2);\r\n\tOut.ar(0, sig);\r\n}).add;\r\n\r\nSynthDef(\\bass, {\r\n\tvar sig, freq, duration, cutoff, fxSend;\r\n\tfxSend = \\fxSend.ar(0);\r\n\tduration = \\duration.kr(1);\r\n\tcutoff = SinOsc.ar(XLine.ar(duration/2, duration*3, duration)).range(\\lcut.ar(100), \\hcut.ar(2000));\r\n\tfreq = \\freq.ar(440);\r\n\tsig = Saw.ar(freq * [-0.1, 0, 0.1].midiratio);\r\n\tsig = sig.sum * -7.dbamp;\r\n\tsig = MoogFF.ar(sig, cutoff);\r\n\tsig = sig * Env.perc(\\atk.kr(0.01), duration, curve: -4).ar(Done.freeSelf);\r\n\tOut.ar(\\out.ar(0), sig!2 * \\amp.ar(1));\r\n\tOut.ar(\\fx.ar(0), sig!2 * fxSend.dbamp);\r\n}).add;\r\n\r\nSynthDef(\\kick, {\r\n\tvar sig, freq;\r\n\tfreq = \\freq.ar(55);\r\n\tsig = SinOsc.ar(freq * [1, 2.1, 3.2, 4.5], Rand(0, 1), [1, 0.3, 0.2, 0.1]) * (1 + (3 * Env.perc(0, 1, curve: -8).ar));\r\n\tsig = sig * Env.perc(0.001, [0.51, 0.3, 0.2, 0.1], curve: 4).ar;\r\n\tsig = sig.sum;\r\n\tsig = sig * -10.dbamp;\r\n\tsig = sig + BPF.ar(Hasher.ar(Sweep.ar), 1250, 0.3, 0.3);\r\n\tsig = sig * Env.perc(0.001, 0.3, curve: -8).ar(Done.freeSelf);\r\n\tsig = Pan2.ar(sig, \\pan.ar(0));\r\n\tOut.ar(\\out.ar(0), sig * \\amp.ar(0.5));\r\n}).add;\r\n\r\nSynthDef(\\snare, {\r\n\tvar sig, freq;\r\n\tfreq = \\freq.ar(255);\r\n\tsig = SinOsc.ar(freq * [1, 2.1, 3.2, 4.5], Rand(0, 1), [0.51, 0.3, 0.2, 0.1]) * (1 + (2 * Env.perc(0, 1, curve: -8).ar));\r\n\tsig = sig * Env.perc(0, [0.51, 0.3, 0.2, 0.1], curve: 4).ar;\r\n\tsig = sig.sum;\r\n\tsig = sig * -15.dbamp;\r\n\tsig = sig + BPF.ar(Hasher.ar(Sweep.ar), 2550, 0.7);\r\n\tsig = sig + BPF.ar(Hasher.ar(Sweep.ar), 5500, 0.7);\r\n\tsig = sig * Env.perc(0.001, 0.3, curve: -8).ar(Done.freeSelf);\r\n\tsig = Pan2.ar(sig, \\pan.ar(-0.4));\r\n\tOut.ar(\\out.ar(0), sig * \\amp.ar(0.25));\r\n}).add;\r\n\r\nSynthDef(\\hat, {\r\n\tvar sig;\r\n\tsig = WhiteNoise.ar * (1 + (2 * Env.perc(0, 0.3, curve: -10).ar));\r\n\tsig = BPF.ar(sig, 8500, 0.5);\r\n\tsig = sig + BPF.ar(sig, 8500, 0.7);\r\n\tsig = sig * -10.dbamp;\r\n\tsig = sig * Env.perc(0.001, 0.3, curve: -8).ar(Done.freeSelf);\r\n\tsig = Pan2.ar(sig, {Rand(-0.5, 0.5)});\r\n\tOut.ar(\\out.ar(0), sig * \\amp.ar(0.45));\r\n}).add;\r\n)\r\n/* TEST CODE\r\nSynth(\\kick);\r\nSynth(\\snare);\r\nSynth(\\hat);\r\nSynth(\\bass, [\\freq, 36.midicps, \\atk, 0.001, \\duration, 0.1, \\amp, 0.7, \\out, 0, \\fx, 0, \\fxSend, -10]);\r\n\r\n(\r\n~test = Pbind(\\instrument, \\bass,\r\n\t\\dur, (60/140)/4,\r\n\t\\duration, 0.1,\r\n\t\\atk, 0.001,\r\n\t\\freq, (36+ Pseq([0, 10, 7, 3], 4)).midicps,\r\n\t\\amp, Pseq([0.3, 0.26, 0.25, 0.27], inf),\r\n\t\\fx, 0,\r\n\t\\fxSend, -10\r\n).play;\r\n);\r\n*/\r\n(\r\nvar s, tempo, beat, map, pattern, pattern2, root;\r\n\r\ns = Server.default;\r\ns.freeAll;\r\n\r\ns.bind{Synth(\\reverb, [\\in, ~vbus], s, \\addToTail)};\r\n\r\ntempo = 60/140;\r\nbeat = tempo/4;\r\nroot = 36;\r\nmap = Dictionary[\r\n\t$k -> \\kick,\r\n\t$s -> \\snare,\r\n\t$h -> \\hat\r\n];\r\n\r\n~bassline0 = Pbind(\\instrument, \\bass,\r\n\t\\dur, beat,\r\n\t\\duration, beat,\r\n\t\\atk, 0.001,\r\n\t\\freq, (root + Pseq([0, 10, 7, 3], 8)).midicps,\r\n\t\\amp, Pseq([0.3, 0.26, 0.25, 0.27], inf),\r\n\t\\fx, 0,\r\n\t\\fxSend, -10\r\n);\r\n\r\n~bassline1 = Pbind(\\instrument, \\bass,\r\n\t\\dur, beat,\r\n\t\\duration, beat,\r\n\t\\atk, 0.001,\r\n\t\\freq, ((root+1) + Pseq([0, 10, 7, 3], 8)).midicps,\r\n\t\\amp, Pseq([0.3, 0.26, 0.25, 0.27], inf),\r\n\t\\fx, 0,\r\n\t\\fxSend, -10\r\n);\r\n\r\n~bassline2 = Pbind(\\instrument, \\bass,\r\n\t\\dur, beat,\r\n\t\\duration, beat,\r\n\t\\atk, 0.001,\r\n\t\\freq, ((root+5) + Pseq([2, 10, 5, 3], 8)).midicps,\r\n\t\\amp, Pseq([0.3, 0.26, 0.25, 0.27], inf),\r\n\t\\fx, 0,\r\n\t\\fxSend, -10\r\n);\r\n~bassline3 = Pbind(\\instrument, \\bass,\r\n\t\\dur, beat,\r\n\t\\duration, beat,\r\n\t\\atk, 0.001,\r\n\t\\freq, ((root+6) + Pseq([0, 10, 4, 3], 8)).midicps,\r\n\t\\amp, Pseq([0.3, 0.26, 0.25, 0.27], inf),\r\n\t\\fx, 0,\r\n\t\\fxSend, -10\r\n);\r\n\r\n~mel0 = Pbind(\\instrument, \\bass,\r\n\t\\dur, beat,\r\n\t\\duration, beat,\r\n\t\\freq, ((root+36) + Prand([0, 3, 5, 7, 10], 32)).midicps,\r\n\t\\amp, Pseries(0.1, 0.01, 32),\r\n\t\\lcut, 2000,\r\n\t\\hcut, 2500,\r\n\t\\fx, ~vbus,\r\n\t\\fxSend, -15\r\n);\r\n~mel1 = Pbind(\\instrument, \\bass,\r\n\t\\dur, beat,\r\n\t\\duration, beat,\r\n\t\\freq, ((root+29) + Prand([2, 3, 5, 7, 9], 32)).midicps,\r\n\t\\amp, Pseries(0.5, -0.01, 32),\r\n\t\\lcut, 1000,\r\n\t\\hcut, 2000,\r\n\t\\fx, ~vbus,\r\n\t\\fxSend, -15\r\n);\r\n~mel2 = Pbind(\\instrument, \\bass,\r\n\t\\dur, beat,\r\n\t\\duration, beat,\r\n\t\\freq, ((root+31) + Prand([0,1, 3, 4, 6, 8, 10], 128)).midicps,\r\n\t\\amp, Pseries(0.1, 0.01, 32),\r\n\t\\lcut, 5000,\r\n\t\\hcut, 10000,\r\n\t\\fx, ~vbus,\r\n\t\\fxSend, -15\r\n);\r\npattern = \"\r\nk.k.s..s..k.s...\r\nkhkhshhshhkhshhh\r\n\";\r\n\r\npattern2 = \"\r\nkhkhsk.hhhkhs..k\r\nkhkhshhhssssssss\r\n\";\r\n\r\nRoutine({\r\n\t2.do{ |count = 0|\r\n\t\t2.do{\r\n\t\t\tif(count == 1) {\r\n\t\t\t~mel0.play;\r\n\t\t};\r\n\t\t\t~bassline0.play;\r\n\t\t\t[0, 15, 7].do{|note|\r\n\t\t\t\ts.bind{Synth(\\bass, [\r\n\t\t\t\t\t\\freq, (root + note).midicps,\r\n\t\t\t\t\t\\duration, (16*beat),\r\n\t\t\t\t\t\\atk, 0.3,\r\n\t\t\t\t\t\\out, 0,\r\n\t\t\t\t\t\\fx, ~vbus,\r\n\t\t\t\t\t\\fxsend, -5,\r\n\t\t\t\t])};\r\n\t\t\t};\r\n\t\t\tpattern.do{|character|\r\n\t\t\t\tif(character == $.){\r\n\t\t\t\t\tbeat.wait;\r\n\t\t\t\t} {\r\n\t\t\t\t\tif(map[character].notNil) {\r\n\t\t\t\t\t\ts.bind{Synth(map[character]);};\r\n\t\t\t\t\t\tbeat.wait;\r\n\t\t\t\t\t};\r\n\t\t\t\t};\r\n\t\t\t};\r\n\t\t\t~bassline1.play;\r\n\t\t\t[1, 16, 8].do{|note|\r\n\t\t\t\ts.bind{Synth(\\bass, [\r\n\t\t\t\t\t\\freq, (root + note).midicps,\r\n\t\t\t\t\t\\duration, (16*beat),\r\n\t\t\t\t\t\\out, 0,\r\n\t\t\t\t\t\\fx, ~vbus,\r\n\t\t\t\t\t\\fxsend, -1\r\n\t\t\t\t])};\r\n\t\t\t};\r\n\t\t\tpattern2.do{|character|\r\n\t\t\t\tif(character == $.){\r\n\t\t\t\t\tbeat.wait;\r\n\t\t\t\t} {\r\n\t\t\t\t\tif(map[character].notNil) {\r\n\t\t\t\t\t\ts.bind{Synth(map[character]);};\r\n\t\t\t\t\t\tbeat.wait;\r\n\t\t\t\t\t};\r\n\t\t\t\t};\r\n\t\t\t};\r\n\t\t};\r\n\t\t1.do{\r\n\t\t\tif(count == 1) {\r\n\t\t\t~mel1.play;\r\n\t\t};\r\n\t\t\t~bassline2.play;\r\n\t\t\t[0, 15, 7].do{|note|\r\n\t\t\t\ts.bind{Synth(\\bass, [\r\n\t\t\t\t\t\\freq, ((root+5) + note).midicps,\r\n\t\t\t\t\t\\duration, (16*beat),\r\n\t\t\t\t\t\\out, 0,\r\n\t\t\t\t\t\\fx, ~vbus,\r\n\t\t\t\t\t\\fxsend, 1\r\n\t\t\t\t])};\r\n\t\t\t};\r\n\t\t\tpattern.do{|character|\r\n\t\t\t\tif(character == $.){\r\n\t\t\t\t\tbeat.wait;\r\n\t\t\t\t} {\r\n\t\t\t\t\tif(map[character].notNil) {\r\n\t\t\t\t\t\ts.bind{Synth(map[character]);};\r\n\t\t\t\t\t\tbeat.wait;\r\n\t\t\t\t\t};\r\n\t\t\t\t};\r\n\t\t\t};\r\n\t\t\t~bassline3.play;\r\n\t\t\t[1, 15, 7].do{ |note|\r\n\t\t\t\ts.bind{Synth(\\bass, [\r\n\t\t\t\t\t\\freq, ((root+5) + note).midicps,\r\n\t\t\t\t\t\\duration, (16*beat),\r\n\t\t\t\t\t\\out, 0,\r\n\t\t\t\t\t\\fx, ~vbus,\r\n\t\t\t\t\t\\fxsend, 0\r\n\t\t\t\t])};\r\n\t\t\t};\r\n\t\t\tpattern2.do{|character|\r\n\t\t\t\tif(character == $.){\r\n\t\t\t\t\tbeat.wait;\r\n\t\t\t\t} {\r\n\t\t\t\t\tif(map[character].notNil) {\r\n\t\t\t\t\t\ts.bind{Synth(map[character]);};\r\n\t\t\t\t\t\tbeat.wait;\r\n\t\t\t\t\t};\r\n\t\t\t\t};\r\n\t\t\t};\r\n\t\t};\r\n\t\t1.do{\r\n\t\t\tif(count == 1) {\r\n\t\t\t\t~mel2.play;\r\n\t\t\t};\r\n\t\t\t[0, 16, 7, 10].do{ |note|\r\n\t\t\t\ts.bind{Synth(\\bass, [\r\n\t\t\t\t\t\\freq, ((root + 7) + note).midicps,\r\n\t\t\t\t\t\\atk, 0.3,\r\n\t\t\t\t\t\\duration, (64*beat),\r\n\t\t\t\t\t\\out, 0,\r\n\t\t\t\t\t\\fx, ~vbus,\r\n\t\t\t\t\t\\fxsend, -1\r\n\t\t\t\t])};\r\n\t\t\t};\r\n\t\t\tpattern.do{|character|\r\n\t\t\t\tif(character == $.){\r\n\t\t\t\t\tbeat.wait;\r\n\t\t\t\t} {\r\n\t\t\t\t\tif(map[character].notNil) {\r\n\t\t\t\t\t\ts.bind{Synth(map[character]);};\r\n\t\t\t\t\t\tbeat.wait;\r\n\t\t\t\t\t};\r\n\t\t\t\t};\r\n\t\t\t};\r\n\t\t\tpattern2.do{|character|\r\n\t\t\t\tif(character == $.){\r\n\t\t\t\t\tbeat.wait;\r\n\t\t\t\t} {\r\n\t\t\t\t\tif(map[character].notNil) {\r\n\t\t\t\t\t\ts.bind{Synth(map[character]);};\r\n\t\t\t\t\t\tbeat.wait;\r\n\t\t\t\t\t};\r\n\t\t\t\t};\r\n\t\t\t};\r\n\t\t};\r\n\t\tcount = count + 1;\r\n\t};\r\n\t//end\r\n\ts.bind{Synth(\\bass, [\r\n\t\t\\freq, root.midicps,\r\n\t\t\\duration, (64*beat),\r\n\t\t\\lcut, 250,\r\n\t\t\\hcut, 1000,\r\n\t\t\\amp, 0.5,\r\n\t\t\\out, 0,\r\n\t\t\\fx, 0\r\n\t])};\r\n\r\n\t[0, 15, 7].do{|note|\r\n\t\ts.bind{Synth(\\bass, [\r\n\t\t\t\\freq, (root+note).midicps,\r\n\t\t\t\\duration, (64*beat),\r\n\t\t\t\\out, 0,\r\n\t\t\t\\fx, ~vbus,\r\n\t\t\t\\fxsend, 2,\r\n\t\t\t\\lcut, 750,\r\n\t\t\t\\hcut, 5000,\r\n\t\t\t\\amp, 0.5\r\n\t\t])};\r\n\t};\r\n}).play;\r\n)"
}
