«stranger things» by 56228375
on 13 Jan'18 14:43 inFirst 30 seconds or so of the obligatory "stranger things" theme. I didn't make any serious attempt to perfectly clone the original sounds, but I feel like they live in a similar sonic universe. For my own convenience, this depends on the TheoryQuark from https://github.com/shimpe/theoryquark : just unpack it in the directory that opens when you open scide -> "file menu" -> "open user support directory" and then restart scide (or recompile the class library using the "language" -> "recompile class library" menu). It uses some instruments I made myself, as well as some I collected from sources which unfortunately I don't remember (probably sccode.org and/or mailing list).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189
( s.waitForBoot({ var intro, introFasterAttack, fastarpeggio, arpeggio, percussion, flute, lead1, bass, score; var parser = TheoryNoteParser.new; SynthDef(\fatsaw, { | out=0, freq = 440, amp=0.1, gate=1, attack=0.01, decay=0.3, sustain=0.5, release=1, filterSpeed=100, filterFreqStart=300, filterFreqEnd=400, resonance=1, hfFilterFreq=1, hfFilterResonance=1 | var sig, env, filtFreq; env = EnvGen.ar(Env.adsr(attack, decay, sustain, release), gate, levelScale:0.5, doneAction:Done.freeSelf); sig = env*Splay.ar(LFSaw.ar(freq*[0.98,0.99,1.0,1.01,1.02],[LFNoise0.kr(2), LFNoise0.kr(1.9), LFNoise0.kr(2.1)]) + SinOsc.ar(freq*[0.98,0.99,1.0,1.01,1.02],[LFNoise0.kr(2), LFNoise0.kr(1.9), LFNoise0.kr(2.1)])); filtFreq = LFSaw.kr(filterSpeed,iphase:1).range(filterFreqStart,filterFreqEnd); sig = RLPF.ar(sig, filtFreq, resonance); sig = RHPF.ar(sig, hfFilterFreq, hfFilterResonance); 2.do({ sig = AllpassN.ar(sig, 0.050, [0.050.rand, 0.050.rand], 1); }); Out.ar(out, amp*sig.tanh); }).add; SynthDef(\organ, { | out = 0, freq = 440, amp=0.1, gate=1, attack=0.01, decay=0.3, sustain=0.5, release=1 | var sig, env; sig = 0.5*Klang.ar(`[[freq/8, freq/4, freq/2, freq, freq*2, freq*4, freq*8],[0.7, 0.7, 0.7, 1, 1, 0.6, 0.4],[0,0.1,0.2,0.3,0.4,0.5,0.6]]); sig = RLPF.ar(sig, 5000, 1); env = EnvGen.ar(Env.adsr(attack,decay, sustain, release), gate, doneAction:Done.freeSelf); sig = env*sig; 4.do({ sig = AllpassN.ar(sig, 0.050, [0.050.rand, 0.050.rand], 1); }); Out.ar(out, amp*sig.tanh); }).add; SynthDef(\kick, { |out = 0, pan = 0, amp = 0.3, filterFreq=100| var body, bodyFreq, bodyAmp; var pop, popFreq, popAmp; var click, clickAmp; var snd; // body starts midrange, quickly drops down to low freqs, and trails off bodyFreq = EnvGen.ar(Env(0.7*[261, 120, 51], [0.035, 0.08], curve: \exp)); bodyAmp = EnvGen.ar(Env.linen(0.005, 0.1, 0.3), doneAction: 2); body = LFTri.ar(bodyFreq) * bodyAmp; // pop sweeps over the midrange popFreq = XLine.kr(750, 261, 0.02); popAmp = EnvGen.ar(Env.linen(0.001, 0.02, 0.001)) * 0.15; pop = LFTri.ar(popFreq) * popAmp; // click is spectrally rich, covering the high-freq range // you can use Formant, FM, noise, whatever clickAmp = EnvGen.ar(Env.perc(0.001, 0.01)) * 0.15; click = LPF.ar(Formant.ar(910, 4760, 2110), 3140) * clickAmp; snd = body + pop + click; snd = RLPF.ar(snd, filterFreq); snd = snd.tanh; Out.ar(out, Pan2.ar(snd, pan, amp)); }).add; s.sync; ~tempoFactor = 0.18; intro = Pbind( \instrument, \fatsaw, \amp, 1.2, \attack, 3, \decay, 0.1, \sustain, 1, \release, 5, \filterSpeed, Pfunc({~tempoFactor*0.5}), \filterFreqStart, 50, \filterFreqEnd, 800, \midinote, Pseq(["e3 g3 b3"].collect({|el| parser.asMidi(el)}), 1), \dur, Pseq([6],1)); //intro.play; introFasterAttack = Pbind( \instrument, \fatsaw, \amp, 0.5, \attack, 0.01, \decay, 0.3, \sustain, 1, \release, 2, \filterSpeed, Pfunc({1/(~tempoFactor*6*4);}), \filterFreqStart, 50, \filterFreqEnd, 3000, \midinote, Pseq(["e3 g3 b3"].collect({|el| parser.asMidi(el)}), 1), \dur, 4); fastarpeggio = Pbind( \instrument, \organ, \amp, Pseq([0.6,0.15,0.2,0.25,0.3,0.25,0.2,0.15]*0.1, inf), \attack, 0.1, \decay, 0.1, \sustain, 0.3, \release, 1, \dur, Pfunc({~tempoFactor/2}), \midinote, Pseq(parser.asMidi("c5 e5 g5 b5 c6 b5 g5 e5"), 6) ); //fastarpeggio.play; percussion = Pbind( \instrument, \kick, \amp, Pseq([0.9,0.8], inf), \filterFreq, Pseq([Pseq([1000], 4), Pseq([2000], 4)], inf), \dur, Pseq([~tempoFactor], inf), \filterSpeed, 0.1, \filterFreqStart, 50, \filterFreqEnd, 300, \midinote, Pseq(parser.asMidi("c3 c3") ++ [Rest(), Rest()], 60), ); //percussion.play; arpeggio = Pbind( \instrument, \fatsaw, \amp, 0.6, \attack, 0.01, \decay, 0.3, \sustain, 0.1, \release, 0.4, \time, Ptime(inf), \resonance, Pfunc({ |ev| ev['time'].linexp(0,10,1,0.2); }), \midinote, Pseq(parser.asMidi("c2 e2 g2 b2 c3 b2 g2 e2"), 14+4+4+6), \dur, Pfunc({~tempoFactor})); //arpeggio.play; flute = Pbind( \instrument, \fatsaw, \amp, 0.4, \attack, 3, \decay, 0.3, \sustain, 3, \release, 4, \filterSpeed, Pfunc({~tempoFactor}), \filterFreqStart, 200, \filterFreqEnd, 6000, \midinote, Pseq(["g4 b4 g5 b5"].collect({|el| parser.asMidi(el); }), 1), \dur, Pfunc({~tempoFactor*5}); ); lead1 = Pbind( \instrument, \fatsaw, \amp, 0.2, \attack, 0.01, \decay, 0.3, \sustain, 1, \release, 1, \resonance, 0.2, \filterSpeed, Pfunc({~tempoFactor}), \filterFreqStart, 3000, \filterFreqEnd, 4000, \hfFilterFreq, 10, \midinote, Pseq(["b1 b2 b3", "g2 g3 g4"].collect({|el| parser.asMidi(el)}), 1), \dur, Pfunc({~tempoFactor*4}), ); //lead1.play; bass = Pbind( \instrument, \fatsaw, \amp, Pseq([0.3, 0.2, 0.2, 0.18, 0.2, 0.18, 0.2, 0.18]*2,inf), \attack, 0.01, \decay, 0.5, \sustain, Pseq([1,0.7,1,0.7],inf), \release, 8, \filterSpeed, 0.1, \filterFreqStart, 2000, \filterFreqEnd, 3000, \resonance, 0.8, \hfFilterFreq, 5, \midinote, Pseq(["c1 c2 c3", "d1 d2 d3 ", "e1 e2 e3", "d1 d2 d3"].collect({|el| parser.asMidi(el)}), 2), \dur, Pseq([~tempoFactor*24, ~tempoFactor*8, ~tempoFactor*24, ~tempoFactor*8],inf) ); //bass.play; score = Ptpar([ 0.0, intro, 0.0, fastarpeggio, ~tempoFactor*8*3, percussion, ~tempoFactor*8*3, arpeggio, ~tempoFactor*8*9, introFasterAttack, ~tempoFactor*8*10, flute, ~tempoFactor*8*13, lead1, ~tempoFactor*8*14, bass ]); score.play; }); )
descendants
full graph
«unukowubut» by anonymous (private)
«iozijidizpi» by anonymous (private)
«icezeokiv» by anonymous (private)
«ihelawel» by anonymous (private)
«uazyvuxh» by anonymous (private)
«ikihije» by anonymous (private)
reception
comments