{
   "ancestor_list" : [],
   "description" : "Each of these synths is a variation of SuperCollider code that replicates the TXH Deep Note.  A tutorial for replicating the THX Deep Note can be found here: http://www.earslap.com/article/recreating-the-thx-deep-note.html\r\n\r\nListen to the piece here: https://soundcloud.com/jonathan-coon/entropy-thx-variation",
   "name" : "Entropy - Midterm: THX Deep Note Variation (musc-115-thx)",
   "author" : "Jonathan Coon",
   "id" : "1-4WO",
   "is_private" : null,
   "code" : "/******************************************/\r\n/* Jonathan Coon                          */\r\n/* THX Deep Note Variation                */\r\n/* MUSC 115 - Experimental Sound Design   */\r\n/* 10/23/2014                             */\r\n/******************************************/\r\n\r\n// Each of these synths is a variation of SuperCollider code that replicates the TXH Deep Note\r\n// A tutorial for replicating the THX Deep Note can be found at\r\n// http://www.earslap.com/article/recreating-the-thx-deep-note.html\r\n\r\n/*********************************************************/\r\n/* ==================== ARRANGEMENT ==================== */\r\n/*********************************************************/\r\n(\r\n{\r\n\ts.record;\r\n\t1.wait;\r\n\t(\r\n\t\t~low.play;\r\n\t\t~high.play;\r\n\t);\r\n\t39.95.wait;\r\n\t~bees.play;\r\n\t20.wait;\r\n\t~buzz.play;\r\n\t32.wait;\r\n\t~trem.play;\r\n\t33.5.wait;\r\n\t(\r\n\t\t~beebot1.play;\r\n\t\t~beebot2.play;\r\n\t);\r\n\t29.wait;\r\n\t~end.play;\r\n\t30.wait;\r\n\ts.stopRecording;\r\n}.fork;\r\n)\r\n\r\n\r\n/**********************************************************/\r\n/* ==================== SYNTHESIZERS ==================== */\r\n/**********************************************************/\r\n\r\n// Low droning\r\n(\r\n~low = {\r\n\tvar numVoices, startFreqs, deviation1, endFreqs, deviation2, sweepEnv, louderBass, filterFreq, ampEnv, freqs, snd;\r\n\tnumVoices = 30;\r\n\t// starting point\r\n\tstartFreqs = Array.fill(numVoices, { rrand(10.0, 40.0) }).sort.reverse; // starting with low frequencies\r\n\tdeviation1 = startFreqs.collect({|freq| LFNoise2.kr(0.5, freq.linlin(10, 40, 0, 10))});\r\n\tstartFreqs = startFreqs + deviation1;\r\n\t// ending point\r\n\tendFreqs = ([1, 2, 4, 8, 16, 32, 64] * -36.midicps).wrapExtend(numVoices).sort; // low fundamental ending frequency and its octaves\r\n\tdeviation2 = Array.fill(numVoices, {|i| LFNoise2.kr(0.1, i/3)});\r\n\tendFreqs = endFreqs + deviation2;\r\n\t// glissando envelope\r\n\tsweepEnv = Array.fill(numVoices,{Env(\r\n\t\t[0, rrand(0.1, 0.2), 1],\r\n\t\t[rrand(10.5, 20), rrand(8.5, 9)],\r\n\t\t[rrand(2.0, 3.0), rrand(4.0, 5.0)])}).collect({|env| env.kr});\r\n\tfreqs = ((1 - sweepEnv) * startFreqs) + (sweepEnv * endFreqs);\r\n\t// filtered sawtooth waves\r\n\tsnd = BLowPass.ar(Saw.ar(freqs), freq: freqs * 20, rq: 0); // rq is 0\r\n\tfilterFreq = Env([2000, 3800, 20000], [8, 4], [2, 4]).kr;\r\n\tlouderBass = Array.fill(30, {|i| 1.01 - (1/(i+1))}); // louder bass in the beginning\r\n\tsnd = BLowPass.ar(snd, freq: filterFreq, rq: 0.5, mul: louderBass);\r\n\t// make it stereo, apply ampEnv, limiter\r\n\tampEnv = Env([0, 0.1, 1.6, 2, 0], [8, 12, 13, 20.7], [2, 2, -10]).kr(doneAction: 2);\r\n\tsnd = Splay.ar(snd.scramble, spread: 0.5, level: ampEnv);\r\n\tLimiter.ar(snd,0.2);\r\n};\r\n)\r\n\r\n// High-pitched ascension\r\n(\r\n~high = {\r\n\tvar numVoices, startFreqs, deviation1, endFreqs, deviation2, sweepEnv, louderBass, filterFreq, ampEnv, freqs, snd;\r\n\tnumVoices = 30;\r\n\t// starting point\r\n\tstartFreqs = Array.fill(numVoices, { rrand(200.0, 400.0) }).sort.reverse;\r\n\tdeviation1 = startFreqs.collect({|freq| LFNoise2.kr(0.5, freq.linlin(200, 400, 3, 90))});\r\n\tstartFreqs = startFreqs + deviation1;\r\n\t// ending point\r\n\tendFreqs = ([1, 2, 4, 8, 16, 32, 64] * 14.5.midicps).wrapExtend(numVoices).sort;\r\n\tdeviation2 = Array.fill(numVoices, {|i| LFNoise2.kr(0.1, i/3)});\r\n\tendFreqs = endFreqs + deviation2;\r\n\t// glissando envelope\r\n\tsweepEnv = Array.fill(numVoices,{Env(\r\n\t\t[0, rrand(0.1, 0.2), 1],\r\n\t\t[rrand(10.5, 20), rrand(8.5, 9)],\r\n\t\t[rrand(2.0, 3.0), rrand(4.0, 5.0)])}).collect({|env| env.kr});\r\n\tfreqs = ((1 - sweepEnv) * startFreqs) + (sweepEnv * endFreqs);\r\n\t// filtered sawtooth waves\r\n\tsnd = BLowPass.ar(Saw.ar(freqs), freq: freqs * 20, rq: 0); // rq is 0\r\n\tfilterFreq = Env([2000, 3800, 20000], [8, 4], [2, 4]).kr;\r\n\tlouderBass = Array.fill(30, {|i| 1.01 - (1/(i+1))}); // louder bass in the beginning\r\n\tsnd = BLowPass.ar(snd, freq: filterFreq, rq: 0.5, mul: louderBass);\r\n\t// make it stereo, apply ampEnv, limiter\r\n\tampEnv = Env([0, 0.1, 1.6, 2, 0], [8, 12, 13, 20.7], [2, 10, -10]).kr(doneAction: 2);\r\n\tsnd = Splay.ar(snd.scramble, spread: 0.5, level: ampEnv);\r\n\tLimiter.ar(snd,0.1);\r\n};\r\n)\r\n\r\n// These bees were killed by static\r\n(\r\n~bees = {\r\n\tvar numVoices, startFreqs, deviation1, endFreqs, deviation2, sweepEnv, louderBass, filterFreq, ampEnv, freqs, snd;\r\n\tnumVoices = 30;\r\n\t// starting point\r\n\tstartFreqs = Array.fill(numVoices, { rrand(200.0, 400.0) }).sort.reverse;\r\n\tdeviation1 = startFreqs.collect({|freq| LFNoise2.kr(0.5, freq.linlin(200, 400, 3, 90))});\r\n\tstartFreqs = startFreqs + deviation1;\r\n\t// ending point\r\n\tendFreqs = ([1, 2, 4, 8, 16, 32, 64] * 14.5.midicps).wrapExtend(numVoices).sort;\r\n\tdeviation2 = Array.fill(numVoices, {|i| LFNoise2.kr(0.1, i/3)});\r\n\tendFreqs = endFreqs + deviation2;\r\n\t// glissando envelope\r\n\tsweepEnv = Array.fill(numVoices,{Env(\r\n\t\t[0, rrand(0.1, 0.2), 1],\r\n\t\t[rrand(5.5, 6), rrand(8.5, 9)],\r\n\t\t[rrand(2.0, 3.0), rrand(4.0, 5.0)])}).collect({|env| env.kr});\r\n\tfreqs = ((1 - sweepEnv) * startFreqs) + (sweepEnv * endFreqs);\r\n\t// filtered sawtooth waves\r\n\tsnd = BLowPass.ar(Saw.ar(freqs), freq: freqs * 20, rq: 0.6); // freqs multiplied in BLowPass freq argument to eventually produce static\r\n\tfilterFreq = Env([2000, 3800, 20000], [8, 4], [2, 4]).kr;\r\n\tlouderBass = Array.fill(30, {|i| 1.01 - (1/(i+1))}); // louder bass in the beginning\r\n\tsnd = BLowPass.ar(snd, freq: filterFreq, rq: 0.5, mul: louderBass);\r\n\t// make it stereo, apply ampEnv, limiter\r\n\tampEnv = Env([0, 1.6, 2, 0], [6, 13, 4], [2, 2, -2]).kr(doneAction: 2);\r\n\tsnd = Splay.ar(snd.scramble, spread: 0.5, level: ampEnv);\r\n\tLimiter.ar(in: snd, level: 0.9);\r\n};\r\n)\r\n\r\n// Rumbling static transforms into buzz\r\n(\r\n~buzz = {\r\n\tvar numVoices, startFreqs, deviation1, endFreqs, deviation2, sweepEnv, louderBass, filterFreq, ampEnv, freqs, snd;\r\n\tnumVoices = 30;\r\n\t// starting point\r\n\tstartFreqs = Array.fill(numVoices, { rrand(200.0, 400.0) }).sort.reverse;\r\n\tdeviation1 = startFreqs.collect({|freq| LFNoise2.kr(0.5, freq.linlin(200, 400, 3, 90))});\r\n\tstartFreqs = startFreqs + deviation1;\r\n\t// ending point\r\n\tendFreqs = ([1, 2, 4, 8, 16, 32, 64] * 14.5.midicps).wrapExtend(numVoices).sort;\r\n\tdeviation2 = Array.fill(numVoices, {|i| LFNoise2.kr(0.1, i/3)});\r\n\tendFreqs = endFreqs + deviation2;\r\n\t// glissando envelope\r\n\tsweepEnv = Array.fill(numVoices,{Env(\r\n\t\t[0, rrand(0.1, 0.2), 1],\r\n\t\t[rrand(5.5, 6), rrand(8.5, 9)],\r\n\t\t[rrand(2.0, 3.0), rrand(4.0, 5.0)])}).collect({|env| env.kr});\r\n\tfreqs = (((10 - endFreqs) * sweepEnv) + (sweepEnv * startFreqs)); // messed with the freqs array to cause chaos\r\n\t// filtered sawtooth waves\r\n\tsnd = BLowPass.ar(SinOsc.ar(freqs), freq: freqs * 6, rq: 0.6);\r\n\tfilterFreq = Env([2000, 3800, 20000], [8, 4], [2, 4]).kr;\r\n\tlouderBass = Array.fill(30, {|i| 1.01 - (1/(i+1))}); // louder bass in the beginning\r\n\tsnd = BLowPass.ar(snd, freq: filterFreq, rq: 0.5, mul: louderBass);\r\n\t// make it stereo, apply ampEnv, limiter\r\n\tampEnv = Env([0, 0.1, 1.6, 2, 0], [10, 6, 13, 4], [2, 15, -4]).kr(doneAction: 2);\r\n\tsnd = Splay.ar(snd.scramble, spread: 1, level: ampEnv);\r\n\tLimiter.ar(snd);\r\n};\r\n)\r\n\r\n// Increasing tremelo rate into low drone\r\n(\r\n~trem = {\r\n\tvar numVoices, startFreqs, deviation1, endFreqs, deviation2, sweepEnv, louderBass, filterFreq, ampEnv, freqs, snd;\r\n\tnumVoices = 30;\r\n\t// starting point\r\n\tstartFreqs = Array.fill(numVoices, { rrand(200.0, 400.0) }).sort.reverse;\r\n\tdeviation1 = startFreqs.collect({|freq| LFNoise2.kr(0.5, freq.linlin(200, 400, 3, 90))});\r\n\tstartFreqs = startFreqs + deviation1;\r\n\t// ending point\r\n\tendFreqs = ([1, 2, 4, 8, 16, 32, 64] * -36.midicps).wrapExtend(numVoices).sort; // low fundamental ending frequency and its octaves\r\n\tdeviation2 = Array.fill(numVoices, {|i| LFNoise2.kr(100, i/10)});\r\n\tendFreqs = endFreqs + deviation2;\r\n\t// glissando envelope\r\n\tsweepEnv = Array.fill(numVoices,{Env(\r\n\t\t[0, rrand(0.1, 0.2), 1],\r\n\t\t[rrand(5.5, 6), rrand(8.5, 9)],\r\n\t\t[rrand(2.0, 3.0), rrand(4.0, 5.0)])}).collect({|env| env.kr});\r\n\tfreqs = ((1 - sweepEnv) * startFreqs) + (sweepEnv * endFreqs);\r\n\t// filtered sawtooth waves\r\n\tsnd = BLowPass.ar(Pulse.ar(freqs), freq: freqs * 6, rq: 0.6);\r\n\tfilterFreq = Env([2000, 3800, 20000], [8, 4], [2, 4]).kr;\r\n\tlouderBass = Array.fill(30, {|i| 1.01 - (1/(i+1))}); // louder bass in the beginning\r\n\tsnd = BLowPass.ar(snd, freq: filterFreq, rq: 0.5, mul: louderBass);\r\n\t// apply ampEnv, tremelo effect, limiter\r\n\tampEnv = Env([0, 1.6, 2, 0], [6, 13, 15], [2, 2, -2]).kr(doneAction: 2);\r\n\tsnd = Mix(snd.scramble);\r\n\tsnd = Pan2.ar(in: snd, pos: SinOsc.ar(freq: Env(levels: [0, 5, 50], times: [10, 10], curve: [0, 0]).kr), level: ampEnv);\r\n\tOut.ar(0, Limiter.ar(snd));\r\n};\r\n)\r\n\r\n// Beebot1 and Beebot2 are meant for each other\r\n(\r\n~beebot1 = {\r\n\tvar numVoices, startFreqs, deviation1, endFreqs, deviation2, sweepEnv, louderBass, filterFreq, ampEnv, freqs, snd;\r\n\tnumVoices = 30;\r\n\t// starting point\r\n\tstartFreqs = Array.fill(numVoices, { rrand(200.0, 400.0) }).sort.reverse;\r\n\tdeviation1 = startFreqs.collect({|freq| LFNoise2.kr(0.5, freq.linlin(200, 400, 3, 90))});\r\n\tstartFreqs = startFreqs + deviation1;\r\n\t// ending point\r\n\tendFreqs = ([1, 2, 4, 8, 16, 32, 64] * 14.5.midicps).wrapExtend(numVoices).sort;\r\n\tdeviation2 = Array.fill(numVoices, {|i| LFNoise2.kr(0.1, i/3)});\r\n\tendFreqs = endFreqs + deviation2;\r\n\t// glissando envelope\r\n\tsweepEnv = Array.fill(numVoices,{Env(\r\n\t\t[0, rrand(0.1, 0.2), 1],\r\n\t\t[rrand(5.5, 6), rrand(8.5, 9)],\r\n\t\t[rrand(2.0, 3.0), rrand(4.0, 5.0)])}).collect({|env| env.kr});\r\n\tfreqs = (((1 - endFreqs) * sweepEnv) + (sweepEnv * startFreqs)); // messed with the freqs array to cause chaos\r\n\t// filtered sawtooth waves\r\n\tsnd = BLowPass.ar(SinOsc.ar(freqs), freq: freqs * 20, rq: 0.001); // rq is 0.001\r\n\tfilterFreq = Env([2000, 3800, 20000], [8, 4], [2, 4]).kr;\r\n\tlouderBass = Array.fill(30, {|i| 1.01 - (1/(i+1))}); // louder bass in the beginning\r\n\tsnd = BLowPass.ar(snd, freq: filterFreq, rq: 0.5, mul: louderBass);\r\n\t// make it stereo, apply ampEnv, limiter\r\n\tampEnv = Env([0, 1.6, 2, 0], [6, 13, 10], [2, 15, -4]).kr(doneAction: 2);\r\n\tsnd = Splay.ar(snd.scramble, spread: 0.5, level: ampEnv);\r\n\tLimiter.ar(snd, 0.5);\r\n};\r\n\r\n~beebot2 = {\r\n\tvar numVoices, startFreqs, deviation1, endFreqs, deviation2, sweepEnv, louderBass, filterFreq, ampEnv, freqs, snd;\r\n\tnumVoices = 30;\r\n\t// starting point\r\n\tstartFreqs = Array.fill(numVoices, { rrand(200.0, 400.0) }).sort.reverse;\r\n\tdeviation1 = startFreqs.collect({|freq| LFNoise2.kr(0.5, freq.linlin(200, 400, 3, 90))});\r\n\tstartFreqs = startFreqs + deviation1;\r\n\t// ending point\r\n\tendFreqs = ([1, 2, 4, 8, 16, 32, 64] * 14.5.midicps).wrapExtend(numVoices).sort;\r\n\tdeviation2 = Array.fill(numVoices, {|i| LFNoise2.kr(0.1, i/3)});\r\n\tendFreqs = endFreqs + deviation2;\r\n\t// glissando envelope\r\n\tsweepEnv = Array.fill(numVoices,{Env(\r\n\t\t[0, rrand(0.1, 0.2), 1],\r\n\t\t[rrand(5.5, 6), rrand(8.5, 9)],\r\n\t\t[rrand(2.0, 3.0), rrand(4.0, 5.0)])}).collect({|env| env.kr});\r\n\tfreqs = (((1 - endFreqs) * sweepEnv) + (sweepEnv * startFreqs)); // messed with the freqs array to cause chaos\r\n\t// filtered sawtooth waves\r\n\tsnd = BLowPass.ar(SinOsc.ar(freqs), freq: freqs * 10, rq: 0.001); // different filter than beebot1\r\n\tfilterFreq = Env([2000, 3800, 20000], [8, 4], [2, 4]).kr;\r\n\tlouderBass = Array.fill(30, {|i| 1.01 - (1/(i+1))}); // louder bass in the beginning\r\n\tsnd = BLowPass.ar(snd, freq: filterFreq, rq: 0.5, mul: louderBass);\r\n\t// make it stereo, apply ampEnv, limiter\r\n\tampEnv = Env([0, 1.6, 2, 0], [6, 13, 10], [2, 15, -4]).kr(doneAction: 2);\r\n\tsnd = Splay.ar(snd.scramble, spread: 0.5, level: ampEnv);\r\n\tLimiter.ar(snd, 0.5);\r\n};\r\n)\r\n\r\n// Descending into dissonance\r\n(\r\n~end = {\r\n\tvar numVoices, startFreqs, deviation1, endFreqs, deviation2, sweepEnv, louderBass, filterFreq, ampEnv, freqs, snd;\r\n\tnumVoices = 30;\r\n\t// starting point\r\n\tstartFreqs = Array.fill(numVoices, { rrand(20.0, 40.0) }).sort.reverse; // starting with low frequencies\r\n\tdeviation1 = startFreqs.collect({|freq| LFNoise2.kr(0.5, freq.linlin(30, 40, 0, 40))});\r\n\tstartFreqs = startFreqs + deviation1;\r\n\t// ending point\r\n\tendFreqs = ([1, 2, 4, 8, 16, 32, 64] * 14.5.midicps).wrapExtend(numVoices).sort;\r\n\tdeviation2 = Array.fill(numVoices, {|i| LFNoise2.kr(0.1, i/3)});\r\n\tendFreqs = endFreqs + deviation2;\r\n\t// glissando envelope\r\n\tsweepEnv = Array.fill(numVoices,{Env(\r\n\t\t[0, rrand(0.1, 0.2), 1],\r\n\t\t[rrand(10.5, 11), rrand(15.5, 16)],\r\n\t\t[rrand(2.0, 3.0), rrand(4.0, 5.0)])}).collect({|env| env.kr});\r\n\tfreqs = ((1 - sweepEnv) * endFreqs) + (sweepEnv * startFreqs); // messed with freqs array in order to descend into dissonance\r\n\t// filtered sawtooth waves\r\n\tsnd = BLowPass.ar(Saw.ar(freqs), freq: freqs * 6, rq: 0.6);\r\n\tfilterFreq = Env([2000, 3800, 20000], [8, 4], [2, 4]).kr;\r\n\tlouderBass = Array.fill(30, {|i| 1.01 - (1/(i+1))}); // louder bass in the beginning\r\n\tsnd = BLowPass.ar(snd, freq: filterFreq, rq: 0.5, mul: louderBass);\r\n\t// make it stereo, apply ampEnv, limiter\r\n\tampEnv = Env([0, 1.6, 2, 0], [10, 13, 4], [2, 2, -2]).kr(doneAction: 2);\r\n\tsnd = Splay.ar(snd.scramble, spread: 0.75, level: ampEnv);\r\n\tLimiter.ar(snd);\r\n};\r\n)",
   "labels" : [
      "electronic",
      "experimental",
      "supercollider",
      "code",
      "synth",
      "synthesis",
      "sound design",
      "music",
      "computer",
      "synthesizer",
      "musc115thx",
      "thx",
      "deep note",
      "thx deep note"
   ]
}
