├── LICENSE.md ├── keyboard.scd ├── musical ├── alright │ ├── My Friends Grew Up Without Me.scd │ ├── chirp tunes.sc │ ├── laptop make it something.scd │ └── skälla slåss.sc ├── experiments │ ├── crystal-mist.scd │ ├── discomesque.sc │ ├── dusty-waterfall.scd │ ├── glitches.sc │ ├── jag alska dig-du alska mig.scd │ ├── mbv-test.scd │ ├── resort.scd │ ├── shoegazer.scd │ └── synth shuffle.sc ├── failures │ └── bremen march.scd ├── good │ ├── bakom.scd │ ├── beller.scd │ ├── forsoka.scd │ ├── lilypad.scd │ ├── rise of fall.scd │ └── summer made sounds.scd ├── great │ ├── empty.scd │ ├── ghost-passengers.scd │ └── wolf-and-ferret.scd ├── promising │ ├── bird-shifts.scd │ ├── color splash on sunny day.scd │ ├── darkness.scd │ ├── glomma.scd │ ├── idyllic.scd │ ├── love dance.scd │ ├── nini.scd │ ├── riff.scd │ ├── scratchy-sorrow.scd │ ├── starberi.scd │ └── studies.scd └── senior project │ ├── Forest.sc │ ├── data.emulate.sc │ ├── industria.sc │ ├── music for type │ ├── didot │ │ ├── didot-compressed.mp3 │ │ ├── didot-condensed.sc │ │ ├── didot-mini.mp3 │ │ ├── didot-mini.sc │ │ ├── didot.mp3 │ │ ├── didot.sc │ │ └── style guide.pdf │ └── helvetica │ │ ├── helvetica.sc │ │ └── style guide.pdf │ ├── neue antiqua.sc │ ├── piece 06.sc │ ├── recordings │ ├── 01 durchkomponiert.mp3 │ ├── 02 winter.mp3 │ ├── 03 data.emulate.mp3 │ ├── 04 industria.mp3 │ ├── 05 tentative.mp3 │ ├── 06 neue-antiqua.mp3 │ ├── 07 piece-06.mp3 │ ├── 08 helvetica.mp3 │ └── 09 didot.mp3 │ ├── tentative.sc │ └── winter.sc ├── readme.md ├── samples ├── Cello II.aiff ├── City of Julie.aiff ├── Code Couleur.aiff ├── Denjiha.aiff ├── Drum & Babass.aiff ├── Fru.aiff ├── Kaliba.aiff ├── Rebonddent.aiff ├── Track 30.aiff ├── Viens, va-t-en.aiff ├── Wind.aiff ├── hk1.aiff ├── hk2.aiff ├── readme.md ├── rec_assim_1.aiff ├── rec_assim_2.aiff ├── rec_assim_3.aiff ├── samples.sc ├── svc1.aiff └── svc2.aiff ├── sounds └── robo-sounds.scd └── synths ├── chiptune-reference.sc ├── instruments.sc ├── ixibass.sc ├── rumblesan drums.scd ├── sommar.scd └── synthesis.sc /LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Catherine Hart 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /keyboard.scd: -------------------------------------------------------------------------------- 1 | // Based on code from http://article.gmane.org/gmane.comp.audio.supercollider.user/50457 2 | s.waitForBoot { 3 | // preparation; essentially, allocate an impulse response buffer, then follow a special buffer preparation step to set up the data the plugin needs. Different options are provided commented out for loading impulse responses from soundfiles. 4 | var lengthinsamples = 40000; 5 | ~fftsize=8192; // also 4096 works on my machine; 1024 too often and amortisation too pushed, 8192 more high load FFT 6 | 7 | { 8 | var ir, irbuffer, bufsize; 9 | var nextmod=100; 10 | 11 | ir = [0] ++0.dup(100) ++ (Array.fill(lengthinsamples,{|i| if(i%(nextmod)==0,{nextmod= rrand(80,120); 0.3*((i.asFloat/lengthinsamples).squared)},{0.0}) })); 12 | 13 | irbuffer = Buffer.loadCollection(s, ir); 14 | 15 | s.sync; 16 | 17 | bufsize= PartConv.calcBufSize(~fftsize, irbuffer); 18 | 19 | ~irspectrum = Buffer.alloc(s, bufsize, 1); 20 | 21 | ~irspectrum.preparePartConv(irbuffer, ~fftsize); 22 | 23 | s.sync; 24 | 25 | irbuffer.free; // don't need time domain data anymore, just needed spectral version 26 | }.fork; 27 | }; 28 | 29 | SynthDef(\ixibass, {arg out=0, amp=0.3, t_trig=1, freq=100, rq=0.004; 30 | var env, signal; 31 | var rho, theta, b1, b2; 32 | b1 = 1.98 * 0.989999999 * cos(0.09); 33 | b2 = 0.998057.neg; 34 | signal = SOS.ar(K2A.ar(t_trig), 0.123, 0.0, 0.0, b1, b2); 35 | signal = RHPF.ar(signal, freq, rq) + RHPF.ar(signal, freq*0.5, rq); 36 | signal = Decay2.ar(signal, 0.4, 0.3, signal); 37 | DetectSilence.ar(signal, 0.01, doneAction:2); 38 | Out.ar(out, signal*(amp*0.45)!2); 39 | }).add; 40 | 41 | SynthDef(\sawSine) { |out=0, imp=5, freq=150, sustain=0.25, pan=0, amp=0.5| 42 | var aEnv = EnvGen.kr(Env([0,amp,amp,0], [sustain*0.75, sustain*0.25, 0.25], [-2.5,0,0]), 1, doneAction: 2), 43 | saw = Saw.ar(imp, aEnv), 44 | sine = SinOsc.ar(freq, 0, saw), 45 | rvrb = sine + FreeVerb.ar(sine, 0.5, 1, 0.5), 46 | pan2 = Pan2.ar(rvrb, pan); 47 | 48 | Out.ar(out, pan2); 49 | }.add; 50 | 51 | SynthDef(\vibeSpark) { |out=0, imp=5, freq=150, sustain=0.25, attack=0.75, decay=0.25, pan=0, amp=0.5| 52 | var aEnv, saw, sine, rvrb, pan2; 53 | 54 | aEnv = EnvGen.kr( 55 | Env.linen(sustain*attack, sustain*(1-attack), decay, amp, [-2.5,0,0]), 56 | 1, 57 | doneAction: 2 58 | ); 59 | saw = Saw.ar(imp, aEnv); 60 | sine = SinOsc.ar(freq, 0, saw).min(amp).max(0-amp); 61 | rvrb = sine + FreeVerb.ar(sine, 0.5, 1, 0.5); 62 | pan2 = Pan2.ar(rvrb, pan); 63 | 64 | Out.ar(out, pan2); 65 | }.add; 66 | 67 | SynthDef(\susSine) { |out=0, freq=440, amp=0.25, pan=0, sustain=1| 68 | var env = EnvGen.kr(Env([1, 1, 0], [sustain, 0]), 1, doneAction: 2), 69 | sine = SinOsc.ar(freq, 0, amp) * env, 70 | pan2 = Pan2.ar(sine, pan); 71 | 72 | Out.ar(out, pan2); 73 | }.add; 74 | 75 | SynthDef(\cutString) { |out=0, freq=250, amp=0.5, feedbackAmp=0.97, sustain=1| 76 | // Properties 77 | var pluckAt = 0.5, 78 | period = freq.reciprocal, 79 | controlPeriod = ControlRate.ir, 80 | block = controlPeriod.reciprocal, 81 | // Synths 82 | level = EnvGen.kr(Env.linen(sustainTime: sustain), doneAction: 0), 83 | exciter = EnvGen.ar( 84 | Env.new( 85 | [0, 0.9, 0], 86 | [period * pluckAt + 0.01, period * (1-pluckAt) + 0.01], 87 | 'linear' 88 | ), 89 | doneAction: 0 90 | ), 91 | modulator = SinOsc.ar(freq) + SinOsc.ar(freq / 2 * 0.618), 92 | synth = modulator * exciter, 93 | // Output 94 | feedback = LocalIn.ar(1), 95 | d1 = DelayL.ar(synth + feedback, period-block, period-block), 96 | d2 = DelayL.ar(synth + d1.neg, period-block, period-block) * feedbackAmp; 97 | 98 | LocalOut.ar(d2.neg); 99 | 100 | Out.ar(out, d2 * level * amp); 101 | }.add; 102 | 103 | SynthDef(\reverse_reverb) { |in=0, out=0, amp=1| 104 | var input, new_out; 105 | 106 | input = In.ar(in, 2); 107 | new_out = PartConv.ar(input, ~fftsize, ~irspectrum.bufnum, amp) + input; 108 | 109 | ReplaceOut.ar(out, new_out); 110 | }.add; 111 | 112 | // Based on code from http://permalink.gmane.org/gmane.comp.audio.supercollider.user/77153 113 | SynthDef(\tape_delay) { |in=0, out=0, imp=1, lag=3, maxLag=0.2, decayTime=6| 114 | var input, newOut, delayTime, laggedDelayTime, outDelay; 115 | 116 | input = In.ar(in, 2) * 0.75; 117 | // Delay time jumps on impulse 118 | delayTime = Demand.kr(Impulse.kr(imp), 0, Dseq([0.3], inf)); 119 | // Amount of time to reach new value 120 | laggedDelayTime = Lag.kr(delayTime, lag); 121 | // CombC - delay with feedback 122 | newOut = CombC.ar(input, maxLag, laggedDelayTime, decayTime) + in; 123 | 124 | ReplaceOut.ar(out, newOut); 125 | }.add; 126 | 127 | SynthDef(\vibrato) { |in=0, out=0, freq=220, imp=1| 128 | var input, newOut; 129 | 130 | input = In.ar(in, 2); 131 | 132 | newOut = FreqShift.ar(input, (FSinOsc.kr(imp) * freq) - (freq * MouseY.kr(0, 1))); 133 | //newOut = FreqShift.ar(input, FSinOsc.kr(imp) * freq * MouseY.kr(0, freq)); 134 | 135 | ReplaceOut.ar(out, newOut); 136 | }.add; 137 | 138 | // Based on code from http://new-supercollider-mailing-lists-forums-use-these.2681727.n2.nabble.com/Distortion-effect-tp5173262p5173287.html 139 | SynthDef(\distortion) { |in=0, out=0, amount=0.99, amp=1, freq=0.25| 140 | var input, mod_amount, amCoef, newOut; 141 | 142 | mod_amount = FSinOsc.kr(freq).range(amount, 1) * amount; 143 | amCoef= 2*mod_amount/(1-mod_amount); 144 | 145 | input = HPF.ar(In.ar(in, 2), 400)*5; 146 | 147 | newOut = MidEQ.ar(LPF.ar((1+amCoef)*input/(1+(amCoef*input.abs)), [3800, 3900])*0.5, 120, 0.7, 8); 148 | 149 | ReplaceOut.ar(out, newOut * amp); 150 | }.add; 151 | 152 | 153 | 154 | // strummable guitar 155 | // use mouse to strum strings 156 | // based on code from http://www.sussex.ac.uk/Users/nc81/modules/cm1/scfiles/4.1%20Interaction%201.html 157 | SynthDef(\strumGuitar) { |frets = #[0,0,0,0,0,0], out=0| 158 | var pitch, mousex, output; 159 | 160 | pitch = [ 52, 57, 62, 67, 71, 76 ]; // e a d g b e 161 | mousex = MouseX.kr; 162 | output = Mix.fill(pitch.size, { |i| 163 | var trigger, pluck, period, string, shift; 164 | 165 | // place trigger points from 0.25 to 0.75 166 | trigger = HPZ1.kr(mousex > (0.25 + (i * 0.1))).abs; 167 | pluck = WhiteNoise.ar(Decay.kr(trigger, 0.05)); 168 | shift = Select.kr(frets[i] <= 0, [2.pow(1/12.0).pow(frets[i]), 1]); 169 | 170 | period = (pitch.at(i).midicps * shift).reciprocal; 171 | /* string = */CombL.ar(pluck, period, period, 4); 172 | //Pan2.ar(string, i * 0.2 - 0.5); 173 | }); 174 | output = LPF.ar(output, 12000) + LeakDC.ar(output); 175 | 176 | Out.ar(out, output); 177 | }.add; 178 | 179 | 180 | 181 | // Try using these on the birds in bird-shifts with the pitch multiplied by 1 182 | a = Synth(\vibrato, [\in, 0, \out, 0, \imp, 1/32, \freq, 32]); 183 | b = Synth.after(a, \distortion, [\in, 0, \out, 0, \amount, 0.99]); 184 | c = Synth.after(b, \tape_delay, [\in, 0, \out, 0, \imp, 1/8, \lag, 1/4, \maxLag, 1, \decayTime, 8]); 185 | d = Synth.after(c, \reverse_reverb, [\in, 0, \out, 0]); 186 | 187 | w = Window.new; 188 | c = Slider(w,Rect(0,0,100,30)); 189 | z = Synth(\strumGuitar, [\frets, [0, 0, 9, 7, 7, 0]]).moveBefore(a); 190 | /*c.keyDownAction = { |view, char, modifiers, unicode, keycode| 191 | unicode.postln; 192 | Synth(\ixibass, [ 193 | \freq, unicode * 4, 194 | //\sustain, 1, 195 | //\legato, 1, 196 | //\feedbackAmp, 0.995, 197 | \amp, 0.125 198 | ]).moveBefore(a); 199 | };*/ 200 | w.onClose = { 201 | s.freeAll; 202 | }; 203 | w.front; 204 | 205 | Routine({ 206 | inf.do({ 207 | 1.wait; 208 | "A".postln; 209 | z.set(\frets, [3, 9, 0, 0, 7, 0]); 210 | 211 | 1.wait; 212 | "B".postln; 213 | z.set(\frets, [0, 0, 0, 0, 0, 0]); 214 | 215 | 1.wait; 216 | "C".postln; 217 | z.set(\frets, [3, 5, 7, 0, 0, 5]); 218 | }); 219 | }).play; -------------------------------------------------------------------------------- /musical/alright/My Friends Grew Up Without Me.scd: -------------------------------------------------------------------------------- 1 | SynthDef(\vibeSpark) { |out=0, imp=5, freq=150, sustain=0.25, attack=0.75, decay=0.25, pan=0, amp=0.5| 2 | var aEnv = EnvGen.kr( 3 | Env.linen(sustain*attack, sustain*(1-attack), decay, amp, [-2.5,0,0]), 4 | 1, 5 | doneAction: 2 6 | ), 7 | saw = Saw.ar(imp, aEnv), 8 | sine = SinOsc.ar(freq, 0, saw).min(amp).max(0-amp), 9 | rvrb = sine + FreeVerb.ar(sine, 0.5, 1, 0.5), 10 | pan2 = Pan2.ar(rvrb, pan); 11 | 12 | Out.ar(out, pan2); 13 | }.add; 14 | 15 | SynthDef(\fogVibe) { |out=0, imp=5, freq=150, sustain=0.25, attack=0.75, decay=0.25, pan=0, amp=0.5| 16 | var aEnv = EnvGen.kr( 17 | Env.linen(sustain*attack, sustain*(1-attack), decay, amp), 18 | 1, 19 | doneAction: 2 20 | ), 21 | saw = Saw.ar(imp).min(1), 22 | sine = SinOsc.ar(freq, 0, saw), 23 | rvrb = sine + FreeVerb.ar(sine, 0.5, 1, 0.5), 24 | pan2 = Pan2.ar(rvrb, pan); 25 | 26 | Out.ar(out, pan2 * aEnv); 27 | }.add; 28 | 29 | SynthDef(\starBerry) { |out=0, freq=150, filMin=0.1, filMax=0.95, imp=1, gate=1, amp=0.5| 30 | var sust = Linen.kr(gate, releaseTime: 0.25, doneAction: 2), 31 | vSaw = VarSaw.ar( 32 | freq, 33 | 0, 34 | EnvGen.kr(Env([filMin,filMax,filMin], [0.25*imp,0.75*imp], [-5,-5], 2), gate), 35 | amp 36 | ), 37 | pan2 = Pan2.ar(vSaw, FSinOsc.kr(imp*2)*0.25), 38 | rvrb = FreeVerb.ar(pan2, 0.25, 1, 0.75); 39 | 40 | Out.ar(out, rvrb*sust); 41 | }.add; 42 | 43 | SynthDef(\reverseDusthumm, {|freq = 440, dur = 10, crushRate = 100, crushStep = 0.1, pan = 0, amp = 0.2, out = 0| 44 | var osc, env, panning, reverb; 45 | 46 | env = EnvGen.kr(Env.linen(dur, 0.005, 0.75, amp, 0), doneAction: 2); 47 | osc = Pulse.ar(freq, SinOsc.kr(crushRate, 0, 1).range(crushStep).abs, env); 48 | panning = Pan2.ar(osc, pan); 49 | reverb = FreeVerb.ar(panning, 1, 1, 0.5); 50 | 51 | Out.ar(out, reverb); 52 | }).add; 53 | 54 | // --- Percussion 55 | 56 | SynthDef(\snare) { |out=0, freq=1250, decay=0.15, amp=0.25, pan=0| 57 | var sust, osc, noise, crispy, rvrb, pan2; 58 | 59 | sust = EnvGen.kr(Env.perc(0.005, decay, amp), 1, doneAction: 2); 60 | 61 | osc = Pulse.ar(freq, 0.5, 1) * WhiteNoise.kr(1); 62 | noise = WhiteNoise.ar(1); 63 | crispy = BrownNoise.ar(0.75); 64 | rvrb = FreeVerb.ar(osc+noise>crispy, 0, 1, 1); 65 | pan2 = Pan2.ar(rvrb, pan); 66 | 67 | Out.ar(out, pan2*sust); 68 | }.add; 69 | 70 | SynthDef(\bassDrum) { |out=0, freq=150, sustain=0.25, pan=0, amp=0.25| 71 | var hit_time, sust, osc, osc2, pan2; 72 | 73 | hit_time = 0.15; 74 | sust = EnvGen.kr(Env([1, 1, 0], [sustain, 0.05]), 1, doneAction: 2); 75 | 76 | osc = SinOsc.ar(XLine.kr(freq*1.618, freq/3.236, hit_time), 0, amp); 77 | osc2 = osc - SinOsc.kr(freq/6.472, 0, 0.25); 78 | pan2 = Pan2.ar(osc2, pan); 79 | 80 | Out.ar(out, pan2*sust); 81 | }.add; 82 | 83 | 84 | 85 | // --- Melodies 86 | 87 | // 1 loop = 8 seconds 88 | ~dustLead = { |loops=1, amp=0.5, speed=0.5| 89 | Pbind( 90 | \instrument, \reverseDusthumm, 91 | \freq, Pstutter( 92 | Pseq([4, 4, 4, 3, 1], loops), 93 | Pseq([100,150,134,89,124], inf) 94 | ), 95 | \dur, speed, 96 | \legato, 0.75, 97 | \amp, amp 98 | ).play; 99 | }; 100 | 101 | ~melody4 = { |synth, loops=1, amp=0.25, imp=0.95| 102 | Pbind( 103 | \instrument, synth, 104 | \freq, Pstutter( 105 | Pseq([4], inf), 106 | Pseq([59, 66, 62, 60, 59, 67, 64, 59, 66, 62].midicps, loops), 107 | ), 108 | \dur, Pstutter( 109 | Pseq([8, 2], inf), 110 | Pseq([1.5, 2] / 8, inf) 111 | ), 112 | \legato, 1, 113 | \imp, imp, 114 | \amp, amp 115 | ).play; 116 | }; 117 | 118 | // 1 loop = 8 seconds 119 | ~bassMelody = { |synth, loops=1, amp=0.25, imp=1| 120 | Pbind( 121 | \instrument, synth, 122 | \freq, Pstutter( 123 | Pseq([16], inf), 124 | Pseq([24, 24, 26, 19].midicps*4, loops) 125 | ), 126 | \dur, 0.125, 127 | \legato, 1, 128 | \filMax, 0.1, 129 | \imp, imp, 130 | \amp, amp 131 | ).play; 132 | }; 133 | 134 | 135 | 136 | Routine({ 137 | 138 | ~dustLead.value(1, 0.5, speed: 4); // 32s 139 | 140 | 8.wait; 141 | 142 | ~bassMelody.value(\starBerry, 20, 0.5, 2); 143 | 144 | 8.wait; 145 | 146 | Pbind( 147 | \instrument, \fogVibe, 148 | \freq, Pseq([90, \rest, 92, \rest, 91, \rest, 93, \rest] * 2 * 1.618, inf), 149 | \dur, Pstutter( 150 | Pseq([8], inf), 151 | Pseq([1], 12) 152 | ), 153 | \legato, 1, 154 | \attack, 1, 155 | \decay, 2, 156 | \imp, 100, 157 | \amp, 0.2, 158 | \out, Pseq([0,0,1,1], inf) 159 | ).play; 160 | 161 | 8.wait; 162 | 163 | ~melody4.value(\starBerry, 20, 0.25, 200); 164 | 165 | 8.wait; 166 | 167 | Pbind( 168 | \instrument, \fogVibe, 169 | \freq, Pseq([75, 70, 100, 90, 85] * 2 * 1.618), 170 | \dur, Pstutter( 171 | Pseq([3,2], inf), 172 | Pseq([4,2], 10) 173 | ), 174 | \legato, 1, 175 | \attack, 0.15, 176 | \imp, 60, 177 | \amp, 0.15 178 | ).play; 179 | 180 | Pbind( 181 | \instrument, \fogVibe, 182 | \freq, Pseq([\rest, 90, \rest, 85, \rest] * 2 * 1.618), 183 | \dur, Pseq([12,0.5,1.5,0.5,1.5], 10), 184 | \legato, 1, 185 | \attack, 0.25, 186 | \imp, 250, 187 | \amp, 0.25 188 | ).play; 189 | 190 | Pbind( 191 | \instrument, \fogVibe, 192 | \freq, Pseq([90, \rest, 92, \rest] * 1.618, inf), 193 | \dur, Pseq([0.5,1.5], 10), 194 | \legato, 1, 195 | \attack, 0.5, 196 | \decay, 0.5, 197 | \imp, 100, 198 | \amp, 0.25 199 | ).play; 200 | 201 | 32.wait; 202 | 203 | Pbind( 204 | \instrument, \fogVibe, 205 | \freq, Pstutter( 206 | Pseq([4], inf), 207 | Pseq([144,60,10,5] * 1.618, inf) 208 | ), 209 | \dur, Pstutter( 210 | Pseq([4], inf), 211 | Pseq([0.25], 12) 212 | ), 213 | \legato, 1, 214 | \attack, 0.5, 215 | \decay, 0.5, 216 | \imp, 100, 217 | \amp, 0.15 218 | ).play; 219 | 220 | Pbind( 221 | \instrument, \fogVibe, 222 | \freq, Pstutter( 223 | Pseq([4], inf), 224 | Pseq([144,84,134,139] * 1.618 * 6, inf) 225 | ), 226 | \dur, Pstutter( 227 | Pseq([4], inf), 228 | Pseq([0.25], 12) 229 | ), 230 | \legato, 1, 231 | \attack, 0.5, 232 | \decay, 0.5, 233 | \imp, 100, 234 | \amp, 0.1, 235 | \out, 1 236 | ).play; 237 | 238 | /* 239 | Pbind( 240 | \instrument, \bassDrum, 241 | \freq, Pstutter( 242 | Pseq([4], inf), 243 | Pseq([144,60,10,5] * 1.618, inf) 244 | ), 245 | \dur, Pstutter( 246 | Pseq([4], inf), 247 | Pseq([0.25], 12) 248 | ), 249 | \legato, 1, 250 | \attack, 0.5, 251 | \amp, 0.5 252 | ).play; 253 | */ 254 | 255 | }).play; -------------------------------------------------------------------------------- /musical/alright/chirp tunes.sc: -------------------------------------------------------------------------------- 1 | SynthDef(\square) { |out=0, sustain=1, freq=440, pan=0, amp=0.25| 2 | var sust = EnvGen.kr(Env([1,1,0], [sustain, 0.005]), 1, doneAction: 2), 3 | sqre = Pulse.ar(freq, 0.5, amp), 4 | pan2 = Pan2.ar(sqre, pan); 5 | 6 | Out.ar(out, pan2*sust); 7 | }.add; 8 | 9 | SynthDef(\reverb) { |out=0, mix=0.5, room=0.5, damp=0.5| 10 | var in = In.ar(out, 2), 11 | rvrb = FreeVerb.ar(in, mix, room, damp); 12 | 13 | ReplaceOut.ar(out, rvrb); 14 | }.add; 15 | 16 | 17 | 18 | Routine({ 19 | 20 | 21 | 22 | // 1 loop = 0.5s 23 | ~staccato = { |synth, loops=inf, amp=0.5, reverse=false, pitchShift=1, group=nil, addAction=0| 24 | var freq = [440, 220, 550, 330]; 25 | 26 | if (reverse, { freq = freq.reverse; }); 27 | 28 | Pbind( 29 | \instrument, synth, 30 | \group, group, 31 | \addAction, addAction, 32 | \freq, Pstutter( 33 | Pseq([2], inf), 34 | Pseq(freq*pitchShift, inf) 35 | ), 36 | \dur, Pseq([0.125, 0.375], loops), 37 | \legato, Pseq([0.5, 0.125], inf), 38 | \amp, amp 39 | ).play; 40 | }; 41 | 42 | // 1 loop = 1s 43 | // Melody loops once every 8 seconds 44 | ~harmony = { |synth, loops=inf, amp=0.25, group=nil, addAction=0| 45 | Pbind( 46 | \instrument, synth, 47 | \group, group, 48 | \addAction, addAction, 49 | \freq, Pseq([500,750,600,450, 500,750,600,875], inf), 50 | \dur, Pseq([1], loops), 51 | \legato, 1, 52 | \amp, amp 53 | ).play; 54 | }; 55 | 56 | // 1 loop = 1s 57 | ~bumps = { |synth, loops=inf, amp=0.25, group=nil, addAction=0| 58 | Pbind( 59 | \instrument, synth, 60 | \group, group, 61 | \addAction, addAction, 62 | \freq, Pseq([100], inf), 63 | \dur, PdurStutter( 64 | Pstutter( 65 | Pseq([8, 1, 7], inf), // @todo Try using mouseY to power this 66 | Pseq([1, 4, 1], inf) 67 | ), 68 | Pseq([0.5, 0.5], loops) 69 | ), 70 | \legato, Pseq([0.25], inf), 71 | \amp, amp 72 | ).play; 73 | }; 74 | 75 | 76 | 77 | ~reverb = Group.new; 78 | Synth.after(~reverb, \reverb, [\out, 0, \mix, 0.5, \room, 1, \damp, 0]); 79 | 80 | 81 | 82 | //~staccato.value(\square, 7, 0.25); // 3.5s 83 | ~harmony.value(\square, 16, 0.1, ~reverb); // 16s 84 | ~bumps.value(\square, 16, 0.25, ~reverb); 85 | 86 | // @todo Turn this into something I perform on my own 87 | 88 | 89 | }).play; -------------------------------------------------------------------------------- /musical/alright/laptop make it something.scd: -------------------------------------------------------------------------------- 1 | // Experimentation with various instruments 2 | 3 | // Leads 4 | 5 | SynthDef(\reverseDusthumm, {|freq = 440, dur = 10, crushRate = 100, crushStep = 0.1, pan = 0, amp = 0.2, out = 0| 6 | var osc, env, panning, reverb; 7 | 8 | env = EnvGen.kr(Env.linen(dur, 0.005, 0.1, amp, 0), doneAction: 2); 9 | osc = Pulse.ar(freq, SinOsc.kr(crushRate, 0, 1).range(crushStep).abs, env); 10 | panning = Pan2.ar(osc, pan); 11 | reverb = FreeVerb.ar(panning, 1, 1, 0.5); 12 | 13 | Out.ar(out, reverb); 14 | }).add; 15 | 16 | // Basses 17 | 18 | SynthDef(\triSaw) { |out=0, freq=150, hi=1, lo=0, imp=1, sustain=1, amp=0.5| 19 | var sust = EnvGen.kr(Env([1,1,0], [sustain, 0.75]), 1, doneAction: 2), 20 | vSaw = VarSaw.ar(freq, 0, LFTri.kr(imp).range(lo, hi), amp), 21 | pan2 = Pan2.ar(vSaw, FSinOsc.kr(imp*2)*0.25), 22 | rvrb = FreeVerb.ar(pan2, 0.25, 1, 0.75); 23 | 24 | Out.ar(out, rvrb*sust); 25 | }.add; 26 | 27 | // Drums 28 | 29 | SynthDef(\bassDrum) { |out=0, freq=150, sustain=0.25, pan=0, amp=1| 30 | var env = EnvGen.kr(Env([1, 1, 0], [sustain, 0.05]), 1, doneAction: 2), 31 | sine = SinOsc.ar(XLine.kr(freq, freq/3, sustain), 0, amp)*env, 32 | sqr = Pulse.ar(XLine.kr(freq, freq/3, sustain), 0.5)*(amp*0.25)*env, 33 | pan2 = Pan2.ar(sine+sqr, pan); 34 | 35 | Out.ar(out, pan2); 36 | }.add; 37 | 38 | 39 | 40 | Routine({ 41 | 42 | // Sequencers 43 | 44 | // 1 loop = 1s 45 | ~bassLine = { |loops=1, synth=\triSaw, amp=0.25, speed=1, pitchShift=1, lo=0, hi=1| 46 | Pbind( 47 | \instrument, synth, 48 | \freq, Pseq([440, 330, 440, 330, 550, 440, 550, 440]*pitchShift, loops), 49 | \dur, Pseq([0.125]/speed, inf), 50 | \legato, Pseq([0.5, 0.125], inf), 51 | \lo, lo, 52 | \hi, hi, 53 | \amp, amp 54 | ).play; 55 | }; 56 | 57 | // 1 loop = 2s 58 | ~bassKick = { |loops=1, freq=150, amp=0.5, dur=0.5, legato=0.25, dStut1=1, dStut2=1, dStut3=4, pan=0| 59 | Pbind( 60 | \instrument, \bassDrum, 61 | \freq, Pseq(freq.asArray, inf), 62 | \dur, PdurStutter( 63 | Pstutter( 64 | Pseq(dStut1.asArray, inf), 65 | Pseq(dStut2.asArray, inf) 66 | ), 67 | Pstutter( 68 | Pseq(dStut3.asArray, loops), 69 | Pseq(dur.asArray, loops) 70 | ) 71 | ), 72 | \legato, legato, 73 | \pan, pan, 74 | \amp, amp 75 | ).play; 76 | }; 77 | 78 | 79 | 80 | // Music 81 | 82 | ~bassLine.value(4, synth: \reverseDusthumm); // 4s 83 | 2.wait; 84 | ~bassKick.value; // 2s 85 | 2.wait; 86 | ~bassLine.value(4, amp: 0.15, pitchShift: 0.25, lo: 0.5, speed: 0.5); // 8s 87 | 4.wait; 88 | ~bassLine.value(4, amp: 0.15, lo: 0.25, hi: 0.75, speed: 0.5); // 8s 89 | 4.wait; 90 | ~bassLine.value(4, synth: \reverseDusthumm); // 4s 91 | 92 | }).play; -------------------------------------------------------------------------------- /musical/alright/skälla slåss.sc: -------------------------------------------------------------------------------- 1 | SynthDef(\reverseDusthumm, {|freq = 440, dur = 10, crushRate = 100, crushStep = 0.1, pan = 0, amp = 0.2, out = 0| 2 | var osc, env, panning, reverb; 3 | 4 | env = EnvGen.kr(Env.linen(dur, 0.005, 0.1, amp, 0), doneAction: 2); 5 | osc = Pulse.ar(freq, SinOsc.kr(crushRate, 0, 1).range(crushStep).abs, env); 6 | panning = Pan2.ar(osc, pan); 7 | reverb = FreeVerb.ar(panning, 1, 1, 0.5); 8 | 9 | Out.ar(out, reverb); 10 | }).add; 11 | 12 | SynthDef(\envSine) { |out=0, pan=0, fadeIn=1, sustain=1, fadeOut=1, sFreq=100, eFreq=440, amp=0.25| 13 | var sEnv = EnvGen.kr(Env([0, 1, 1, 0], [fadeIn, sustain, fadeOut]), 1, doneAction: 2), 14 | fEnv = EnvGen.kr(Env([sFreq, eFreq], [fadeIn+(sustain/2)], 0, eFreq), 1), 15 | sine = SinOsc.ar(fEnv, 0, amp) * sEnv, 16 | pan2 = Pan2.ar(sine, pan); 17 | 18 | Out.ar(out, pan2); 19 | }.add; 20 | 21 | SynthDef(\brokenWub) { |out=0, freq=150, sustain=0.25, pan=0, amp=0.5| 22 | var aEnv = EnvGen.kr(Env([0,amp,amp,0], [sustain*0.75, sustain*0.25, 0.05], [-2.5,0,0]), 1, doneAction: 2), 23 | saw = Saw.ar(100, aEnv), 24 | sine = SinOsc.ar(freq, 0, saw), 25 | pan2 = Pan2.ar(sine, pan); 26 | 27 | Out.ar(out, pan2); 28 | }.add; 29 | 30 | SynthDef(\sawSine) { |out=0, imp=5, freq=150, sustain=0.25, pan=0, amp=0.5| 31 | var aEnv = EnvGen.kr(Env([0,amp,amp,0], [sustain*0.75, sustain*0.25, 0.25], [-2.5,0,0]), 1, doneAction: 2), 32 | saw = Saw.ar(imp, aEnv), 33 | sine = SinOsc.ar(freq, 0, saw), 34 | rvrb = sine + FreeVerb.ar(sine, 0.25, 0.5, 0.25), 35 | pan2 = Pan2.ar(rvrb, pan); 36 | 37 | Out.ar(out, pan2); 38 | }.add; 39 | 40 | SynthDef(\fadeGuitar) { |out=0, freq=150, sustain=1.5, panS = -1, panE=1, amp=0.5| 41 | var aEnv = EnvGen.kr(Env([0,amp,0], [sustain,sustain*0.1], [2.5,0]), 1, doneAction: 2), 42 | pEnv = EnvGen.kr(Env([panS,panE], [sustain]), 1), 43 | saw = Saw.ar(300, aEnv), 44 | sine = SinOsc.ar(freq, 0, saw), 45 | pan2 = Pan2.ar(sine, pEnv); 46 | 47 | Out.ar(out, pan2); 48 | }.add; 49 | 50 | // Leads 51 | 52 | SynthDef(\fragileSquare) { |out=0, freq=400, atk=0.005, sustain=1, dec=0.005, imp=1, pan=0, amp=0.25| 53 | var env, saw, osc, osc2, panning, reverb; 54 | 55 | env = EnvGen.kr(Env.linen(atk, sustain, dec, amp, 0), doneAction: 2); 56 | saw = Saw.ar(imp, 1); 57 | osc = Pulse.ar(freq, 0.5, saw); 58 | osc2 = Pulse.ar(freq*2, 0.5, saw); 59 | panning = Pan2.ar(osc+osc2, pan); 60 | reverb = FreeVerb.ar(panning, 0.5, 1, 0.5) * env; 61 | 62 | Out.ar(out, reverb); 63 | }.add; 64 | 65 | // Basses 66 | 67 | SynthDef(\triSaw) { |out=0, freq=150, hi=1, lo=0, imp=1, sustain=1, amp=0.5| 68 | var sust = EnvGen.kr(Env([1,1,0], [sustain, 0.75]), 1, doneAction: 2), 69 | vSaw = VarSaw.ar(freq, 0, LFTri.kr(imp).range(lo, hi), amp), 70 | pan2 = Pan2.ar(vSaw, FSinOsc.kr(imp*2)*0.25), 71 | rvrb = FreeVerb.ar(pan2, 0.25, 1, 0.75); 72 | 73 | Out.ar(out, rvrb*sust); 74 | }.add; 75 | 76 | // Drums 77 | 78 | SynthDef(\bassDrum) { |out=0, freq=150, sustain=0.25, pan=0, amp=1| 79 | var env = EnvGen.kr(Env([1, 1, 0], [sustain, 0.05]), 1, doneAction: 2), 80 | sine = SinOsc.ar(XLine.kr(freq, freq/3, sustain), 0, amp)*env, 81 | sqr = Pulse.ar(XLine.kr(freq, freq/3, sustain), 0.5)*(amp*0.25)*env, 82 | pan2 = Pan2.ar(sine+sqr, pan); 83 | 84 | Out.ar(out, pan2); 85 | }.add; 86 | 87 | 88 | 89 | Routine({ 90 | // 1 loop = 8 seconds 91 | ~dustLead = { |loops=1, amp=0.5, speed=0.5| 92 | Pbind( 93 | \instrument, \reverseDusthumm, 94 | \freq, Pstutter( 95 | Pseq([4, 4, 4, 3, 1], loops), 96 | Pseq([100,150,134,89,124], inf) 97 | ), 98 | \dur, speed, 99 | \legato, 0.75, 100 | \amp, amp 101 | ).play; 102 | }; 103 | 104 | // 1 loop = 4 seconds 105 | ~guitarBits = { |loops=1, amp=0.25| 106 | Pbind( 107 | \instrument, \fadeGuitar, 108 | \freq, Pseq([50, 140, 150, 100, 240, 250]*5, loops), 109 | \dur, Pseq([2, 1, 1]/2, inf), 110 | \legato, 0.75, 111 | \panS, Pseq([-1, 1], inf), 112 | \panE, Pseq([1, -1], inf), 113 | \amp, amp 114 | ).play; 115 | }; 116 | 117 | // 4 movements, 1 loop = 3 seconds 118 | ~shapeBits = { |synth, loops=inf, amp=0.1, speed=1| 119 | Pbind( 120 | \instrument, synth, 121 | \freq, Pstutter( 122 | Pseq([1], inf), 123 | Pseq([750, 500, 250, 1000]*1.618, inf) 124 | ), 125 | \dur, 0.125*speed, 126 | \legato, 0.75, 127 | \imp, Pstutter( 128 | Pseq([2, 2, 4, 1, 0, 0, 1, 0, 0, 2, 4, 0, 4, 0, 2, 10], inf), 129 | Pseq([1, 2, 4, 6, 10, 8, 2, 50, 1, 3, 5, 175], loops) 130 | ), 131 | \pan, Pseq([-1, 0, 1], inf), 132 | \amp, amp 133 | ).play; 134 | }; 135 | 136 | // 1 loop = 2s 137 | ~bassKick = { |loops=1, freq=150, amp=0.5, dur=0.5, legato=0.25, dStut1=1, dStut2=1, dStut3=4, pan=0| 138 | Pbind( 139 | \instrument, \bassDrum, 140 | \freq, Pseq(freq.asArray, inf), 141 | \dur, PdurStutter( 142 | Pstutter( 143 | Pseq(dStut1.asArray, inf), 144 | Pseq(dStut2.asArray, inf) 145 | ), 146 | Pstutter( 147 | Pseq(dStut3.asArray, loops), 148 | Pseq(dur.asArray, loops) 149 | ) 150 | ), 151 | \legato, legato, 152 | \pan, pan, 153 | \amp, amp 154 | ).play; 155 | }; 156 | 157 | // 1 loop = 4 seconds 158 | ~bass2 = { |loops=1, freq=150, amp=0.5, legato=0.25, pan=0| 159 | ~bassKick.value(loops, freq, amp, [0.5, 2, 0.25, 0.5], legato, [7,1,7,1], [1,2,1,3], [16,1,2,13], pan); 160 | }; 161 | 162 | // 1 loop = 4 seconds 163 | ~bass3 = { |loops=1, freq=150, amp=0.5, legato=0.25, pan=0| 164 | ~bassKick.value(loops, freq, amp, [0.25], legato, [1,8,1,6], [2,1,2,1], [16], pan); 165 | }; 166 | 167 | 168 | // 1 loop = 8 seconds 169 | ~simpleBassLine = { |synth, loops=4, amp=0.25, pitchShift=1, imp=1| 170 | Pbind( 171 | \instrument, synth, 172 | \freq, Pstutter( 173 | Pseq([6, 2, 6, 2], inf), 174 | Pseq([75,92,75,96]*pitchShift, loops) 175 | ), 176 | \dur, 0.5, 177 | \legato, 0.75, 178 | \imp, imp, 179 | \amp, amp 180 | ).play; 181 | }; 182 | 183 | 184 | 185 | ~dustLead.value(2); // 16s 186 | 8.wait; 187 | ~simpleBassLine.value(\triSaw, 2, 0.15, pitchShift: 1.618, imp: 0.5); // 16s 188 | 8.wait; 189 | ~dustLead.value(1, 0.4); // 8s 190 | ~guitarBits.value(4); // 16s 191 | 8.wait; 192 | ~dustLead.value(1, 0.15); // 8s 193 | ~simpleBassLine.value(\triSaw, 1, 0.025, pitchShift: 5, imp: 0.5); // 8s 194 | ~simpleBassLine.value(\triSaw, 1, 0.025, pitchShift: 10, imp: 0.25); // 8s 195 | ~shapeBits.value(\fragileSquare, 2, 0.025); // 6s 196 | 6.wait; 197 | ~dustLead.value(1, 0.75, speed: 0.125); // 1s 198 | 2.wait; 199 | ~simpleBassLine.value(\triSaw, 1, 0.15, pitchShift: 2, imp: 0.25); // 8s 200 | 2.wait; 201 | ~bassKick.value(2); // 4s 202 | ~dustLead.value(1, 0.25, speed: 4); // 32s 203 | ~dustLead.value(2); // 16s 204 | ~shapeBits.value(\sawSine, 2, 0.025); // 6s 205 | 206 | 90.wait; 207 | 208 | Pbind( 209 | \instrument, \sawSine, 210 | \freq, Pstutter( 211 | Pseq([1], inf), 212 | Pseq([750, 500, 250, 1000]*1.618, inf) 213 | ), 214 | \dur, 0.125, 215 | \legato, 0.75, 216 | \imp, Pswitch( 217 | [ 218 | Pstutter( 219 | Pseq([2, 2, 4, 1, 0, 0, 1, 0, 0, 2, 4, 0, 4, 0, 2, 10], 3), 220 | Pseq([1, 2, 4, 6, 10, 8, 2, 50, 1, 3, 5, 175], inf) 221 | ), 222 | Pstutter( 223 | Pseq([2, 2, 4, 1, 0, 0, 1, 0, 0, 2, 4, 0, 4, 0, 2, 10], 2, 13), 224 | Pseq([1, 2, 4, 6, 10, 8, 2, 50, 1, 3, 5, 175], inf) 225 | ), 226 | Pstutter( 227 | Pseq([1,2,2, 10, 5,3, 1, 2, 8, 2, 4, 1, 1, 2, 6, 2]), 228 | Pseq([1,6,25,250,4,400,600,10,500,700,625,1000,50,400,125,85]) 229 | ) 230 | ], 231 | Pstutter( 232 | Pseq([1, 1, 1], inf), 233 | Pseq([0, 1, 2], inf) 234 | ) 235 | ), 236 | \pan, Pseq([-1, 0, 1], inf), 237 | \amp, 0.15 238 | ).play; 239 | 240 | 4.wait; 241 | 242 | ~bassKick.value; // 2s 243 | 244 | 4.wait; 245 | ~simpleBassLine.value(\triSaw, inf, 0.25, pitchShift: 1.25); 246 | 247 | ~bass3.value(8); // 32s 248 | ~bass3.value(8, 7500, 0.0125, 0.3, 1); // 32s 249 | (0.25).wait; 250 | ~snare3.value(4, 2000, 0.5); // 32s 251 | 252 | 2.wait; 253 | 254 | Synth(\envSine, [\sFreq, 0, \eFreq, 300, \amp, 0.5, \fadeIn, 2, \sustain, 0, \fadeOut, 0]); 255 | 256 | 257 | }).play; -------------------------------------------------------------------------------- /musical/experiments/crystal-mist.scd: -------------------------------------------------------------------------------- 1 | SynthDef(\crystal_mist) { |out=0, pan=0, freq=440, crunch=50, pulse=1.25, attack=0.005, sustain=1, decay=0.5, amp=0.25| 2 | var level, saw, reverb, pan2; 3 | 4 | level = EnvGen.kr(Env([0,amp,amp,0], [attack,sustain,decay]), 1, doneAction: 2); 5 | 6 | saw = Pulse.ar(freq, 0.5, Saw.kr(crunch, SinOsc.kr(pulse))); 7 | 8 | reverb = FreeVerb.ar(saw, 0.5, 1, 1); 9 | pan2 = Pan2.ar(saw + reverb, pan); 10 | 11 | Out.ar(out, pan2 * level); 12 | }.add; 13 | 14 | 15 | 16 | 17 | 18 | Routine({ 19 | 20 | Pbind( 21 | \instrument, \crystal_mist, 22 | \freq, Pstutter( 23 | Pseq([4], inf), 24 | Pseq([440, 330, 440, 275] * 0.618, inf) 25 | ), 26 | \dur, Pstutter( 27 | Pseq([1], inf), 28 | Pseq([1], inf) 29 | ), 30 | \crunch, 20, 31 | \pulse, 10, 32 | \amp, 0.25 33 | ).play; 34 | 35 | Pbind( 36 | \instrument, \crystal_mist, 37 | \freq, Pstutter( 38 | Pseq([4], inf), 39 | Pseq([440, 550, 440, 330] * 2, inf) 40 | ), 41 | \dur, Pstutter( 42 | Pseq([1], inf), 43 | Pseq([0.5], inf) 44 | ), 45 | \crunch, 1, 46 | \pulse, 1.25, 47 | \amp, 0.25 48 | ).play; 49 | 50 | }).play; -------------------------------------------------------------------------------- /musical/experiments/discomesque.sc: -------------------------------------------------------------------------------- 1 | SynthDef(\smoothWave) { |out=0, freq=150, imp=1, sustain=1, amp=0.5| 2 | var sust = EnvGen.kr(Env([1,1,0], [sustain, 0.75]), 1, doneAction: 2), 3 | vSaw = VarSaw.ar(freq, 0, LFTri.kr(imp).range(0, 1), amp), 4 | pan2 = Pan2.ar(vSaw, FSinOsc.kr(imp*2)*0.25), 5 | rvrb = FreeVerb.ar(pan2, 0.25, 1, 0.75); 6 | 7 | Out.ar(out, rvrb*sust); 8 | }.add; 9 | 10 | SynthDef(\bass) { |out=0, freq=150, sustain=0.25, pan=0, amp=1| 11 | var hit = 0.15, 12 | sust = EnvGen.kr(Env([1, 1, 0], [sustain, 0.05]), 1, doneAction: 2), 13 | beat = EnvGen.kr(Env([1, 1, 0], [hit, 0.05]), 1), 14 | vSaw = VarSaw.ar(XLine.kr(freq*3, freq, hit), 0, 0.5, amp) * beat, 15 | tri = LFTri.ar(XLine.kr(freq, freq/3, hit), 0, amp) * beat, 16 | pan2 = Pan2.ar(vSaw+tri, pan); 17 | 18 | Out.ar(out, pan2*sust); 19 | }.add; 20 | 21 | 22 | 23 | Routine({ 24 | 25 | Pbind( 26 | \instrument, \smoothWave, 27 | \freq, Pseq([200, 750, 400, 450, 750], inf), 28 | \dur, Pseq([2, 0.25, 0.75], inf), 29 | \imp, Pseq([0.25, 4, 90, 0.9, 150, 0.2, 25], inf), 30 | \amp, 0.25 31 | ).play; 32 | 33 | 4.wait; 34 | 35 | // 18s 36 | Pbind( 37 | \instrument, \bass, 38 | \freq, 75, 39 | \dur, Pseq([2, 0.225, 0.775, 1, 2, 2, 1], 2), 40 | \amp, 0.5 41 | ).play; 42 | 43 | 18.wait; 44 | 45 | // 10s 46 | Pbind( 47 | \instrument, \bass, 48 | \freq, 75, 49 | \dur, Pseq([0.5], inf), 50 | \amp, 0.5 51 | ).play; 52 | 53 | /*10.wait; 54 | 55 | Pbind( 56 | \instrument, \bass, 57 | \freq, 75, 58 | \dur, PdurStutter( 59 | Pstutter( 60 | Pseq([1,8,1,6], inf), 61 | Pseq([2,1,2,1], inf) 62 | ), 63 | Pstutter( 64 | Pseq([16], inf), 65 | Pseq([0.25], inf) // @todo Specify loops here 66 | ) 67 | ), 68 | \legato, 0.25, 69 | \pan, 0, 70 | \amp, 0.5 71 | ).play;*/ 72 | 73 | // @todo After a while, a regular loose hihat hit would be nice 74 | 75 | }).play; -------------------------------------------------------------------------------- /musical/experiments/dusty-waterfall.scd: -------------------------------------------------------------------------------- 1 | // Experimental instrumental based on the stage 4 theme from Touhou 10 2 | 3 | SynthDef(\dusthumm, {|freq = 440, dur = 10, crushRate = 100, crushStep = 0.1, amp = 0.2, out = 0| 4 | var osc, env, reverb; 5 | 6 | env = EnvGen.kr(Env.linen(0.005, 0.005, dur, amp, 0), doneAction: 2); 7 | osc = Pulse.ar(freq, SinOsc.kr(crushRate, 0, 1).range(crushStep).abs, env); 8 | reverb = FreeVerb.ar(osc, 1, 1, 0.5); 9 | 10 | Out.ar(out, reverb); 11 | }).add; 12 | 13 | SynthDef(\reverseDusthumm, {|freq = 440, dur = 10, crushRate = 100, crushStep = 0.1, amp = 0.2, out = 0| 14 | var osc, env, reverb; 15 | 16 | env = EnvGen.kr(Env.linen(dur, 0.005, 0.1, amp, 0), doneAction: 2); 17 | osc = Pulse.ar(freq, SinOsc.kr(crushRate, 0, 1).range(crushStep).abs, env); 18 | reverb = FreeVerb.ar(osc, 1, 1, 0.5); 19 | 20 | Out.ar(out, reverb); 21 | }).add; 22 | 23 | 24 | Routine({ 25 | 26 | /*Pbind( 27 | \instrument, \reverseDusthumm, 28 | \freq, Pstutter( 29 | Pseq([10, 6, 3, 1], inf), 30 | Pseq([100, 75, 50, 250], inf) 31 | ), 32 | \dur, 0.75/2, 33 | \amp, 0.5 34 | ).play;*/ 35 | 36 | /*Pbind( 37 | \instrument, \reverseDusthumm, 38 | \freq, Pseq([1, 400, 750, 500]*2, inf), 39 | \dur, Pseq([0.75, 0.5, 0.5, 0.25]/2, inf), 40 | \amp, 0.25, 41 | \out, 1 42 | ).play;*/ 43 | 44 | Synth(\dusthumm, [\freq, 1, \dur, 10, \amp, 0.25, \out, 1]); 45 | (5).wait; 46 | Synth(\reverseDusthumm, [\freq, 1, \dur, 5, \amp, 1]); 47 | (4.9).wait; 48 | 49 | // Upper right-hand 50 | Pbind( 51 | \instrument, \dusthumm, 52 | \freq, Pseq([59,59, 61, 62, 64,66,59,59, 68, 62,64,66,66, 69, 66, 69, 66, 63, 66, 63, 66, 59,59,57, 59, 55,64,61,61,59,61,62,64,61,66].midicps, inf), 53 | \dur, Pseq([2, 0.75,0.75,0.5,1, 1, 1, 0.5,0.5,1, 1, 1, 0.5,0.5,0.25,0.25,2.5,0.5,0.5,0.5,0.5,1, 1, 0.5,0.5,1, 1, 1, 1, 1, 1, 1, 1, 2, 1]/2, inf), 54 | \amp, 0.25, 55 | \out, 1 56 | ).play; 57 | 58 | // Lower right-hand 59 | Pbind( 60 | \instrument, \dusthumm, 61 | \freq, Pseq([52,54,55,54,52,54,55,54,52,54,54,54,55,57,59].midicps, inf), 62 | \dur, Pseq([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4]/2, inf), 63 | \amp, 0.1, 64 | \out, 1 65 | ).play; 66 | 67 | // left-hand 68 | Pbind( 69 | \instrument, \dusthumm, 70 | \freq, Pseq([28, 35, 40,30, 37, 42,31, 38, 43,30, 37, 42].midicps, 3), 71 | \dur, Pseq([0.5,0.5,1, 0.5,0.5,1, 0.5,0.5,1, 0.5,0.5,1 ]/2, 3), 72 | \amp, 0.5 73 | ).play; 74 | 12.wait; 75 | 76 | // left-hand (cont) 77 | Pbind( 78 | \instrument, \dusthumm, 79 | \freq, Pseq([31, 38, 43,33, 40, 45].midicps, 1), 80 | \dur, Pseq([0.5,0.5,1, 0.5,0.5,1]/2, 1), 81 | \amp, 0.5 82 | ).play; 83 | 2.wait; 84 | 85 | // Upper left-hand (cont) 86 | Pbind( 87 | \instrument, \dusthumm, 88 | \freq, Pseq([37].midicps, 6), 89 | \dur, Pseq([0.5]/2, inf), 90 | \amp, 0.25 91 | ).play; 92 | 93 | // Lower left-hand (cont) 94 | Pbind( 95 | \instrument, \dusthumm, 96 | \freq, Pseq([30].midicps, 6), 97 | \dur, Pseq([0.5]/2, inf), 98 | \amp, 0.25 99 | ).play; 100 | 101 | }).play; -------------------------------------------------------------------------------- /musical/experiments/glitches.sc: -------------------------------------------------------------------------------- 1 | SynthDef(\glitch) { |out=0, freqmax=1e4, bandrange=50| 2 | var osc; 3 | 4 | osc = Limiter.ar( 5 | LeakDC.ar( 6 | SinOsc.ar( 7 | 0.11, 8 | BRF.ar( 9 | SinOsc.ar( 10 | SinOsc.ar(0.12).exprange(1, freqmax), 11 | 2pi 12 | ), 13 | 1 / SinOsc.ar(0.13, 6pi).range(1, bandrange) 14 | ) 15 | ) 16 | ) 17 | ); 18 | 19 | Out.ar(out, osc); 20 | }.send(s); 21 | 22 | 23 | 24 | // I want that pitch-shift down sound that comes in the right channel after a few seconds! 25 | Routine({ 26 | Synth(\glitch, [\bandrange, [25, 100]]); 27 | Synth(\glitch, [\out, 1, \freqmax, 1e2, \bandrange, [100, 25]]); 28 | }).play; -------------------------------------------------------------------------------- /musical/experiments/jag alska dig-du alska mig.scd: -------------------------------------------------------------------------------- 1 | // Cover of Concertmate's "Je t'aimes, tu m'aimes?" (http://concertmate.evenement0.net/volume_1.php) 2 | 3 | SynthDef(\squareWave) { |out=0, pan=0, freq=440, attack=0.005, sustain=0.1, decay=0.005, amp=0.25| 4 | var level, pulse, reverb, pan2; 5 | 6 | level = EnvGen.kr(Env([0,amp,amp,0], [attack, sustain, decay+0.005]), 1, doneAction: 2); 7 | 8 | pulse = Pulse.ar(freq, 0.5); 9 | reverb = FreeVerb.ar(pulse, 0.5, 1, 0.5); 10 | 11 | pan2 = Pan2.ar(reverb, pan); 12 | 13 | Out.ar(out, pan2 * level); 14 | }.add; 15 | 16 | SynthDef(\icePick) { |out=0, pan=0, freq=440, attack=0.005, sustain=0.1, decay=0.5, amp=0.25| 17 | var level, plickLevel, plick, pulse, pulse2, saw, reverb, reverb2, pan2; 18 | 19 | plick = 0.05; 20 | 21 | level = EnvGen.kr(Env([0,amp,amp,0], [attack,sustain,decay]), 1, doneAction: 2); 22 | plickLevel = EnvGen.kr(Env([0,amp,amp,0], [attack,plick,decay]), 1); 23 | 24 | saw = Saw.kr(10, 0.75); 25 | 26 | pulse = Pulse.ar(freq, 0.5, plickLevel); 27 | pulse2 = Pulse.ar(freq * 0.75, 0.5, plickLevel * saw); 28 | reverb = FreeVerb.ar(pulse, 0.5, 1, 1); 29 | reverb2 = FreeVerb.ar(pulse2, 0.5, 1, 0.5); 30 | 31 | pan2 = Pan2.ar(reverb + reverb2, pan); 32 | 33 | Out.ar(out, pan2 * level); 34 | }.add; 35 | 36 | SynthDef(\smoothWave) { |out=0, freq=150, impulse=1, gate=1, attack=0.005, decay=0.75, triMin=0, triMax=1, amp=0.5| 37 | var level, vSaw, pan2, reverb; 38 | 39 | level = Linen.kr(gate, attack, amp, decay, doneAction: 2); 40 | vSaw = VarSaw.ar(freq, 0, LFTri.kr(impulse).range(triMin, triMax)); 41 | pan2 = Pan2.ar(vSaw, FSinOsc.kr(impulse*2) * 0.25); 42 | reverb = FreeVerb.ar(pan2, 0.25, 1, 0.75); 43 | 44 | Out.ar(out, reverb * level); 45 | }.add; 46 | 47 | 48 | 49 | Routine({ 50 | 51 | Pbind( 52 | \instrument, \squareWave, 53 | \freq, Pseq([55].midicps, inf), 54 | \dur, Pseq([1,1], inf), 55 | \legato, 1, 56 | \amp, Pstutter( 57 | Pseq([4, 4*4, inf]), 58 | Pseq([0.25,0.2,0.1]) 59 | ), 60 | \out, 0 61 | ).play; 62 | 63 | Pbind( 64 | \instrument, \squareWave, 65 | \freq, Pseq([\r, 43, \r].midicps, inf), 66 | \dur, Pseq([0.5,1,0.5], inf), 67 | \legato, 1, 68 | \amp, Pstutter( 69 | Pseq([4, 4*4, inf]), 70 | Pseq([0.25,0.2,0.1]) 71 | ), 72 | \out, 0 73 | ).play; 74 | 75 | Pbind( 76 | \instrument, \squareWave, 77 | \freq, Pseq([\r, 59].midicps, inf), 78 | \dur, Pseq([1,1], inf), 79 | \legato, 1, 80 | \amp, Pstutter( 81 | Pseq([4, 4*4, inf]), 82 | Pseq([0.25,0.2,0.1]) 83 | ), 84 | \out, 0 85 | ).play; 86 | 87 | 4.wait; 88 | 89 | Pbind( 90 | \instrument, \icePick, 91 | \freq, Pswitch( 92 | [ 93 | Pseq([47,50,48,45,52]), 94 | Pseq([46,50,48,45,52]), 95 | Pseq([46,48,47,52,50,49]) 96 | ].midicps * 10, 97 | Pseq([0,1,0,2], inf) 98 | ), 99 | \dur, Pswitch( 100 | [ 101 | // 2 seconds each 102 | Pseq([0.5,0.25,0.25,0.5,0.5]), 103 | Pseq([0.5,0.25,0.25,0.25,0.25,0.5]) 104 | ], 105 | Pseq([0,0,0,1], inf) 106 | ), 107 | \legato, 1, 108 | \decay, 0.5, 109 | \amp, 0.35, 110 | \out, 1 111 | ).play; 112 | 113 | Pbind( 114 | \instrument, \squareWave, 115 | \freq, Pswitch( 116 | [ 117 | Pseq([47,49,52,54]), 118 | Pseq([47,49,52,49]) 119 | ].midicps * 2.5, 120 | Pseq([0,1], inf) 121 | ), 122 | \dur, Pseq([1], inf), 123 | \legato, 0.25, 124 | \decay, 0.5, 125 | \amp, 0.5, 126 | \out, 1 127 | ).play; 128 | 129 | 8.wait; 130 | 131 | Pbind( 132 | \instrument, \smoothWave, 133 | \freq, Pswitch( 134 | [ 135 | Pseq([38,38,39,39,38,38,39,37]), 136 | Pseq([38,38,39,39,38,38,41,37]), 137 | Pseq([38,38]) 138 | ].midicps * 1.5, 139 | Pseq([0,1,0,2], inf) 140 | ), 141 | \dur, Pswitch( 142 | [ 143 | // 4 seconds each 144 | Pseq([0.75,0.25,0.75,0.25,0.75,0.25,0.5,0.5]), 145 | Pseq([0.75,Rest(0.25+0.75+0.25+0.75+0.25+0.5+0.5)]), 146 | ], 147 | Pseq([0,0,0,1], inf) 148 | ), 149 | \impulse, 0.25, 150 | \triMin, 0.75, 151 | \triMax, 0.95, 152 | \legato, 0.7, 153 | \amp, 0.5 154 | ).play; 155 | 156 | 8.wait; 157 | 158 | Pbind( 159 | \instrument, \squareWave, 160 | \freq, Pswitch( 161 | [ 162 | Pseq([57,54,58, 58,57,58,60]), 163 | Pseq([52,49, 53,53,54,57]), 164 | Pseq([58,54,59, 52,57,54]), 165 | Pseq([54,54,53,56,52, 57,54]), 166 | Pseq([1]) 167 | ].midicps * 1.5, 168 | Pseq([0,1,2,3, 4], inf) 169 | ), 170 | \dur, Pswitch( 171 | [ 172 | // 4 seconds each 173 | Pseq([0.5,0.5,1.5, 0.5,0.25,0.25,0.5]), 174 | Pseq([0.5,0.5, 1.5,0.5,0.5,0.5]), 175 | Pseq([0.5,0.5,0.5, 1,0.5,1]), 176 | Pseq([0.25,0.25,0.5,0.5,1, 0.5,1]), 177 | Pseq([Rest(4*4)]) 178 | ], 179 | Pseq([0,1,2,3, 4], inf) 180 | ), 181 | \legato, 0.9, 182 | \amp, 0.35 183 | ).play; 184 | 185 | }).play; -------------------------------------------------------------------------------- /musical/experiments/mbv-test.scd: -------------------------------------------------------------------------------- 1 | // Based on code from http://article.gmane.org/gmane.comp.audio.supercollider.user/50457 2 | s.waitForBoot { 3 | // preparation; essentially, allocate an impulse response buffer, then follow a special buffer preparation step to set up the data the plugin needs. Different options are provided commented out for loading impulse responses from soundfiles. 4 | var lengthinsamples = 10000; 5 | ~fftsize=8192; // also 4096 works on my machine; 1024 too often and amortisation too pushed, 8192 more high load FFT 6 | 7 | { 8 | var ir, irbuffer, bufsize; 9 | var nextmod=100; 10 | 11 | ir = [0] ++0.dup(100) ++ (Array.fill(lengthinsamples,{|i| if(i%(nextmod)==0,{nextmod= rrand(80,120); 0.3*((i.asFloat/lengthinsamples).squared)},{0.0}) })); 12 | 13 | irbuffer = Buffer.loadCollection(s, ir); 14 | 15 | s.sync; 16 | 17 | bufsize= PartConv.calcBufSize(~fftsize, irbuffer); 18 | 19 | ~irspectrum = Buffer.alloc(s, bufsize, 1); 20 | 21 | ~irspectrum.preparePartConv(irbuffer, ~fftsize); 22 | 23 | s.sync; 24 | 25 | irbuffer.free; // don't need time domain data anymore, just needed spectral version 26 | }.fork; 27 | }; 28 | 29 | SynthDef(\starBerry) { |out=0, freq=150, filMin=0.1, filMax=0.95, imp=1, gate=1, amp=0.5| 30 | var sust = Linen.kr(gate, releaseTime: 0.25, doneAction: 2), 31 | vSaw = VarSaw.ar( 32 | freq, 33 | 0, 34 | EnvGen.kr(Env([filMin,filMax,filMin], [0.25*imp,0.75*imp], [-5,-5], 2), gate), 35 | amp 36 | ), 37 | pan2 = Pan2.ar(vSaw, FSinOsc.kr(imp*2)*0.25), 38 | rvrb = FreeVerb.ar(pan2, 0.25, 1, 0.75); 39 | 40 | Out.ar(out, rvrb*sust); 41 | }.add; 42 | 43 | // Based on code from http://new-supercollider-mailing-lists-forums-use-these.2681727.n2.nabble.com/plucked-string-waveguide-tp6890519.html 44 | SynthDef(\bubbleString) { |out=0, freq=250, amp=0.5, feedbackAmp=0.975, gate=1| 45 | var pluckAt, period, controlPeriod, block, sustain, exciter, bubble_gum, effects, synth, feedback, d1, d2; 46 | 47 | // Properties 48 | pluckAt = 0.25; 49 | period = freq.reciprocal; 50 | controlPeriod = ControlRate.ir; 51 | block = controlPeriod.reciprocal / 2; 52 | 53 | // Synths 54 | sustain = Linen.kr(gate, susLevel: amp, releaseTime: 20, doneAction: 2); 55 | exciter = EnvGen.ar( 56 | Env.new( 57 | [0,1,0], 58 | [period * pluckAt + 0.01, period * (1-pluckAt) + 0.01], 59 | 'linear' 60 | ), 61 | doneAction: 0 62 | ); 63 | bubble_gum = SinOsc.kr(0.5).abs().max(0.5); 64 | effects = bubble_gum; 65 | synth = ( 66 | Pulse.ar(freq, bubble_gum, 0.125) + 67 | VarSaw.ar(freq, 0, LFTri.kr().range(0.5,1)) 68 | ) * exciter; 69 | 70 | // Output 71 | feedback = LocalIn.ar(1); 72 | d1 = DelayL.ar(synth + feedback, period-block, period-block); 73 | d2 = DelayL.ar(synth + d1.neg, period-block, period-block) * feedbackAmp; 74 | 75 | LocalOut.ar(d2.neg); 76 | 77 | Out.ar(out, d2 * effects * sustain); 78 | }.add; 79 | 80 | SynthDef(\reverse_reverb) { |in=0, out=0, amp=1| 81 | var input, new_out; 82 | 83 | input = In.ar(in, 2); 84 | new_out = PartConv.ar(input, ~fftsize, ~irspectrum.bufnum, amp) + input; 85 | 86 | ReplaceOut.ar(out, new_out); 87 | }.add; 88 | 89 | // Based on code from http://permalink.gmane.org/gmane.comp.audio.supercollider.user/77153 90 | SynthDef(\tape_delay) { |in=0, out=0, imp=1, lag=3, maxLag=0.2, decayTime=6| 91 | var input, newOut, delayTime, laggedDelayTime, outDelay; 92 | 93 | input = In.ar(in, 2); 94 | // Delay time jumps on impulse 95 | delayTime = Demand.kr(Impulse.kr(imp), 0, Dseq([0.3], inf)); 96 | // Amount of time to reach new value 97 | laggedDelayTime = Lag.kr(delayTime, lag); 98 | // CombC - delay with feedback 99 | newOut = CombC.ar(input, maxLag, laggedDelayTime, decayTime) + in; 100 | 101 | ReplaceOut.ar(out, newOut); 102 | }.add; 103 | 104 | SynthDef(\vibrato) { |in=0, out=0, freq=220, imp=1| 105 | var input, newOut; 106 | 107 | input = In.ar(in, 2); 108 | 109 | newOut = FreqShift.ar(input, FSinOsc.kr(imp) * freq); 110 | 111 | ReplaceOut.ar(out, newOut); 112 | }.add; 113 | 114 | // Based on code from http://new-supercollider-mailing-lists-forums-use-these.2681727.n2.nabble.com/Distortion-effect-tp5173262p5173287.html 115 | SynthDef(\distortion) { |in=0, out=0, amount=0.99, amp=1| 116 | var input, amCoef, newOut; 117 | 118 | amCoef= 2*amount/(1-amount); 119 | 120 | input = HPF.ar(In.ar(in, 2), 400)*5; 121 | 122 | newOut = MidEQ.ar(LPF.ar((1+amCoef)*input/(1+(amCoef*input.abs)), [3800, 3900])*0.5, 120, 0.7, 8); 123 | 124 | ReplaceOut.ar(out, newOut * amp); 125 | }.add; 126 | 127 | // 1 loop = 14 seconds 128 | ~bassLine = { |synth, out=0, loops=1, legato=0.95, attack=0.005, decay=0.005, amp=0.25, speed=1, scale=1| 129 | Pbind( 130 | \instrument, synth, 131 | \freq, Pswitch( 132 | [ 133 | Pseq([28,35,40, 30,37,42, 31,38,43, 30,37,42].midicps), 134 | Pseq([31, 38, 43,33, 40, 45].midicps) 135 | ], 136 | Pstutter( 137 | Pseq([3,1], inf), 138 | Pseq([0,1], loops) 139 | ) 140 | ) * scale, 141 | \dur, Pswitch( 142 | [ 143 | Pseq([0.5,0.5,1] / 2) 144 | ], 145 | Pstutter( 146 | Pseq([14], inf), 147 | Pseq([0], loops) 148 | ) 149 | ) / speed, 150 | \feedbackAmp, 0.9975, 151 | \legato, legato, 152 | \attack, attack, 153 | \decay, decay, 154 | \amp, amp, 155 | \out, 0 156 | ).play; 157 | }; 158 | 159 | Routine({ 160 | //y = Synth(\bubbleString, [\out, 0, \freq, 220, \feedbackAmp, 0.975, \amp, 0.75]); 161 | y = Pbind( 162 | \instrument, \bubbleString, 163 | \freq, Pseq([59, 66, 62, 60, 59, 67, 64, 59, 66, 62].midicps * 1.5, inf), 164 | \dur, Pstutter( 165 | Pseq([4, 1], inf), 166 | Pseq([1.5, 2] * 2, inf) 167 | ), 168 | \feedbackAmp, 0.9975, 169 | \amp, 0.25, 170 | \out, 0 171 | );//.play; 172 | ~bassLine.value(\bubbleString, loops:inf, amp:0.25, speed:1, scale:4); 173 | a = Synth(\distortion, [\in, 0, \out, 0, \amount, 0.25]); 174 | b = Synth.after(a, \vibrato, [\in, 0, \out, 0, \freq, -16, \imp, 1/8]); 175 | c = Synth.after(b, \reverse_reverb, [\in, 0, \out, 0]); 176 | d = Synth.after(c, \tape_delay, [\in, 0, \out, 0, \imp, 0.15, \lag, 0.25, \maxLag, 0.5, \decayTime, 4]); 177 | }).play; -------------------------------------------------------------------------------- /musical/experiments/resort.scd: -------------------------------------------------------------------------------- 1 | // Kind of rambunctious amplified bass guitar 2 | 3 | SynthDef(\sineBell) { |out=0, pan=0, freq=100, attack=0.005, sustain=0.1, decay=0.005, amp=1| 4 | var sine, pan2; 5 | 6 | sine = SinOsc.ar( 7 | freq, 8 | 0, 9 | EnvGen.kr(Env([0,amp,amp,0], [attack,sustain,decay]), 1, doneAction: 2) 10 | ); 11 | 12 | pan2 = Pan2.ar(sine, pan); 13 | 14 | Out.ar(out, pan2); 15 | }.add; 16 | 17 | SynthDef(\wolfCub) { |out=0, freq=150, sustain=0.25, attack=0.75, decay=0.25, pan=0, amp=0.5| 18 | var aEnv = EnvGen.kr( 19 | Env.linen(sustain*attack, sustain*(1-attack), decay, amp, [-2.5,0,0]), 20 | 1, 21 | doneAction: 2 22 | ), 23 | sine = SinOsc.ar( 24 | freq * ((aEnv + (1 - amp))*0.5), 25 | 0, 26 | aEnv 27 | ).min(amp).max(0-amp), 28 | rvrb = sine + FreeVerb.ar(sine, 0.5, 1, 0.5), 29 | pan2 = Pan2.ar(rvrb, pan); 30 | 31 | Out.ar(out, pan2); 32 | }.add; 33 | 34 | SynthDef(\bassDrum) { |out=0, freq=150, sustain=0.25, pan=0, amp=1| 35 | var hit_time, sust, osc, osc2, pan2; 36 | 37 | hit_time = 0.15; 38 | sust = EnvGen.kr(Env([1, 1, 0], [sustain, 0.05]), 1, doneAction: 2); 39 | 40 | osc = SinOsc.ar(XLine.kr(freq*1.618, freq/3.236, hit_time), 0, amp); 41 | osc2 = osc - SinOsc.kr(freq/6.472, 0, 0.25); 42 | pan2 = Pan2.ar(osc2, pan); 43 | 44 | Out.ar(out, pan2*sust); 45 | }.add; 46 | 47 | // 1 loop = 2s 48 | ~bassKick = { |loops=1, freq=150, amp=0.5, dur=0.5, legato=0.25, dStut1=1, dStut2=1, dStut3=4, pan=0, speed=1| 49 | Pbind( 50 | \instrument, \bassDrum, 51 | \freq, Pseq(freq.asArray, inf), 52 | \dur, PdurStutter( 53 | Pstutter( 54 | Pseq(dStut1.asArray, inf), 55 | Pseq(dStut2.asArray, inf) 56 | ), 57 | Pstutter( 58 | Pseq(dStut3.asArray, loops), 59 | Pseq(dur.asArray/speed, loops) 60 | ) 61 | ), 62 | \legato, legato, 63 | \pan, pan, 64 | \amp, amp 65 | ).play; 66 | }; 67 | 68 | // 1 loop = 4 seconds 69 | ~bassKick2 = { |loops=1, freq=150, amp=0.5, legato=0.25, pan=0| 70 | ~bassKick.value(loops, freq, amp, [0.5, 2, 0.25, 0.5], legato, [7,1,7,1], [1,2,1,3], [16,1,2,13], pan); 71 | }; 72 | 73 | // 1 loop = 14 seconds 74 | ~bassLine = { |synth, loops=1, legato=0.95, attack=0.005, decay=0.005, amp=0.25, imp=0.125, speed=1, scale=1, out=0| 75 | Pbind( 76 | \instrument, synth, 77 | \freq, Pswitch( 78 | [ 79 | Pseq([28,32,38,42].midicps), 80 | Pseq([45,40,33,43].midicps), 81 | Pseq([43,33,40,45].midicps), 82 | Pseq([48,38,45,50].midicps), 83 | Pseq([50,45,38,48].midicps), 84 | ], 85 | Pstutter( 86 | Pseq([3,1,3,1,3,1,3,1], inf), 87 | Pseq([0,1,0,2,0,3,0,4], loops) 88 | ) 89 | ) * scale, 90 | \dur, Pswitch( 91 | [ 92 | Pseq([0.25] / 2) 93 | ], 94 | Pstutter( 95 | Pseq([14], inf), 96 | Pseq([0], loops) 97 | ) 98 | ) / speed, 99 | \legato, legato, 100 | \attack, attack, 101 | \decay, decay, 102 | \amp, amp, 103 | \imp, imp, 104 | \pan, 0, 105 | \out, out 106 | ).play; 107 | }; 108 | 109 | SynthDef(\effectTest) { |effectBus, out=0, sustain=15| 110 | var audio, thing, thing2; 111 | 112 | audio = In.ar(effectBus); 113 | 114 | thing = SinOsc.kr(0.5, 0, 1); 115 | thing2 = SinOsc.kr(0.25, 0.5, 1); 116 | 117 | Out.ar(out, [audio * thing, audio * thing2]); 118 | }.add; 119 | 120 | SynthDef(\effectTest2) { |effectBus, out=0, amount=0.99| 121 | var in, amCoef, audio; 122 | 123 | in = HPF.ar(In.ar(effectBus), 400)*5; 124 | amCoef= 2 * amount / (1-amount); 125 | audio = MidEQ.ar(LPF.ar((1+amCoef)*in/(1+(amCoef*in.abs)), [3800, 3900])*0.5, 120, 0.7, 8); 126 | 127 | Out.ar(out, audio); 128 | }.add; 129 | 130 | 131 | 132 | Routine({ 133 | var dur = 4, 134 | legato = 1; 135 | 136 | ~sources = Group.new; 137 | 138 | ~edge = Group.new(~sources, \addToTail); 139 | ~edgeBus = Bus.audio(s, numChannels: 2); 140 | 141 | ~pitchShifter = Group.new(~sources, \addToTail); 142 | ~pitchShifterBus = Bus.audio(s, numChannels: 2); 143 | 144 | //~bassKick2.value(4, freq:400, dur:2, amp:0.25); 145 | 146 | //Synth(\wolfCub, [\freq, 75 * 20, \sustain, 0.75, \attack, 0.05, \decay, 0.75, \amp, 0.15, \out, 0]); 147 | //~bassLine.value(\sineBell, out:~pitchShifterBus, loops:inf, legato:0.9, amp:0.75, attack:0.025, decay:0.5, speed:1, scale:4); 148 | ~bassLine.value(\sineBell, out:~edgeBus, loops:inf, legato:0.25, amp:0.1, attack:0.5, decay:0.05, speed:1/4, scale:2); 149 | 150 | Synth(\effectTest, [\effectBus, ~pitchShifterBus], ~pitchShifter, \addToTail); 151 | Synth(\effectTest2, [\effectBus, ~edgeBus, \amount, 0.99], ~edge, \addToTail); 152 | }).play; -------------------------------------------------------------------------------- /musical/experiments/shoegazer.scd: -------------------------------------------------------------------------------- 1 | // Not very shoegazey, but it has a nice little wolf howl 2 | 3 | // TODO: Add bass line from riff 4 | 5 | SynthDef(\vibeSpark) { |out=0, imp=5, freq=150, sustain=0.25, attack=0.75, decay=0.25, pan=0, amp=0.5| 6 | var aEnv = EnvGen.kr( 7 | Env.linen(sustain*attack, sustain*(1-attack), decay, amp, [-2.5,0,0]), 8 | 1, 9 | doneAction: 2 10 | ), 11 | saw = Saw.ar(imp, aEnv), 12 | sine = SinOsc.ar(freq*((aEnv + (1 - amp))*0.5), 0, saw).min(amp).max(0-amp), 13 | rvrb = sine + FreeVerb.ar(sine, 0.5, 1, 0.5), 14 | pan2 = Pan2.ar(rvrb, pan); 15 | 16 | Out.ar(out, pan2); 17 | }.add; 18 | 19 | SynthDef(\starBerry) { |out=0, freq=150, filMin=0.1, filMax=0.95, imp=1, gate=1, amp=0.5| 20 | var sust = Linen.kr(gate, releaseTime: 0.25, doneAction: 2), 21 | vSaw = VarSaw.ar( 22 | freq, 23 | 0, 24 | EnvGen.kr(Env([filMin,filMax,filMin], [0.25*imp,0.75*imp], [-5,-5], 2), gate), 25 | amp 26 | ), 27 | pan2 = Pan2.ar(vSaw, FSinOsc.kr(imp*2)*0.25), 28 | rvrb = FreeVerb.ar(pan2, 0.25, 1, 0.75); 29 | 30 | Out.ar(out, rvrb*sust); 31 | }.add; 32 | 33 | SynthDef(\shoeguitar) { |out=0, freq=150, sustain=0.25, attack=0.75, decay=2.5, amp=0.5| 34 | var amp_env, synth, reverb, panning, fb_in, fb_out, processing, speed; 35 | 36 | speed = LFNoise0.kr(0.5, 2, 2.05); 37 | 38 | amp_env = EnvGen.kr( 39 | Env.linen(sustain*attack, sustain*(1-attack), decay, amp, [-2.5,0,0]), 40 | 1, 41 | doneAction: 2 42 | ); 43 | 44 | synth = SinOsc.ar( 45 | freq * ((amp_env + (1 - amp)) * ((SinOsc.kr(1/2, 0, 0.5) * 0.025) + 0.675)), 46 | 0, 47 | amp_env 48 | ).min(amp).max(0-amp); 49 | 50 | Out.ar(out, synth); 51 | }.add; 52 | 53 | SynthDef(\feedback) { |in=#[0,1], out=#[0,1], amp=1| 54 | var input, fb_in, fb_out, processing, speed; 55 | 56 | speed = LFNoise0.kr(0.5, 2, 2.05); 57 | input = In.ar(in, 1); 58 | fb_in = LocalIn.ar(1); 59 | 60 | // Mix the input with the feedback loop, fixing gain at 1.2 61 | processing = input + LeakDC.ar(DelayN.ar(fb_in, 3.5, speed, 1.2)); 62 | // Resonant low-pass filter moving at various rates determined by `speed`, with frequencies between 400-1200 63 | processing = RLPF.ar(processing, LFNoise1.kr(speed, 400, 1200), 0.5); 64 | // Square off the wave form (distortion) 65 | processing = processing.clip; 66 | 67 | fb_out = LocalOut.ar(processing); 68 | 69 | ReplaceOut.ar(out, processing * amp); 70 | }.add; 71 | 72 | SynthDef(\spacious) { |in=#[0,1], out=#[0,1], pan=0, amp=1| 73 | var input, processing; 74 | 75 | input = In.ar(in, 1); 76 | 77 | processing = FreeVerb.ar(input, 1, 0.5, 1) + FreeVerb.ar(input, 1, 1, 0.5); 78 | processing = Pan2.ar(processing, pan); 79 | 80 | Out.ar(out, processing * amp); 81 | }.add; 82 | 83 | 84 | SynthDef(\morningAlert) { |out=0, freq=150, sustain=0.25, attack=0.75, decay=2.5, pan=0, amp=0.5| 85 | var amp_env, synth, reverb, panning; 86 | 87 | amp_env = EnvGen.kr( 88 | Env.linen(sustain*attack, sustain*(1-attack), decay, amp, [-2.5,0,0]), 89 | 1, 90 | doneAction: 2 91 | ); 92 | 93 | synth = Saw.ar( 94 | freq * ((amp_env + (1 - amp)) * ((SinOsc.kr(1, 0, 0.5) * 0.025) + 0.475)), 95 | amp_env * Pulse.kr(1, 0.25) 96 | ).min(amp).max(0-amp); 97 | 98 | reverb = FreeVerb.ar(synth, 1, 0, 1) + FreeVerb.ar(synth, 1, 1, 0.5); 99 | panning = Pan2.ar(reverb, pan); 100 | 101 | Out.ar(out, panning); 102 | }.add; 103 | 104 | SynthDef(\wolfCub) { |out=0, freq=150, sustain=0.25, attack=0.75, decay=5, pan=0, amp=0.5| 105 | var amp_env, sine, reverb, panning; 106 | 107 | amp_env = EnvGen.kr( 108 | Env.linen(sustain*attack, sustain*(1-attack), decay, amp, [-2.5,0,0]), 109 | 1, 110 | doneAction: 2 111 | ); 112 | 113 | sine = SinOsc.ar( 114 | freq * ((amp_env + (1 - amp))*0.5), 115 | 0, 116 | amp_env 117 | ).min(amp).max(0-amp); 118 | 119 | reverb = sine + FreeVerb.ar(sine, 0.5, 1, 0.5); 120 | panning = Pan2.ar(reverb, pan); 121 | 122 | Out.ar(out, panning); 123 | }.add; 124 | 125 | SynthDef(\chipperWolfCub) { |out=0, freq=150, sustain=0.25, attack=0.75, decay=5, pan=0, amp=0.5| 126 | var amp_env, sine, reverb, panning; 127 | 128 | amp_env = EnvGen.kr( 129 | Env.linen(sustain*attack, sustain*(1-attack), decay, amp, [-2.5,0,0]), 130 | 1, 131 | doneAction: 2 132 | ); 133 | 134 | sine = SinOsc.ar( 135 | freq * ((amp_env + (1 - amp))*0.5), 136 | 0, 137 | amp_env * Saw.kr(200) * Pulse.kr(10, 0.25) 138 | ).min(amp).max(0-amp); 139 | 140 | reverb = sine + FreeVerb.ar(sine, 0.5, 1, 0.5); 141 | panning = Pan2.ar(reverb, pan); 142 | 143 | Out.ar(out, panning); 144 | }.add; 145 | 146 | // Based on code from http://new-supercollider-mailing-lists-forums-use-these.2681727.n2.nabble.com/Distortion-effect-tp5173262p5173287.html 147 | SynthDef(\distortion) { |in=#[0,1], out=#[0,1], amount=0.99, amp=1, freq=0.25| 148 | var input, mod_amount, amCoef, newOut; 149 | 150 | mod_amount = FSinOsc.kr(freq).range(amount, 1) * amount; 151 | amCoef= 2*mod_amount/(1-mod_amount); 152 | 153 | input = HPF.ar(In.ar(in, 2), 400)*5; 154 | 155 | newOut = MidEQ.ar(LPF.ar((1+amCoef)*input/(1+(amCoef*input.abs)), [3800, 3900])*0.5, 120, 0.7, 8); 156 | 157 | ReplaceOut.ar(out, newOut * amp); 158 | }.add; 159 | 160 | SynthDef(\vibrato) { |in=#[0,1], out=#[0,1], freq=220, imp=1| 161 | var input, newOut; 162 | 163 | input = In.ar(in, 2); 164 | 165 | newOut = FreqShift.ar(input, (FSinOsc.kr(imp) * freq) - (freq * MouseY.kr(0, 1))); 166 | //newOut = FreqShift.ar(input, FSinOsc.kr(imp) * freq * MouseY.kr(0, freq)); 167 | 168 | ReplaceOut.ar(out, newOut); 169 | }.add; 170 | 171 | 172 | 173 | // 1 loop = 8 seconds 174 | ~bassMelody = { |synth, loops=1, amp=0.25, imp=1| 175 | Pbind( 176 | \instrument, synth, 177 | \freq, Pstutter( 178 | Pseq([16 / imp], inf), 179 | Pseq([24, 24, 26, 19].midicps * 5, loops) 180 | ), 181 | \dur, 0.1 * imp, 182 | \legato, 1, 183 | \filMax, 0.1, 184 | \imp, imp, 185 | \amp, amp 186 | ).play; 187 | }; 188 | 189 | 190 | 191 | Routine({ 192 | 193 | var speed = 0.75; 194 | 195 | Pbind( 196 | \instrument, \morningAlert, 197 | \freq, Pseq([75, 50, 65, 40] * 10, inf), 198 | \dur, Pseq([0.75, 0.75, 0.75, 1.125], 2), 199 | \attack, 0.05, 200 | \decay, 1, 201 | \legato, 0.9, 202 | \amp, 0.5, 203 | \out, 0 204 | );//.play; 205 | 206 | /*Pbind( 207 | \instrument, \wolfCub, 208 | \freq, Pseq([75, 50, 65, 40] * 20, inf), 209 | \dur, Pseq([0.75, 0.75, 0.75, 1.125] * 4, inf), 210 | \attack, 0.05, 211 | \decay, 0.75, 212 | \legato, 0.9, 213 | \amp, 0.1, 214 | \out, 0 215 | ).play;*/ 216 | 217 | //((3.375 + 0.625) * 2).wait; 218 | 219 | Pbind( 220 | \instrument, \shoeguitar, 221 | \freq, Pswitch( 222 | [ 223 | Pseq([\r]), // 0 224 | Pseq([75] * 10), // 1 225 | Pseq([79, 71, 76, 68, \r].midicps), // 2 226 | Pseq([62, 60, 53, 58].midicps), // 3 227 | ], 228 | Pseq([2,3], inf), 229 | ), 230 | \dur, Pswitch( 231 | [ 232 | Pseq([4]), // 0 233 | Pseq([1.5, 1.5, 1.5, 3, 0.5]), // 1 234 | Pseq([4, 4, 4, 4]), // 2 235 | ], 236 | Pseq([1,2], inf), 237 | ), 238 | \attack, 1, 239 | \decay, 0.5, 240 | \legato, 1, 241 | \amp, 0.15, 242 | \out, [0,1] 243 | ).play; 244 | 245 | a = Synth(\feedback, [\in, 0, \out, 0]); 246 | b = Synth.after(a, \vibrato, [\in, 0, \out, 0, \imp, 1/2, \freq, 16]); 247 | c = Synth.after(b, \distortion, [\in, 0, \out, 0, \amount, 0.9]); 248 | d = Synth.after(c, \spacious, [\in, 0, \out, 0]); 249 | 250 | /*Pbind( 251 | \instrument, \shoeguitar, 252 | \freq, Pseq([75, 50, 65, 40] * 7.5, inf), 253 | \dur, Pseq([0.75, 0.75, 0.75, 1.125] * 2, inf), 254 | \attack, 0.5, 255 | \decay, 1, 256 | \legato, 1, 257 | \amp, 0.5, 258 | \out, [0,1] 259 | ).play;*/ 260 | 261 | //4.wait; 262 | 263 | //~bassMelody.value(\starBerry, loops:20, amp:0.75, imp:7.5); 264 | 265 | Pbind( 266 | \instrument, \vibeSpark, 267 | \freq, Pseq([75, 50, 65, 40] * 2, inf, 1), 268 | \dur, Pseq([1.5, 1.5, 1.5, 2.25] / 2, inf), 269 | \attack, 0.75, 270 | \decay, 0.125, 271 | \legato, 0.5, 272 | \imp, 0.00025, 273 | \amp, 0.05, 274 | \out, 0 275 | );//.play; 276 | }).play; -------------------------------------------------------------------------------- /musical/experiments/synth shuffle.sc: -------------------------------------------------------------------------------- 1 | SynthDef(\bubbleSine) { |out=0, freq=150, filMin=0, filMax=1, imp=0.05, pulse=5, sustain=10, amp=0.5| 2 | var sust = EnvGen.kr(Env([amp,amp,0], [sustain, 0.75]), 1, doneAction: 2), 3 | bubble_gum = SinOsc.kr(0.5).abs().max(0.5).min(0.95), 4 | synth = VarSaw.ar( 5 | freq, 6 | 0, 7 | bubble_gum, 8 | 1 9 | ); 10 | 11 | Out.ar(out, synth*sust); 12 | }.add; 13 | 14 | SynthDef(\sickSine) { |out=0, freq=150, gate=1, amp=0.5| 15 | var sust = Linen.kr(gate, susLevel: amp, doneAction: 2), 16 | bubble_gum = SinOsc.kr(0.5).abs().max(0.5).min(0.95), 17 | saw = Saw.kr(bubble_gum), 18 | pulse = Pulse.kr(bubble_gum/0.5, 0.5, 1).abs().range(0,0.925), 19 | sine = SinOsc.kr(bubble_gum).range(0,1).max(0.5), 20 | synth = VarSaw.ar( 21 | freq + (5 * sine), 22 | 0, 23 | bubble_gum * pulse, 24 | saw 25 | ); 26 | 27 | Out.ar(out, synth*sust); 28 | }.add; 29 | 30 | SynthDef(\ghostBoo) { |out=0, freq=250, sustain=1, amp=0.5| 31 | var level = EnvGen.kr(Env.linen(sustainTime: sustain), doneAction: 2) * amp, 32 | // effects 33 | bubble_gum = SinOsc.kr(0.5).abs().max(0.5).min(0.95), 34 | wiggle = SinOsc.kr(5, 0, Line.kr(1, 0, sustain)).range(-0.5, 0.5), 35 | // kr 36 | saw = Saw.kr(bubble_gum), 37 | pulse = Pulse.kr(bubble_gum/0.5, 0.5).abs().range(0,0.925), 38 | sine = SinOsc.kr(bubble_gum).range(0,1).max(0.5), 39 | // ar 40 | synth = VarSaw.ar( 41 | freq + (freq/2 * wiggle * bubble_gum), 42 | 0, 43 | bubble_gum * pulse, 44 | saw 45 | ); 46 | 47 | Out.ar(out, synth*level); 48 | }.add; 49 | 50 | SynthDef(\bubbleString) { |out=0, freq=250, amp=0.5, feedbackAmp=0.975, gate=1| 51 | // Properties 52 | var pluckAt = 0.5, 53 | period = freq.reciprocal, 54 | controlPeriod = ControlRate.ir, 55 | block = controlPeriod.reciprocal, 56 | // Synths 57 | sustain = Linen.kr(gate, susLevel: amp, doneAction: 0), 58 | exciter = EnvGen.ar( 59 | Env.new( 60 | [0,1,0], 61 | [period * pluckAt + 0.01, period * (1-pluckAt) + 0.01], 62 | 'linear' 63 | ), 64 | doneAction: 0 65 | ), 66 | bubble_gum = SinOsc.kr(0.5).abs().max(0.5), 67 | effects = bubble_gum, 68 | synth = ( 69 | Pulse.ar(freq, bubble_gum) + 70 | VarSaw.ar(freq, 0, LFTri.kr(0.5).range(0.5,1)) 71 | ) * exciter, 72 | // Output 73 | feedback = LocalIn.ar(1), 74 | d1 = DelayL.ar(synth + feedback, period-block, period-block), 75 | d2 = DelayL.ar(synth + d1.neg, period-block, period-block) * feedbackAmp; 76 | 77 | LocalOut.ar(d2.neg); 78 | 79 | Out.ar(out, d2 * effects * sustain); 80 | }.add; 81 | 82 | SynthDef(\cutString) { |out=0, freq=250, amp=0.5, feedbackAmp=0.97, sustain=1| 83 | // Properties 84 | var pluckAt = 0.5, 85 | period = freq.reciprocal, 86 | controlPeriod = ControlRate.ir, 87 | block = controlPeriod.reciprocal, 88 | // Synths 89 | level = EnvGen.kr(Env.linen(sustainTime: sustain), doneAction: 0), 90 | exciter = EnvGen.ar( 91 | Env.new( 92 | [0,1,0], 93 | [period * pluckAt + 0.01, period * (1-pluckAt) + 0.01], 94 | 'linear' 95 | ), 96 | doneAction: 0 97 | ), 98 | bubble_gum = SinOsc.kr(0.5).abs().max(0.5), 99 | stepAmp = Stepper.kr(Impulse.kr(5), 0, 0, 1, 1), 100 | effects = stepAmp * bubble_gum, 101 | modulator = Saw.ar(freq/1.618, Saw.kr(2)), 102 | synth = ( 103 | Pulse.ar(freq, bubble_gum) + 104 | VarSaw.ar(freq, 0, bubble_gum) 105 | ) * exciter, 106 | // Output 107 | feedback = LocalIn.ar(1), 108 | d1 = DelayL.ar(synth + feedback, period-block, period-block), 109 | d2 = DelayL.ar(synth + d1.neg, period-block, period-block) * feedbackAmp; 110 | 111 | LocalOut.ar(d2.neg); 112 | 113 | Out.ar(out, d2 * effects * level); 114 | }.add; 115 | 116 | 117 | 118 | //Synth(\bubbleSine, [\freq, 220]); 119 | 120 | 121 | 122 | // 1 loop = 8 seconds 123 | ~melody4 = { |synth, loops=1, amp=0.25, shift=1, speed=1| 124 | Pbind( 125 | \instrument, synth, 126 | \freq, Pseq([59, 66, 62, 60, 59, 67, 64, 59, 66, 62].midicps*shift, loops), 127 | \dur, Pstutter( 128 | Pseq([4, 1], inf), 129 | Pseq([1.5, 2] / 2 / speed, inf) 130 | ), 131 | \legato, 1, 132 | \amp, amp 133 | ).play; 134 | }; 135 | 136 | 137 | 138 | Routine({ 139 | 140 | ~melody4.value(\ghostBoo, 10, 0.5, 4/4, 2); 141 | 142 | /* 143 | ~melody4.value(\cutString, 10, 0.5, 4/4, 2); 144 | //~melody4.value(\cutString, 10, 0.05, 2/4, 10); 145 | ~melody4.value(\bubbleSine, 4, 0.5, 2/4); 146 | */ 147 | 148 | /* 149 | Synth(\bubbleString, [\freq, 100, \amp, 0.5, \feedbackAmp, 0.995]); 150 | (7.5).wait; 151 | Synth(\bubbleString, [\freq, 90, \amp, 0.5, \feedbackAmp, 0.995]); 152 | (2.5).wait; 153 | Synth(\bubbleString, [\freq, 100, \amp, 0.5, \feedbackAmp, 0.95]); 154 | */ 155 | 156 | /* 157 | ~melody4.value(\bubbleSine, 1, 0.25, 6/4); 158 | (8).wait; 159 | ~melody4.value(\bubbleSine, 2, 0.5, 6/4, 2); 160 | */ 161 | //~melody4.value(\sickSine, 4, 0.5, 2/4, 1/2); 162 | //~melody4.value(\bubbleSine, 4, 0.5, 2/4); 163 | 164 | }).play; -------------------------------------------------------------------------------- /musical/failures/bremen march.scd: -------------------------------------------------------------------------------- 1 | // A very very sad attempt at a chiptune rendition of the Bremen March theme from Majora's Mask 2 | 3 | SynthDef(\icePick) { |out=0, pan=0, freq=440, attack=0.005, sustain=0.1, decay=0.5, amp=0.25| 4 | var level, plickLevel, plick, pulse, pulse2, saw, reverb, reverb2, pan2; 5 | 6 | plick = 0.05; 7 | 8 | level = EnvGen.kr(Env([0,amp,amp,0], [attack,sustain,decay]), 1, doneAction: 2); 9 | plickLevel = EnvGen.kr(Env([0,amp,amp,0], [attack,plick,decay]), 1); 10 | 11 | saw = Saw.kr(10, 0.75); 12 | 13 | pulse = Pulse.ar(freq, 0.5, plickLevel); 14 | pulse2 = Pulse.ar(freq * 0.75, 0.5, plickLevel * saw); 15 | reverb = FreeVerb.ar(pulse, 0.5, 1, 1); 16 | reverb2 = FreeVerb.ar(pulse2, 0.5, 1, 0.5); 17 | 18 | pan2 = Pan2.ar(reverb + reverb2, pan); 19 | 20 | Out.ar(out, pan2 * level); 21 | }.add; 22 | 23 | SynthDef(\squareWave) { |out=0, pan=0, freq=440, attack=0.005, sustain=0.1, decay=0.005, amp=0.25| 24 | var level, pulse, reverb, pan2; 25 | 26 | level = EnvGen.kr(Env([0,amp,amp,0], [attack, sustain, decay+0.005]), 1, doneAction: 2); 27 | 28 | pulse = Pulse.ar(freq, 0.5); 29 | reverb = FreeVerb.ar(pulse, 0.5, 1, 0.5); 30 | 31 | pan2 = Pan2.ar(reverb, pan); 32 | 33 | Out.ar(out, pan2 * level); 34 | }.add; 35 | 36 | SynthDef(\chipBassDrum) { |out=0, freq=150, sustain=0.25, pan=0, amp=1| 37 | var hit_time, level, pulse1, pulse2, pan2; 38 | 39 | hit_time = 0.1; 40 | level = EnvGen.kr(Env([1, 1, 0], [hit_time, 0.05]), 1, doneAction: 2); 41 | 42 | pulse1 = Pulse.ar(XLine.kr(freq, freq/4, hit_time), 0.5, amp); 43 | pulse2 = pulse1 - Pulse.kr(freq/4/2, 0.5, 0.75); 44 | pan2 = Pan2.ar(pulse2, pan); 45 | 46 | Out.ar(out, pan2 * level); 47 | }.add; 48 | 49 | 50 | 51 | Routine({ 52 | 53 | var staccato = 0.25; 54 | var normal_legato = 0.5; 55 | 56 | // Melody 57 | Pbind( 58 | \instrument, \squareWave, 59 | \freq, Pswitch( 60 | [ 61 | // Wait for drum intro 62 | Pseq([\r]), 63 | 64 | Pseq([69, 65, 69, 60]), // 1 65 | Pseq([77, 76]), 66 | Pseq([76, 74, 73]), 67 | Pseq([74]), // 4 68 | 69 | Pseq([67, 64, 67, 70]), // 5 70 | Pseq([76, 74]), 71 | Pseq([74, 71, 74]), 72 | Pseq([72]), // 8 73 | 74 | // Same as 1 75 | Pseq([81, 79]), // 9 76 | Pseq([79, 77, 76]), 77 | Pseq([74]), // 11, 78 | 79 | // Same as 6 80 | Pseq([72, 70, 69, 67]), // 12 81 | Pseq([65]) // 13 82 | ], 83 | Pseq([0, 1,2,3,4, 5,6,7,8, 1,9,10,11, 6,12,13]) 84 | ) * 8, 85 | \dur, Pswitch( 86 | [ 87 | // Wait for drum intro 88 | Pseq([3 * 4]), 89 | 90 | Pseq([1, 0.5, 1, 0.5]), // 1 91 | Pseq([1.5, 1.5]), 92 | Pseq([1.5, 1, 0.5]), 93 | Pseq([3]) // 4 94 | ] / 3, 95 | Pseq([0, 1,2,3,4, 1,2,3,4, 1,2,3,4, 2,1,4]) 96 | ), 97 | \legato, Pswitch( 98 | [ 99 | // Wait for drum intro 100 | Pseq([0]), 101 | 102 | Pseq([staccato, normal_legato, staccato, normal_legato]), // 1 103 | Pseq([normal_legato, normal_legato]), 104 | Pseq([normal_legato, staccato, normal_legato]), 105 | Pseq([normal_legato * 1.5]) // 4 106 | ], 107 | Pseq([0, 1,2,3,4, 1,2,3,4, 1,2,3,4, 2,1,4]) 108 | ), 109 | \attack, 0.005, 110 | \decay, 0.005, 111 | \amp, 0.25 112 | ).play; 113 | 114 | // Bass 115 | Pbind( 116 | \instrument, \chipBassDrum, 117 | \freq, Pstutter( 118 | Pseq([5, 1, inf]), 119 | Pseq([41, \r, 41 ].midicps) 120 | ) * 2, 121 | \dur, Pswitch( 122 | [ 123 | // Intro 124 | Pseq([3, 3, 1.5,1.5,1.5,1.5]), 125 | 126 | Pseq([1.5, 1.5]), // 1 127 | Pseq([3]) // 2 128 | ] / 3, 129 | Pstutter( 130 | Pseq([1, 7, 1, 7, 1]), 131 | Pseq([0, 1, 2, 1, 2]) 132 | ) 133 | ), 134 | \decay, 0.5, 135 | \amp, 0.25 136 | ).play; 137 | 138 | }).play; -------------------------------------------------------------------------------- /musical/good/bakom.scd: -------------------------------------------------------------------------------- 1 | // Something that sounds almost like the synth work from a Coaltar of the Deepers song 2 | 3 | SynthDef(\filteredBlip) { |out=0, freq=150, filMin=0, filMax=1, imp=0.05, pulse=5, sustain=1, amp=0.5| 4 | var sust = EnvGen.kr(Env([1,1,0], [sustain, 0.75]), 1, doneAction: 2), 5 | vSaw = VarSaw.ar( 6 | freq, 7 | 0, 8 | LFTri.kr(imp).range(filMin, filMax), 9 | Saw.kr(pulse).range(0, amp) 10 | ), 11 | pan2 = Pan2.ar(vSaw, FSinOsc.kr(imp*2)*0.25), 12 | rvrb = FreeVerb.ar(pan2, 0.25, 1, 0.75); 13 | 14 | Out.ar(out, rvrb*sust); 15 | }.add; 16 | 17 | // Basses 18 | 19 | SynthDef(\susSine) { |out=0, freq=440, amp=0.25, pan=0, sustain=1| 20 | var env = EnvGen.kr(Env([1, 1, 0], [sustain, 0]), 1, doneAction: 2), 21 | sine = SinOsc.ar(freq, 0, amp) * env, 22 | pan2 = Pan2.ar(sine, pan); 23 | 24 | Out.ar(out, pan2); 25 | }.add; 26 | 27 | SynthDef(\triSaw) { |out=0, freq=150, hi=1, lo=0, imp=1, sustain=1, amp=0.5| 28 | var sust = EnvGen.kr(Env([1,1,0], [sustain, 0.75]), 1, doneAction: 2), 29 | vSaw = VarSaw.ar(freq, 0, LFTri.kr(imp).range(lo, hi), amp), 30 | pan2 = Pan2.ar(vSaw, FSinOsc.kr(imp*2)*0.25), 31 | rvrb = FreeVerb.ar(pan2, 0.25, 1, 0.75); 32 | 33 | Out.ar(out, rvrb*sust); 34 | }.add; 35 | 36 | 37 | 38 | Routine({ 39 | Synth(\filteredBlip, [\freq, 550, \filMax, 0.75, \imp, 0.05, \pulse, 5, \sustain, 100]); 40 | 41 | 12.wait; 42 | 43 | Synth(\susSine, [\freq, 150, \amp, 0.5, \sustain, 3]); 44 | 45 | 3.wait; 46 | 47 | Synth(\susSine, [\freq, 175, \amp, 0.5, \sustain, 3]); 48 | 49 | 3.wait; 50 | 51 | Synth(\susSine, [\freq, 125, \amp, 0.5, \sustain, 3]); 52 | 53 | 3.wait; 54 | 55 | Synth(\susSine, [\freq, 150, \amp, 0.5, \sustain, 3]); 56 | 57 | (3.5).wait; 58 | 59 | Synth(\filteredBlip, [\freq, 250, \imp, 0.05, \pulse, 10, \sustain, 100]); 60 | }).play; -------------------------------------------------------------------------------- /musical/good/beller.scd: -------------------------------------------------------------------------------- 1 | // Mishmash of synths, with a pretty good bass line 2 | 3 | SynthDef(\sineBell) { |out=0, pan=0, freq=100, attack=0.005, sustain=0.1, decay=0.005, amp=1| 4 | var sine, pan2; 5 | 6 | sine = SinOsc.ar( 7 | freq, 8 | 0, 9 | EnvGen.kr(Env([0,amp,amp,0], [attack,sustain,decay]), 1, doneAction: 2) 10 | ); 11 | pan2 = Pan2.ar(sine, pan); 12 | 13 | Out.ar(out, pan2); 14 | }.add; 15 | 16 | SynthDef(\hardSine) { |out=0, freq=440, gate=1, amp=1| 17 | var env, aEnv, sine, pan; 18 | 19 | env = EnvGen.kr(Env.cutoff(0), gate, doneAction: 2); 20 | aEnv = EnvGen.kr(Env([0, amp, amp/2], [0.15, 0.1], [5, -10])); 21 | sine = SinOsc.ar(freq, 0, aEnv); 22 | pan = Pan2.ar(sine*env, 0, FSinOsc.kr(2)); 23 | 24 | Out.ar(out, pan); 25 | }.add; 26 | 27 | SynthDef(\bass) { |out=0, freq=440, amp=1, pan=0, sustain=1| 28 | var sust, osc, osc2, pan2; 29 | 30 | sust = EnvGen.kr(Env([1, 1, 0], [sustain, 0.05]), 1, doneAction: 2); 31 | 32 | osc = SinOsc.ar(XLine.kr(freq, freq/1.05, sustain), 0, amp); 33 | osc2 = osc + SinOsc.kr(freq/16.18, 0, amp); 34 | pan2 = Pan2.ar(osc2, pan); 35 | 36 | Out.ar(out, pan2*sust); 37 | }.add; 38 | 39 | SynthDef(\beep) { |out=0, freq=440, amp=1, sustain=1| 40 | var sine, ring; 41 | 42 | sine = SinOsc.ar( 43 | freq, 44 | 0, 45 | Trig.kr(Line.kr(1, 0, sustain), sustain) 46 | ); 47 | ring = Ringz.ar(sine, 2000, sustain, amp); 48 | 49 | Out.ar(out, ring); 50 | }.add; 51 | 52 | SynthDef(\snare) { |out=0, freq=1000, decay=0.25, amp=1, pan=0| 53 | var aEnv = EnvGen.kr(Env.perc(0.005, decay, amp), 1, doneAction: 2), 54 | drum = SinOsc.ar(freq, 0, WhiteNoise.ar(aEnv*0.15)), 55 | rvrb = FreeVerb.ar(drum, 0.75, 1, 0.75) + WhiteNoise.ar(aEnv*0.5), 56 | pan2 = Pan2.ar(rvrb, pan); 57 | 58 | Out.ar(out, pan2); 59 | }.add; 60 | 61 | 62 | 63 | // Effects synths 64 | 65 | SynthDef(\guitarEdge) { |effectBus, out=0, amount=0.99| 66 | var in, amCoef, audio; 67 | 68 | in = HPF.ar(In.ar(effectBus), 400) * 5; 69 | amCoef= 2 * amount / (1-amount); 70 | audio = MidEQ.ar(LPF.ar((1+amCoef)*in/(1+(amCoef*in.abs)), [3800, 3900])*0.5, 120, 0.7, 8); 71 | 72 | Out.ar(out, audio); 73 | }.add; 74 | 75 | 76 | 77 | Routine({ 78 | 79 | // Effects buses 80 | 81 | ~sources = Group.new; 82 | 83 | /*~guitarEdgeGroup = Group.new(~sources, \addToTail); 84 | ~guitarEdge= Bus.audio(s, numChannels: 2);*/ 85 | 86 | // Composition 87 | 88 | /*Pbind( 89 | \instrument, \hardSine, 90 | \freq, Pseq([400, 500, 600, 750], inf, 1), 91 | \dur, Pstutter( 92 | Pseq([3, 7, inf]), 93 | Pseq([0.75, 0.5, 0.25]) 94 | ), 95 | \amp, 0.1 96 | ).play; 97 | 98 | (3 * 0.75 + 0.5 * 7 + 8 * 0.25).wait; 99 | 100 | Pbind( 101 | \instrument, \sineBell, 102 | \freq, Pswitch( 103 | [ 104 | Pseq([28,35,40, 30,37,\rest, \r,\r,\r, \r,\r,\r, 31,38,43, 30,37,\r, \r,\r,\r, \r,\r,\r].midicps), 105 | Pseq([31, 38, 43,33, 40, 45].midicps) 106 | ], 107 | Pstutter( 108 | Pseq([2,1], inf), 109 | Pseq([0,1], inf) // loops = inf 110 | ) 111 | ) * 8, 112 | \dur, Pswitch( 113 | [ 114 | Pseq([0.5,0.5,1] / 2) 115 | ], 116 | Pstutter( 117 | Pseq([14], inf), 118 | Pseq([0], inf) // loops = inf 119 | ) 120 | ), 121 | \legato, 0.95, 122 | \attack, 0.75, 123 | \decay, 2.5, 124 | \amp, 0.05, 125 | \imp, 0.125, 126 | \pan, 0 127 | ).play; 128 | 129 | 32.wait;*/ 130 | 131 | Pbind( 132 | \instrument, \beep, 133 | \freq, Pswitch( 134 | [ 135 | Pstutter( // 0 136 | Pseq([4, 1]), 137 | Pseq([71, 59].midicps, inf) 138 | ), 139 | Pstutter( // 1 140 | Pseq([4, 1]), 141 | Pseq([59, 47].midicps, inf) 142 | ), 143 | Pstutter( // 2 144 | Pseq([1,1,1,1,1]), 145 | Pseq([67, 55, 71, 60, 64].midicps, inf) 146 | ), 147 | Pstutter( // 3 148 | Pseq([1,1,1,1,1]), 149 | Pseq([40, 50, 60, 70, 80].midicps, inf) 150 | ), 151 | Pstutter( // 4 152 | Pseq([1,1,1,1,1]), 153 | Pseq([80, 70, 50, 60, 90].midicps, inf) 154 | ) 155 | ], 156 | Pstutter( 157 | Pseq([8, 4, 3, 1], inf), 158 | Pseq([0, 1, 2, 3], inf) 159 | ) 160 | ), 161 | \dur, Pstutter( 162 | Pseq([4, 1], inf), 163 | Pseq([0.125/2, Rest(0.125*2)], inf) 164 | ), 165 | \amp, 0.1, 166 | \out, Pseq([0, 0, 1, 1], inf) 167 | ).play; 168 | 169 | Pbind( 170 | \instrument, \bass, 171 | \freq, Pstutter( 172 | Pseq([16, 7, 1, 7, 1], inf), 173 | Pseq([44, 46, 49, 47, 49].midicps, inf) 174 | ), 175 | \dur, Pstutter( 176 | Pseq([16], inf), 177 | Pseq([0.25], inf) 178 | ), 179 | \amp, 0.75, 180 | \out, [0,1] 181 | ).play; 182 | 183 | 184 | 185 | Pbind( 186 | \instrument, \sineBell, 187 | \freq, Pswitch( 188 | [ 189 | Pseq([28,35,40, 30,37,\rest, \r,\r,\r, \r,\r,\r, 31,38,43, 30,37,\r, \r,\r,\r, \r,\r,\r].midicps), 190 | Pseq([31, 38, 43,33, 40, 45].midicps) 191 | ], 192 | Pstutter( 193 | Pseq([2,1], inf), 194 | Pseq([0,1], inf) // loops = inf 195 | ) 196 | ) * 8*2, 197 | \dur, Pswitch( 198 | [ 199 | Pseq([0.5,0.5,1] / 2) 200 | ], 201 | Pstutter( 202 | Pseq([14], inf), 203 | Pseq([0], inf) // loops = inf 204 | ) 205 | ), 206 | \legato, 0.5, 207 | \attack, 0.005, 208 | \decay, 2, 209 | \amp, 0.125, 210 | \imp, 0.125, 211 | \pan, 0 212 | ).play; 213 | 214 | (4.5).wait; 215 | 216 | Pbind( 217 | \instrument, \snare, 218 | \freq, Pseq([2000], inf), 219 | \dur, Pseq([1, 1], inf), 220 | \amp, 0.25 221 | ).play; 222 | 223 | 224 | 225 | // Effects synths 226 | 227 | //Synth(\guitarEdge, [\effectBus, ~guitarEdge, \amount, 0.99], ~guitarEdgeGroup, \addToTail); 228 | }).play; -------------------------------------------------------------------------------- /musical/good/forsoka.scd: -------------------------------------------------------------------------------- 1 | // Vibes/bass piece 2 | 3 | // Leads 4 | 5 | SynthDef(\sawSine) { |out=0, imp=5, freq=150, sustain=0.25, pan=0, amp=0.5| 6 | var aEnv = EnvGen.kr(Env([0,amp,amp,0], [sustain*0.75, sustain*0.25, 0.25], [-2.5,0,0]), 1, doneAction: 2), 7 | saw = Saw.ar(imp, aEnv), 8 | sine = SinOsc.ar(freq, 0, saw), 9 | rvrb = sine + FreeVerb.ar(sine, 0.5, 1, 0.5), 10 | pan2 = Pan2.ar(rvrb, pan); 11 | 12 | Out.ar(out, pan2); 13 | }.add; 14 | 15 | // Basses 16 | 17 | SynthDef(\susSine) { |out=0, freq=440, amp=0.25, pan=0, sustain=1| 18 | var env = EnvGen.kr(Env([1, 1, 0], [sustain, 0]), 1, doneAction: 2), 19 | sine = SinOsc.ar(freq, 0, amp) * env, 20 | pan2 = Pan2.ar(sine, pan); 21 | 22 | Out.ar(out, pan2); 23 | }.add; 24 | 25 | SynthDef(\triSaw) { |out=0, freq=150, hi=1, lo=0, imp=1, sustain=1, amp=0.5| 26 | var sust = EnvGen.kr(Env([1,1,0], [sustain, 0.75]), 1, doneAction: 2), 27 | vSaw = VarSaw.ar(freq, 0, LFTri.kr(imp).range(lo, hi), amp), 28 | pan2 = Pan2.ar(vSaw, FSinOsc.kr(imp*2)*0.25), 29 | rvrb = FreeVerb.ar(pan2, 0.25, 1, 0.75); 30 | 31 | Out.ar(out, rvrb*sust); 32 | }.add; 33 | 34 | // Drums 35 | 36 | SynthDef(\snare) { |out=0, freq=1250, decay=0.15, amp=1, pan=0| 37 | var sust, osc, noise, crispy, rvrb, pan2; 38 | 39 | sust = EnvGen.kr(Env.perc(0.005, decay, amp), 1, doneAction: 2); 40 | 41 | osc = Pulse.ar(freq, 0.5, 1) * WhiteNoise.kr(1); 42 | noise = WhiteNoise.ar(1); 43 | crispy = BrownNoise.ar(0.75); 44 | rvrb = FreeVerb.ar(osc+noise>crispy, 0, 1, 1); 45 | pan2 = Pan2.ar(rvrb, pan); 46 | 47 | Out.ar(out, pan2*sust); 48 | }.add; 49 | 50 | SynthDef(\bellHit) { |out=0, freq=1000, decay=0.15, amp=1, pan=0| 51 | var sust, osc, rvrb, pan2; 52 | 53 | sust = EnvGen.kr(Env.perc(0.005, decay, amp), 1, doneAction: 2); 54 | 55 | osc = Pulse.ar(freq, 0.5, 1) - WhiteNoise.kr(1); 56 | rvrb = FreeVerb.ar(osc, 0, 1, 0.5); 57 | pan2 = Pan2.ar(rvrb, pan); 58 | 59 | Out.ar(out, pan2*sust); 60 | }.add; 61 | 62 | SynthDef(\bassDrum) { |out=0, freq=150, sustain=0.25, pan=0, amp=1| 63 | var hit_time, sust, osc, osc2, pan2; 64 | 65 | hit_time = 0.15; 66 | sust = EnvGen.kr(Env([1, 1, 0], [sustain, 0.05]), 1, doneAction: 2); 67 | 68 | osc = SinOsc.ar(XLine.kr(freq*1.618, freq/3.236, hit_time), 0, amp); 69 | osc2 = osc - Pulse.kr(freq/6.472, 0.5, 0.25); 70 | pan2 = Pan2.ar(osc2, pan); 71 | 72 | Out.ar(out, pan2*sust); 73 | }.add; 74 | 75 | 76 | 77 | Routine({ 78 | // 1 loop = 2s 79 | ~bassKick = { |loops=1, freq=150, amp=0.5, dur=0.5, legato=0.25, dStut1=1, dStut2=1, dStut3=4, pan=0, speed=1| 80 | Pbind( 81 | \instrument, \bassDrum, 82 | \freq, Pseq(freq.asArray, inf), 83 | \dur, PdurStutter( 84 | Pstutter( 85 | Pseq(dStut1.asArray, inf), 86 | Pseq(dStut2.asArray, inf) 87 | ), 88 | Pstutter( 89 | Pseq(dStut3.asArray, loops), 90 | Pseq(dur.asArray/speed, loops) 91 | ) 92 | ), 93 | \legato, legato, 94 | \pan, pan, 95 | \amp, amp 96 | ).play; 97 | }; 98 | 99 | // 1 loop = 4 seconds 100 | ~bassKick2 = { |loops=1, freq=150, amp=0.5, legato=0.25, pan=0| 101 | ~bassKick.value(loops, freq, amp, [0.5, 2, 0.25, 0.5], legato, [7,1,7,1], [1,2,1,3], [16,1,2,13], pan); 102 | }; 103 | 104 | // 1 loop = 4 seconds 105 | ~bassKick3 = { |loops=1, freq=150, amp=0.5, legato=0.25, pan=0| 106 | ~bassKick.value(loops, freq, amp, [0.25], legato, [1,8,1,6], [2,1,2,1], [16], pan); 107 | }; 108 | 109 | // 1 loop = 2 seconds 110 | ~bell = { |loops=1, freq=1250 amp=0.5, dur=0.5, dStut1=1, dStut2=1, dStut3=4, speed=1| 111 | Pbind( 112 | \instrument, \bellHit, 113 | \freq, Pseq(freq.asArray, inf), 114 | \dur, PdurStutter( 115 | Pstutter( 116 | Pseq(dStut1.asArray, inf), 117 | Pseq(dStut2.asArray, inf) 118 | ), 119 | Pstutter( 120 | Pseq(dStut3.asArray, loops), 121 | Pseq(dur.asArray/speed, loops) 122 | ) 123 | ), 124 | \amp, amp 125 | ).play; 126 | }; 127 | 128 | // 1 loop = 2 seconds 129 | ~snare = { |loops=1, freq=1250 amp=0.5, dur=0.5, dStut1=1, dStut2=1, dStut3=4, speed=1| 130 | Pbind( 131 | \instrument, \snare, 132 | \freq, Pseq(freq.asArray, inf), 133 | \dur, PdurStutter( 134 | Pstutter( 135 | Pseq(dStut1.asArray, inf), 136 | Pseq(dStut2.asArray, inf) 137 | ), 138 | Pstutter( 139 | Pseq(dStut3.asArray, loops), 140 | Pseq(dur.asArray/speed, loops) 141 | ) 142 | ), 143 | \amp, amp 144 | ).play; 145 | }; 146 | 147 | // 1 loop = 27 seconds 148 | ~snare2 = { |loops=1, freq=1250, amp=0.5| 149 | ~snare.value(loops, freq, amp, [1,0.25,0.75,1,0.25,0.75,1,0.25,1], [7,1,7,1,7,1,7,1], [1,7,1,2,1,3,1,2], [7,1,1,5,1,1,5,4,7]); 150 | }; 151 | 152 | // 1 loop = 8 seconds 153 | ~snare3 = { |loops=1, freq=1250, amp=0.5| 154 | ~snare.value(loops, freq, amp, [0.25,0.5,0.25,0.5], [1,8,1,1,5], [2,1,4,2,1], [1,8,2,5]); 155 | }; 156 | 157 | // 1 loop = 14 seconds 158 | ~vibes = { |loops=1, pitchShift=1, amp=0.25| 159 | Routine({ 160 | var sustain, freq, dur, imp, osc; 161 | 162 | sustain = loops*14; 163 | 164 | freq = Pstutter( 165 | Pseq([2, 1, 1, 1 ], inf), 166 | Pseq([500,600,400,700]*pitchShift, inf) 167 | ).asStream; 168 | 169 | dur = Pstutter( 170 | Pseq([2,3], inf), 171 | Pseq([4,2], inf) 172 | ).asStream; 173 | 174 | imp = Pstutter( 175 | Pseq([3,1, 1], inf), 176 | Pseq([6,6.5,7], inf) 177 | ).asStream; 178 | 179 | osc = Synth(\sawSine, [\freq, freq.next, \imp, imp.next, \sustain, sustain, \amp, amp]); 180 | 181 | (loops*5).do({ 182 | dur.next.wait; 183 | osc.set(\freq, freq.next, \imp, imp.next); 184 | }); 185 | }).play; 186 | }; 187 | 188 | // 1 loop = 14 seconds 189 | ~mainVibes = { |loops=1, amp=0.25| 190 | Routine({ 191 | ~vibes.value(loops: loops, amp: amp/3, pitchShift: 5); 192 | (0.25).wait; 193 | ~vibes.value(loops: loops, amp: amp/3, pitchShift: 3.236); 194 | (0.25).wait; 195 | ~vibes.value(loops: loops, amp: amp/3, pitchShift: 1.618); 196 | }).play; 197 | }; 198 | 199 | ~susMelody = {|synth, loops=1, freq=440, amp=0.25, dur=1, legato=1, pan=0| 200 | Pbind( 201 | \instrument, synth, 202 | \freq, Pseq(freq.asArray, inf), 203 | \dur, Pseq(dur.asArray, loops), 204 | \legato, legato, 205 | \pan, pan, 206 | \amp, amp 207 | ).play; 208 | }; 209 | 210 | // 1 loop = 14 seconds 211 | ~simpleBass = { |synth=\triSaw, loops=1, legato=0.85, hi=0.85, lo=0.7, amp=0.25, imp=0.25| 212 | Pbind( 213 | \instrument, synth, 214 | \freq, Pseq([100,125,200,150], inf), 215 | \dur, Pstutter( 216 | Pseq([2,3], inf), 217 | Pseq([4,2], loops) 218 | ), 219 | \legato, legato, 220 | \hi, hi, 221 | \lo, lo, 222 | \amp, amp, 223 | \imp, imp 224 | ).play; 225 | }; 226 | 227 | // 1 loop = 14 seconds 228 | ~bassLine = { |synth=\triSaw, loops=1, legato=0.95, hi=0.95, lo=0.85, amp=0.25, imp=0.125| 229 | Pbind( 230 | \instrument, synth, 231 | \freq, Pswitch( 232 | [ 233 | Pseq([28,35,40, 30,37,42, 31,38,43, 30,37,42].midicps), 234 | Pseq([31, 38, 43,33, 40, 45].midicps) 235 | ], 236 | Pstutter( 237 | Pseq([3,1], inf), 238 | Pseq([0,1], loops) 239 | ) 240 | ) * 2, 241 | \dur, Pswitch( 242 | [ 243 | Pseq([0.5,0.5,1]) 244 | ], 245 | Pstutter( 246 | Pseq([14], inf), 247 | Pseq([0], loops) 248 | ) 249 | ) / 2, 250 | \legato, legato, 251 | \hi, hi, 252 | \lo, lo, 253 | \amp, amp, 254 | \imp, imp, 255 | \pan, 0 256 | ).play; 257 | }; 258 | 259 | 260 | 261 | ~mainVibes.value(loops: 6); 262 | 14.wait; 263 | ~susMelody.value(\susSine, 2, [100,75,125,75], 0.25, [8,2,2,2] ); // 14s 264 | ~simpleBass.value(amp: 0.25); 265 | 14.wait; 266 | ~bassLine.value(loops: 2); 267 | 14.wait; 268 | ~bassKick.value(4, speed:0.5); // 16s 269 | (0.25).wait; 270 | // @TODO Needs a hihat 271 | ~bell.value(8, 2500, 0.25); // 16s 272 | (0.25).wait; 273 | ~snare.value(4, 2500, 0.35, speed: 0.5); // 16s 274 | }).play; -------------------------------------------------------------------------------- /musical/good/lilypad.scd: -------------------------------------------------------------------------------- 1 | // Cheery synth piece 2 | 3 | SynthDef(\mutedBlip) { |out=0, freq=440, imp=1, sustain=1, amp=0.5| 4 | var sust = EnvGen.kr(Env([1,1,0], [sustain, 0.05]), 1, doneAction: 2), 5 | vSaw = VarSaw.ar(freq, 0, FSinOsc.kr(imp).range(0.4, 0.6), amp), 6 | pan2 = Pan2.ar(vSaw, FSinOsc.kr(imp*2)*0.25); 7 | 8 | Out.ar(out, pan2*sust); 9 | }.add; 10 | 11 | SynthDef(\mutedBell) { |out=0, freq=440, imp=1, sustain=1, amp=0.5| 12 | var sust = EnvGen.kr(Env([1,1,0], [sustain, 0.5]), 1, doneAction: 2), 13 | vSaw = VarSaw.ar(freq, 0, FSinOsc.kr(imp).range(0.4, 0.6), amp), 14 | pan2 = Pan2.ar(vSaw, FSinOsc.kr(imp*2)*0.25); 15 | 16 | Out.ar(out, pan2*sust); 17 | }.add; 18 | 19 | SynthDef(\triSaw) { |out=0, freq=150, imp=1, sustain=1, amp=0.5| 20 | var sust = EnvGen.kr(Env([1,1,0], [sustain, 0.75]), 1, doneAction: 2), 21 | vSaw = VarSaw.ar(freq, 0, LFTri.kr(imp).range(0, 1), amp), 22 | pan2 = Pan2.ar(vSaw, FSinOsc.kr(imp*2)*0.25), 23 | rvrb = FreeVerb.ar(pan2, 0.25, 1, 0.75); 24 | 25 | Out.ar(out, rvrb*sust); 26 | }.add; 27 | 28 | SynthDef(\uglySaw) { |out=0, sFreq=100, eFreq=200, imp=1, fadein=2, sustain=0.5, fadeout=1, curve=5, amp=0.5| 29 | var sust = EnvGen.kr(Env([0,1,1,0], [fadein,sustain,fadeout], [curve,0,curve]), 1, doneAction: 2), 30 | freq = EnvGen.kr(Env([sFreq, eFreq], [fadein], [curve]), 1), 31 | saw = Saw.ar(freq, Saw.kr(50, amp/2)), 32 | vSaw = VarSaw.ar(freq, 0, FSinOsc.kr(imp).range(0.4, 0.7), amp/2), 33 | pan2 = Pan2.ar(vSaw+saw, FSinOsc.kr(fadein/2)/2); 34 | 35 | Out.ar(out, pan2*sust); 36 | }.add; 37 | 38 | SynthDef(\snare) { |out=0, freq=2500, decay=0.2, amp=0.5, pan=0| 39 | var eAmp = EnvGen.kr(Env.perc(0.005, decay), 1, doneAction: 2) * amp, 40 | drum = SinOsc.ar(freq, 0, GrayNoise.ar(eAmp*0.15)) + WhiteNoise.ar(eAmp*0.5), 41 | pan2 = Pan2.ar(drum, pan); 42 | 43 | Out.ar(out, pan2); 44 | }.add; 45 | 46 | SynthDef(\bass) { |out=0, freq=150, sustain=0.25, pan=0, amp=1| 47 | var hit = 0.15, 48 | sust = EnvGen.kr(Env([1, 1, 0], [sustain, 0.05]), 1, doneAction: 2), 49 | beat = EnvGen.kr(Env([1, 1, 0], [hit, 0.05]), 1), 50 | vSaw = VarSaw.ar(XLine.kr(freq*3, freq, hit), 0, 0.5, amp) * beat, 51 | tri = LFTri.ar(XLine.kr(freq, freq/3, hit), 0, amp) * beat, 52 | pan2 = Pan2.ar(vSaw+tri, pan); 53 | 54 | Out.ar(out, pan2*sust); 55 | }.add; 56 | 57 | 58 | 59 | Routine({ 60 | 61 | // 1 loop = 0.5s 62 | ~staccato = { |synth, loops=inf, amp=0.5, reverse=false, pitchShift=1| 63 | var freq = [440, 220, 550, 330]; 64 | 65 | if (reverse, { freq = freq.reverse; }); 66 | 67 | Pbind( 68 | \instrument, synth, 69 | \freq, Pstutter( 70 | Pseq([2], inf), 71 | Pseq(freq*pitchShift, inf) 72 | ), 73 | \dur, Pseq([0.125, 0.375], loops), 74 | \legato, Pseq([0.5, 0.125], inf), 75 | \amp, amp 76 | ).play; 77 | }; 78 | 79 | // 1 loop = 4s 80 | ~staccatoAccomp = { |loops=inf, reverse=false| 81 | Routine({ 82 | loops.do({ 83 | ~staccato.value(\mutedBlip, 4, 0.25, reverse, 2); // 2s 84 | 4.wait; 85 | }); 86 | }).play; 87 | }; 88 | 89 | // 1 loop = 1s 90 | ~chorus = { |synth, loops=inf, amp=0.25, imp=0.5, pitchShift=1| 91 | Pbind( 92 | \instrument, synth, 93 | \freq, Pseq([660, 440, 770, 550]*pitchShift, inf), 94 | \dur, Pseq([1], loops), 95 | \legato, Pseq([0.75], inf), 96 | \imp, imp, 97 | \amp, amp 98 | ).play; 99 | }; 100 | 101 | // 1 loop = 6s 102 | ~bassDrum = { |loops=inf, amp=0.5| 103 | Pbind( 104 | \instrument, \bass, 105 | \freq, 85, 106 | \dur, Pstutter( 107 | Pseq([2, 8], inf), 108 | Pseq([1, 0.5], loops) 109 | ), 110 | \amp, amp 111 | ).play; 112 | }; 113 | 114 | // 1 loop = 1s 115 | ~snareDrum = { |loops=inf, amp=0.5| 116 | Pbind( 117 | \instrument, \snare, 118 | \dur, Pseq([1], loops), 119 | \amp, amp 120 | ).play; 121 | }; 122 | 123 | 124 | 125 | ~staccato.value(\mutedBlip, 7); // 3.5s 126 | (3.5).wait; 127 | 128 | // @todo Tweak this length sometime 129 | Synth(\triSaw, [\freq, 220, \sustain, 100, \amp, 0.05, \imp, 0.08333333333]); // 100s 130 | (0.5).wait; 131 | 132 | ~chorus.value(\mutedBell, 20); // 20s 133 | 4.wait; 134 | 135 | ~staccato.value(\mutedBell, 24, 0.25); // 12s 136 | (2.25).wait; 137 | 138 | ~staccatoAccomp.value(7); // 28s 139 | (7.75).wait; 140 | 141 | ~bassDrum.value(6); // 36s 142 | 8.wait; 143 | 144 | ~chorus.value(\triSaw, 24, 0.25, 0.25, 0.1); // 24s 145 | 8.wait; 146 | 147 | ~chorus.value(\mutedBell, 20); // 20s 148 | (0.5).wait; 149 | 150 | ~snareDrum.value(8); // 4s 151 | (3.5).wait; 152 | 153 | ~staccato.value(\mutedBell, 24, 0.25); // 12s 154 | (4.25).wait; 155 | 156 | ~staccatoAccomp.value(7, true); // 24s 157 | ~snareDrum.value(1); // 1s 158 | (0.75).wait; 159 | 160 | ~snareDrum.value(1); // 1s 161 | (0.5).wait; 162 | 163 | ~snareDrum.value(8); // 8s 164 | (2.5).wait; 165 | 166 | // @todo Animals Are Ugly style low-freq saw build-up 167 | // @todo Ending would work with the stacco playing all alone 168 | }).play; -------------------------------------------------------------------------------- /musical/good/rise of fall.scd: -------------------------------------------------------------------------------- 1 | // Chip tune snippet of "Fall of Fall", the stage 4 music from Touhou 10 2 | 3 | SynthDef(\square) { |out=0, freq=400, atk=0.005, sustain=1, dec=0.005, pan=0, amp=0.25| 4 | var env, osc, osc2, panning, reverb; 5 | 6 | env = EnvGen.kr(Env.linen(atk, sustain, dec, amp, 0), doneAction: 2); 7 | osc = Pulse.ar(freq, 0.5, 1); 8 | osc2 = Pulse.ar(freq*2, 0.5, 1); 9 | panning = Pan2.ar(osc+osc2, pan); 10 | reverb = FreeVerb.ar(panning, 0.5, 1, 0.5) * env; 11 | 12 | Out.ar(out, reverb); 13 | }.add; 14 | 15 | SynthDef(\saw) { |out=0, freq=400, atk=0.005, sustain=1, dec=0.005, pan=0, amp=0.25| 16 | var env, osc, osc2, osc3, osc4, panning, reverb; 17 | 18 | env = EnvGen.kr(Env.linen(atk, sustain, dec, amp/2, 0), doneAction: 2); 19 | osc = Pulse.ar(freq*2, 0.5, 1).range(0.1); 20 | osc2 = Pulse.ar(freq*4, 0.5, 1).range(0.1); 21 | osc3 = Saw.ar(freq, osc); 22 | osc4 = Saw.ar(freq*2, osc2); 23 | panning = Pan2.ar(osc3+osc4, pan); 24 | reverb = FreeVerb.ar(panning, 0.25, 1, 0.5) * env; 25 | 26 | Out.ar(out, reverb); 27 | }.add; 28 | 29 | 30 | 31 | Routine({ 32 | ~speed = 3; 33 | 34 | // Upper right-hand 35 | Pbind( 36 | \instrument, \square, 37 | \freq, Pseq([59,59, 61, 62, 64,66,59,59, 68, 62,64,66,66, 69, 66, 69, 66, 63, 66, 63, 66, 59,59,57, 59, 55,64,61,61,59,61,62,64,61,66].midicps, inf), 38 | \dur, Pseq([2, 0.75,0.75,0.5,1, 1, 1, 0.5,0.5,1, 1, 1, 0.5,0.5,0.25,0.25,2.5,0.5,0.5,0.5,0.5,1, 1, 0.5,0.5,1, 1, 1, 1, 1, 1, 1, 1, 2, 1] / ~speed, inf), 39 | \legato, 0.95, 40 | \amp, 0.25, 41 | \pan, 1 42 | ).play; 43 | 44 | // Lower left hand 45 | Pbind( 46 | \instrument, \square, 47 | \freq, Pswitch( 48 | [ 49 | Pseq([28,35,40, 30,37,42, 31,38,43, 30,37,42].midicps), 50 | Pseq([31, 38, 43,33, 40, 45].midicps), 51 | Pseq([37].midicps) 52 | ], 53 | Pstutter( 54 | Pseq([3,1,6], inf), 55 | Pseq([0,1,2], 2) 56 | ) 57 | ), 58 | \dur, Pswitch( 59 | [ 60 | Pseq([0.5,0.5,1]), 61 | Pseq([0.5]) 62 | ], 63 | Pstutter( 64 | Pseq([14,6], inf), 65 | Pseq([0, 1], 2) 66 | ) 67 | ) / ~speed, 68 | \legato, 0.95, 69 | \amp, 0.25, 70 | \pan, -1 71 | ).play; 72 | 73 | }).play; -------------------------------------------------------------------------------- /musical/good/summer made sounds.scd: -------------------------------------------------------------------------------- 1 | // Drawn out bass synth with accents and tempo changes 2 | 3 | SynthDef(\kivBass) { |out=0, freq=100, gate=1, imp=0.125, cap=0.94 pan=0, amp=0.5| 4 | var sust = Linen.kr(gate, doneAction: 2), 5 | vSaw = VarSaw.ar(freq, 0, LFTri.kr(imp).range(0.84, cap), amp), 6 | pan2 = Pan2.ar(vSaw, pan); 7 | 8 | Out.ar(out, pan2*sust); 9 | }.add; 10 | 11 | SynthDef(\sawBass) { |out = 0, freq = 100, gate = 1, pulse = 2, imp = 0.125, pan = 0, amp = 0.5| 12 | var sust, vSaw, pan2; 13 | 14 | sust = Linen.kr(gate, doneAction: 2); 15 | vSaw = VarSaw.ar(freq, 0, Saw.kr(pulse).range(0.5, 0.95), amp); 16 | pan2 = Pan2.ar(vSaw, pan); 17 | 18 | Out.ar(out, pan2 * sust); 19 | }.add; 20 | 21 | // Drums 22 | 23 | SynthDef(\bassDrum) { |out=0, freq=150, sustain=0.25, pan=0, amp=1| 24 | var env = EnvGen.kr(Env([1, 1, 0], [sustain, 0.05]), 1, doneAction: 2), 25 | sine = SinOsc.ar(XLine.kr(freq, freq/3, sustain), 0, amp)*env, 26 | sqr = Pulse.ar(XLine.kr(freq, freq/3, sustain), 0.5)*(amp*0.25)*env, 27 | pan2 = Pan2.ar(sine+sqr, pan); 28 | 29 | Out.ar(out, pan2); 30 | }.add; 31 | 32 | SynthDef(\snare) { |out=0, freq=7500, decay=0.3, amp=1, pan=0| 33 | var aEnv = EnvGen.kr(Env.perc(0.005, decay, amp), 1, doneAction: 2), 34 | drum = SinOsc.ar(freq, 0, WhiteNoise.ar(aEnv*0.15)), 35 | rvrb = FreeVerb.ar(drum, 1, 1, 1) - WhiteNoise.ar(aEnv*0.5), 36 | pan2 = Pan2.ar(rvrb, pan); 37 | 38 | Out.ar(out, pan2); 39 | }.add; 40 | 41 | 42 | 43 | Routine({ 44 | 45 | // 1 loop = 2s 46 | ~bassKick = { |loops=1, freq=150, amp=0.5, dur=0.5, legato=0.25, dStut1=1, dStut2=1, dStut3=4, pan=0| 47 | Pbind( 48 | \instrument, \bassDrum, 49 | \freq, Pseq(freq.asArray, inf), 50 | \dur, PdurStutter( 51 | Pstutter( 52 | Pseq(dStut1.asArray, inf), 53 | Pseq(dStut2.asArray, inf) 54 | ), 55 | Pstutter( 56 | Pseq(dStut3.asArray, loops), 57 | Pseq(dur.asArray, loops) 58 | ) 59 | ), 60 | \legato, legato, 61 | \pan, pan, 62 | \amp, amp 63 | ).play; 64 | }; 65 | 66 | // 1 loop = 4 seconds 67 | ~bassKick2 = { |loops=1, freq=150, amp=0.5, legato=0.25, pan=0| 68 | ~bassKick.value(loops, freq, amp, [0.5,0.25,0.25], legato, [7,1], [1,2], [6,1,1], pan); 69 | }; 70 | 71 | // 1 loop = 4 seconds 72 | ~bassKick3 = { |loops=1, freq=150, amp=0.5, legato=0.25, pan=0| 73 | ~bassKick.value(loops, freq, amp, [0.25], legato, [1,8,1,6], [2,1,2,1], [16], pan); 74 | }; 75 | 76 | ~snareDrum = { |loops=1, freq=2000 amp=0.5, dur=1, dStut1=1, dStut2=1, dStut3=4| 77 | Pbind( 78 | \instrument, \snare, 79 | \freq, Pseq(freq.asArray, inf), 80 | \dur, PdurStutter( 81 | Pstutter( 82 | Pseq(dStut1.asArray, inf), 83 | Pseq(dStut2.asArray, inf) 84 | ), 85 | Pstutter( 86 | Pseq(dStut3.asArray, loops), 87 | Pseq(dur.asArray, loops) 88 | ) 89 | ), 90 | \amp, amp 91 | ).play; 92 | }; 93 | 94 | // 1 loop = 8 seconds 95 | ~snareDrum2 = { |loops=1, freq=2000, amp=0.25| 96 | ~snareDrum.value(loops, freq, amp, [0.5], [16], [1], [16]); 97 | }; 98 | 99 | // 1 loop = 8 seconds 100 | ~snareDrum3 = { |loops=1, freq=2000, amp=0.5| 101 | ~snareDrum.value(loops, freq, amp, [0.25,0.5,0.25,0.5], [1,8,1,1,5], [2,1,4,2,1], [1,8,2,5]); 102 | }; 103 | 104 | ~deepBass = { |amp = 0.5, loops = inf| 105 | Routine({ 106 | var freq, dur, imp, cap, osc, tempDur; 107 | 108 | freq = Pswitch( 109 | [ 110 | Pseq([90, 75, 90, 83]), 111 | Pseq([90, 75, 100, 83]) 112 | ], 113 | Pstutter( 114 | Pseq([14, inf], inf), 115 | Pseq([0, 1], inf) 116 | ) 117 | ).asStream; 118 | 119 | dur = Pstutter( 120 | Pseq([20, 12, 12, loops-44], 1), 121 | Pseq([4, 1, 0.5, 0.25]) 122 | ).asStream; 123 | 124 | imp = Pstutter( 125 | Pseq([4, 2, 1, 1, 1, 3], inf), 126 | Pseq([0.125, 2, 4, 8, 50, 0.5], inf) 127 | ).asStream; 128 | 129 | cap = Pswitch( 130 | [ 131 | Pseq([0.94], 1), 132 | Pseq([0.96], 1), 133 | Pseq([0.98], 1), 134 | Pseq([0.995], 1) 135 | ], 136 | Pstutter( 137 | Pseq([2, 2, 2, 1, 1], inf), 138 | Pseq([0, 1, 2, 1, 3], inf) 139 | ) 140 | ).asStream; 141 | 142 | osc = Synth(\kivBass, [\freq, freq.next, \imp, imp.next, \cap, cap.next, \amp, amp]); 143 | 144 | loop({ 145 | tempDur = dur.next; 146 | (tempDur/2).wait; 147 | osc.set(\imp, imp.next); 148 | (tempDur/2).wait; 149 | osc.set(\freq, freq.next, \cap, cap.next); 150 | }); 151 | }).play; 152 | }; 153 | 154 | // 4/speed seconds 155 | ~summerScale = { |amp = 0.2, speed = 1| 156 | Pbind( 157 | \instrument, \sawBass, 158 | \freq, Pseq([400, 450, 500, 790, 500]), 159 | \dur, Pseq([0.25, 0.25, 0.25, 0.25, 3] / speed), 160 | \legato, 1.25, 161 | \amp2, amp 162 | ).play; 163 | }; 164 | 165 | ~repeatingSummerScale = { |loops = 2, wait = 1, amp = 0.2, speed = 1| 166 | var spd = speed.asStream, 167 | wt = wait.asStream; 168 | 169 | Routine({ 170 | loops.do({ 171 | ~summerScale.value(amp, spd.next); 172 | wt.next.wait; 173 | }); 174 | }).play; 175 | }; 176 | 177 | 178 | 179 | ~deepBass.value(0.5); 180 | (3.5).wait; 181 | ~repeatingSummerScale.value( 182 | 8, 183 | Pseq([8, 6, 10, 24], inf), 184 | 0.3, 185 | Pseq([3, 3, 2, 1], inf) 186 | ); 187 | 12.wait; 188 | ~bassKick2.value(4); // 2s 189 | (4.25).wait; 190 | ~snareDrum2.value(2); 191 | 192 | }).play; -------------------------------------------------------------------------------- /musical/great/empty.scd: -------------------------------------------------------------------------------- 1 | // Icy chiptune piece 2 | 3 | SynthDef(\icePick) { |out=0, pan=0, freq=440, attack=0.005, sustain=0.1, decay=0.5, amp=0.25| 4 | var level, plickLevel, plick, pulse, pulse2, saw, reverb, reverb2, pan2; 5 | 6 | plick = 0.05; 7 | 8 | level = EnvGen.kr(Env([0,amp,amp,0], [attack,sustain,decay]), 1, doneAction: 2); 9 | plickLevel = EnvGen.kr(Env([0,amp,amp,0], [attack,plick,decay]), 1); 10 | 11 | saw = Saw.kr(10, 0.75); 12 | 13 | pulse = Pulse.ar(freq, 0.5, plickLevel); 14 | pulse2 = Pulse.ar(freq * 0.75, 0.5, plickLevel * saw); 15 | reverb = FreeVerb.ar(pulse, 0.5, 1, 1); 16 | reverb2 = FreeVerb.ar(pulse2, 0.5, 1, 0.5); 17 | 18 | pan2 = Pan2.ar(reverb + reverb2, pan); 19 | 20 | Out.ar(out, pan2 * level); 21 | }.add; 22 | 23 | SynthDef(\noiseCrash) { |out=0, pan=0, freq=440, attack=0.005, sustain=0.1, decay=0.5, amp=0.25| 24 | var level, plickLevel, plick, noise, pulse, reverb, pan2; 25 | 26 | plick = 0.05; 27 | 28 | level = EnvGen.kr(Env([0,amp,amp,0], [attack,sustain,decay]), 1, doneAction: 2); 29 | plickLevel = EnvGen.kr(Env([0,amp,amp,0], [attack,plick,decay]), 1); 30 | 31 | noise = WhiteNoise.kr(1); 32 | pulse = Pulse.ar(freq, 0.5, noise); 33 | 34 | reverb = FreeVerb.ar(pulse, 0.5, 1, 1); 35 | 36 | pan2 = Pan2.ar(reverb, pan); 37 | 38 | Out.ar(out, pan2 * level); 39 | }.add; 40 | 41 | SynthDef(\noiseCrunch) { |out=0, pan=0, freq=440, attack=0.005, sustain=0.1, decay=0.5, amp=0.25| 42 | var level, plickLevel, plick, noise, pulse, reverb, pan2; 43 | 44 | plick = 0.05; 45 | 46 | level = EnvGen.kr(Env([0,amp,amp,0], [attack,sustain,decay]), 1, doneAction: 2); 47 | plickLevel = EnvGen.kr(Env([0,amp,amp,0], [attack,plick,decay]), 1); 48 | 49 | noise = WhiteNoise.kr(1); 50 | pulse = Pulse.ar(freq, 0.5, noise + BrownNoise.kr(1)); 51 | 52 | reverb = FreeVerb.ar(pulse, 0, 1, 1); 53 | 54 | pan2 = Pan2.ar(reverb, pan); 55 | 56 | Out.ar(out, pan2 * level); 57 | }.add; 58 | 59 | SynthDef(\noiseSnare) { |out=0, pan=0, freq=440, attack=0.005, sustain=0.05, decay=0.15, amp=0.25| 60 | var level, hitLevel, hit_time, noise, reverb, pan2; 61 | 62 | hit_time = 0.05; 63 | 64 | level = EnvGen.kr(Env([0,amp,amp,0], [attack,sustain,decay]), 1, doneAction: 2); 65 | hitLevel = EnvGen.kr(Env([0,amp,amp,0], [attack,hit_time,decay]), 1); 66 | 67 | noise = LFNoise0.ar(freq, hitLevel) + LFNoise0.ar(freq / 1.618, hitLevel); 68 | reverb = FreeVerb.ar(noise, 0, 1, 0.5); 69 | 70 | pan2 = Pan2.ar(reverb, pan); 71 | 72 | Out.ar(out, pan2 * level); 73 | }.add; 74 | 75 | SynthDef(\chipBassDrum) { |out=0, freq=150, sustain=0.25, pan=0, amp=1| 76 | var hit_time, level, pulse1, pulse2, pan2; 77 | 78 | hit_time = 0.1; 79 | level = EnvGen.kr(Env([1, 1, 0], [hit_time, 0.05]), 1, doneAction: 2); 80 | 81 | pulse1 = Pulse.ar(XLine.kr(freq, freq/4, hit_time), 0.5, amp); 82 | pulse2 = pulse1 - Pulse.kr(freq/4/2, 0.5, 0.75); 83 | pan2 = Pan2.ar(pulse2, pan); 84 | 85 | Out.ar(out, pan2 * level); 86 | }.add; 87 | 88 | 89 | Routine({ 90 | 91 | //Synth(\noiseCrash, [\freq, 600, \amp, 0.5]); 92 | //Synth(\noiseCrunch, [\freq, 400, \amp, 0.5]); 93 | 94 | // Wiiiiiiiiiiiiiiiiind 95 | Pbind( 96 | \instrument, \noiseCrash, 97 | \freq, Pseg(Pseq([1750, 2250], inf), Pseq([4,4], inf), \sine), 98 | \dur, Pseq([0.05], inf), 99 | \out, 0, 100 | \amp, 0.025 101 | ).play; 102 | 103 | Pbind( 104 | \instrument, \noiseCrash, 105 | \freq, Pseg(Pseq([1500, 2000, 1750], inf), Pseq([2,2,2,2], inf), \sine), 106 | \dur, Pseq([0.05], inf), 107 | \out, 1, 108 | \amp, 0.0125 109 | ).play; 110 | 111 | 8.wait; 112 | 113 | Pbind( 114 | \instrument, \icePick, 115 | \freq, Pswitch( 116 | [ 117 | Pseq([44, 46, 49, 47, 49, \r].midicps * 10), 118 | Pseq([44, 46, 49, 47, 49, \r].midicps * 10 / 2) 119 | ], 120 | Pseq([0,1], inf) 121 | ), 122 | \dur, Pstutter( 123 | Pseq([5, 1], inf), 124 | Pseq([0.5,1.5], inf) 125 | ), 126 | \decay, Pstutter( 127 | Pseq([4, 1, 1], inf), 128 | Pseq([0.5,0.85,0], inf) 129 | ), 130 | \amp, 0.5 131 | ).play; 132 | 133 | 8.wait; 134 | 135 | Pbind( 136 | \instrument, \chipBassDrum, 137 | \freq, Pseq([200], inf), 138 | \dur, Pswitch( 139 | [ 140 | Pseq([2, 2]), 141 | Pseq([2, 0.5, 0.5, Rest(1)]) 142 | ], 143 | Pswitch( 144 | [ 145 | Pseq([0, 0, 0, 1]) 146 | ], 147 | Pstutter( 148 | Pseq([inf]), 149 | Pseq([0]) 150 | ) 151 | ) 152 | ), 153 | \amp, 0.2 154 | ).play; 155 | 156 | Pbind( 157 | \instrument, \noiseSnare, 158 | \freq, Pseq([5000], inf), 159 | \dur, Pswitch( 160 | [ 161 | Pseq([Rest(1)]), 162 | Pseq([2, 1, Rest(1)]), 163 | Pseq([2, 0.5, 0.5, Rest(1)]) 164 | ], 165 | Pswitch( 166 | [ 167 | Pseq([0]), 168 | Pseq([1, 1, 1, 2]), 169 | ], 170 | Pstutter( 171 | Pseq([1, inf]), 172 | Pseq([0, 1]) 173 | ) 174 | ) 175 | ), 176 | \amp, 0.25 177 | ).play; 178 | 179 | Pbind( 180 | \instrument, \noiseSnare, 181 | \freq, Pseq([15000], inf), 182 | \dur, Pswitch( 183 | [ 184 | Pseq([Rest(0.5)]), 185 | Pseq([1, 1, 1, Rest(1)]), 186 | Pseq([1, 1, Rest(0.5), 1.5]) 187 | ], 188 | Pswitch( 189 | [ 190 | Pseq([0]), 191 | Pseq([1, 1, 1, 2]) 192 | ], 193 | Pstutter( 194 | Pseq([1, inf]), 195 | Pseq([0, 1]) 196 | ) 197 | ) 198 | ), 199 | \amp, 0.25 200 | ).play; 201 | 202 | 8.wait; 203 | 204 | Pbind( 205 | \instrument, \icePick, 206 | \freq, Pswitch( 207 | [ 208 | Pseq([44, 46, 49, 47, \r, \r].midicps * 16), 209 | Pseq([44, 46, 49, 47, \r, \r].midicps * 16 / 2) 210 | ], 211 | Pseq([0,1], inf) 212 | ), 213 | \dur, Pstutter( 214 | Pseq([5, 1], inf), 215 | Pseq([0.5,1.5] * 2, inf) 216 | ), 217 | \attack, 2, 218 | \decay, 0.005, 219 | \amp, 0.25 220 | ).play; 221 | 222 | // TODO Some crashes and stuff 223 | 224 | }).play; -------------------------------------------------------------------------------- /musical/great/ghost-passengers.scd: -------------------------------------------------------------------------------- 1 | SynthDef(\vibrato) { |in=0, out=0, freq=220, imp=1| 2 | var input, newOut; 3 | 4 | input = In.ar(in, 2); 5 | 6 | newOut = FreqShift.ar(input, FSinOsc.kr(imp) * freq); 7 | 8 | ReplaceOut.ar(out, newOut); 9 | }.add; 10 | 11 | // Based on code from http://new-supercollider-mailing-lists-forums-use-these.2681727.n2.nabble.com/Distortion-effect-tp5173262p5173287.html 12 | SynthDef(\distortion) { |in=0, out=0, amount=0.99, amp=1| 13 | var input, amCoef, newOut; 14 | 15 | amCoef= 2*amount/(1-amount); 16 | 17 | input = HPF.ar(In.ar(in, 2), 400)*5; 18 | 19 | newOut = MidEQ.ar(LPF.ar((1+amCoef)*input/(1+(amCoef*input.abs)), [3800, 3900])*0.5, 120, 0.7, 8); 20 | 21 | ReplaceOut.ar(out, newOut * amp); 22 | }.add; 23 | 24 | SynthDef(\vibeSpark) { |out=0, imp=5, freq=150, sustain=0.25, attack=0.75, decay=0.25, pan=0, amp=0.5| 25 | var aEnv = EnvGen.kr( 26 | Env.linen(sustain*attack, sustain*(1-attack), decay, amp, [-2.5,0,0]), 27 | 1, 28 | doneAction: 2 29 | ), 30 | saw = Saw.ar(imp, aEnv), 31 | sine = SinOsc.ar(freq, 0, saw).min(amp).max(0-amp), 32 | rvrb = sine + FreeVerb.ar(sine, 0.5, 1, 0.5), 33 | pan2 = Pan2.ar(rvrb, pan); 34 | 35 | Out.ar(out, pan2); 36 | }.add; 37 | 38 | // Based on code from http://permalink.gmane.org/gmane.comp.audio.supercollider.user/77153 39 | SynthDef(\tape_delay) { |in=0, out=0, imp=1, lag=3, maxLag=0.2, decayTime=6| 40 | var input, newOut, delayTime, laggedDelayTime, outDelay; 41 | 42 | input = In.ar(in, 2); 43 | // Delay time jumps on impulse 44 | delayTime = Demand.kr(Impulse.kr(imp), 0, Dseq([0.3], inf)); 45 | // Amount of time to reach new value 46 | laggedDelayTime = Lag.kr(delayTime, lag); 47 | // CombC - delay with feedback 48 | newOut = CombC.ar(input, maxLag, laggedDelayTime, decayTime) + in; 49 | 50 | ReplaceOut.ar(out, newOut); 51 | }.add; 52 | 53 | 54 | 55 | Routine({ 56 | 57 | Pbind( 58 | \instrument, \vibeSpark, 59 | \freq, Pswitch( 60 | [ 61 | Pseq([75, 90, 110, 75, 90, 100, 75] * 4 * 3.236), 62 | Pseq([75, 90, 110, 75, 90, 100, 75] * 3.236 * 1.618) 63 | ], 64 | Pstutter( 65 | Pseq([1,1]/*[4,4]*/, inf), 66 | Pseq([0,1], 10) 67 | ) 68 | ), 69 | \dur, Pseq([4], inf), 70 | \legato, 1, 71 | \decay, Pseq([6], inf), 72 | \attack, 0.75, 73 | \imp, 5, 74 | \amp, 0.1, 75 | \out, 0 76 | ).play; 77 | 78 | Pbind( 79 | \instrument, \vibeSpark, 80 | \freq, Pswitch( 81 | [ 82 | Pseq([75, 90, 110, 75, 90, 100, 75] * 2), 83 | Pseq([75, 90, 110, 75, 90, 100, 75]) 84 | ], 85 | Pstutter( 86 | Pseq([1,1] * 4, inf), 87 | Pseq([0,1], 10) 88 | ) 89 | ), 90 | \dur, Pseq([2], inf), 91 | \legato, 1.5, 92 | \imp, 5, 93 | \amp, 0.1, 94 | \out, 0 95 | ).play; 96 | 97 | Synth(\distortion, [\in, 0, \out, 0, \amount, 0.9, \amp, 0.5]); 98 | Synth(\vibrato, [\in, 0, \out, 0, \freq, -110, \imp, 1/32]); 99 | Synth(\tape_delay, [\in, 0, \out, 0, \imp, 0.15, \lag, 0.25, \maxLag, 0.5, \decayTime, 4]); 100 | 101 | }).play; -------------------------------------------------------------------------------- /musical/great/wolf-and-ferret.scd: -------------------------------------------------------------------------------- 1 | SynthDef(\square) { |out=0, freq=400, atk=0.005, sustain=1, dec=0.005, pan=0, amp=0.25| 2 | var env, osc, osc2, panning, reverb; 3 | 4 | env = EnvGen.kr(Env.linen(atk, sustain, dec, amp, 0), doneAction: 2); 5 | osc = Pulse.ar(freq, 0.5, 1); 6 | osc2 = Pulse.ar(freq*2, 0.5, 1); 7 | panning = Pan2.ar(osc+osc2, pan); 8 | reverb = FreeVerb.ar(panning, 0.5, 1, 0.5) * env; 9 | 10 | Out.ar(out, reverb); 11 | }.add; 12 | 13 | SynthDef(\chipBassDrum) { |out=0, freq=150, sustain=0.25, pan=0, amp=1| 14 | var hit_time, level, pulse1, pulse2, pan2; 15 | 16 | hit_time = 0.1; 17 | level = EnvGen.kr(Env([1, 1, 0], [hit_time, 0.05]), 1, doneAction: 2); 18 | 19 | pulse1 = Pulse.ar(XLine.kr(freq, freq/4, hit_time), 0.5, amp); 20 | pulse2 = pulse1 - Pulse.kr(freq/4/2, 0.5, 0.75); 21 | pan2 = Pan2.ar(pulse2, pan); 22 | 23 | Out.ar(out, pan2 * level); 24 | }.add; 25 | 26 | SynthDef(\noiseSnare) { |out=0, pan=0, freq=440, attack=0.005, sustain=0.05, decay=0.15, amp=0.25| 27 | var level, hitLevel, hit_time, noise, reverb, pan2; 28 | 29 | hit_time = 0.05; 30 | 31 | level = EnvGen.kr(Env([0,amp,amp,0], [attack,sustain,decay]), 1, doneAction: 2); 32 | hitLevel = EnvGen.kr(Env([0,amp,amp,0], [attack,hit_time,decay]), 1); 33 | 34 | noise = LFNoise0.ar(freq, hitLevel) + LFNoise0.ar(freq / 1.618, hitLevel); 35 | reverb = FreeVerb.ar(noise, 0, 1, 0.5); 36 | 37 | pan2 = Pan2.ar(reverb, pan); 38 | 39 | Out.ar(out, pan2 * level); 40 | }.add; 41 | 42 | 43 | 44 | Routine({ 45 | 46 | ~speed = 0.5; 47 | 48 | Pbind( 49 | \instrument, \square, 50 | \freq, Pswitch( 51 | [ 52 | Pseq([\r]), // 0 53 | Pseq([40,50,45,44,45,47,45,44].midicps), // 1 54 | Pseq([52,62,57,56,57,59,57,56].midicps), // 2 55 | ], 56 | Pswitch( 57 | [ 58 | Pseq([0,1,0,2]) 59 | ], 60 | Pstutter( 61 | Pseq([inf], inf), 62 | Pseq([0], inf) 63 | ) 64 | ) 65 | ), 66 | \dur,Pswitch( 67 | [ 68 | Pseq([1]), // 0 69 | Pseq(1 / [8,8,16,16,8,4,8,8]), // 1 70 | ] / ~speed, 71 | Pswitch( 72 | [ 73 | Pseq([0,1,0,1]), // 0 74 | ], 75 | Pstutter( 76 | Pseq([inf], inf), 77 | Pseq([0]) 78 | ) 79 | ) 80 | ), 81 | \decay, 1, 82 | \amp, 0.35 83 | ).play; 84 | 85 | // Drum 86 | 87 | // Bass Drum 88 | Pbind( 89 | \instrument, \chipBassDrum, 90 | \freq, Pswitch( 91 | [ 92 | Pseq([200,\r,\r,\r,200,200,\r,\r]), // 0 93 | Pseq([200,200,200,\r,\r,200,200,\r,\r]), // 1 94 | ], 95 | Pswitch( 96 | [ 97 | Pseq([0,1]) 98 | ], 99 | Pstutter( 100 | Pseq([inf], inf), 101 | Pseq([0], inf) 102 | ) 103 | ) 104 | ), 105 | \dur, Pswitch( 106 | [ 107 | Pseq(1 / [8,8,8,8,8,8,8,8]), // 0 108 | Pseq(1 / [8,16,16,8,8,8,8,8,8]), // 1 109 | ] / ~speed, 110 | Pswitch( 111 | [ 112 | Pseq([0,1]), // 0 113 | ], 114 | Pstutter( 115 | Pseq([inf], inf), 116 | Pseq([0]) 117 | ) 118 | ) 119 | ), 120 | \decay, 0.4, 121 | \amp, 0.175 122 | ).play; 123 | 124 | // Snare Drum 125 | Pbind( 126 | \instrument, \noiseSnare, 127 | \freq, Pswitch( 128 | [ 129 | Pseq([\r,5000,\r,5000]), // 0 130 | Pseq([\r,\r,\r,5000]), // 1 131 | ] / ~speed, 132 | Pswitch( 133 | [ 134 | Pseq([0,0,0,0,1,0,0,0]), // 0 135 | ], 136 | Pstutter( 137 | Pseq([inf], inf), 138 | Pseq([0]) 139 | ) 140 | ) 141 | ), 142 | \dur, Pswitch( 143 | [ 144 | Pseq(1 / [4,4,4,4]), // 0 145 | ] / ~speed, 146 | Pswitch( 147 | [ 148 | Pseq([0]), // 0 149 | ], 150 | Pstutter( 151 | Pseq([inf], inf), 152 | Pseq([0]) 153 | ) 154 | ) 155 | ), 156 | \decay, 0.4, 157 | \amp, 0.25 158 | ).play; 159 | 160 | // Hi-hat 161 | Pbind( 162 | \instrument, \noiseSnare, 163 | \freq, Pswitch( 164 | [ 165 | Pseq([\r]), // 0 166 | Pseq([15000]), // 1 167 | ], 168 | Pswitch( 169 | [ 170 | Pseq([0,1,0,1,0,1,0,1]) 171 | ], 172 | Pstutter( 173 | Pseq([inf], inf), 174 | Pseq([0], inf) 175 | ) 176 | ) 177 | ), 178 | \dur, Pswitch( 179 | [ 180 | Pseq(1 / [8,8,8,8,8,8,8,8]), // 0 181 | ] / ~speed, 182 | Pstutter( 183 | Pseq([inf], inf), 184 | Pseq([0]) 185 | ) 186 | ), 187 | \decay, 0.6, 188 | \amp, 0.15 189 | ).play; 190 | 191 | }).play; -------------------------------------------------------------------------------- /musical/promising/bird-shifts.scd: -------------------------------------------------------------------------------- 1 | // Interesting synth textures 2 | 3 | SynthDef(\envSine) { |out=0, pan=0, fadeIn=1, sustain=1, fadeOut=1, sFreq=100, eFreq=440, amp=0.25| 4 | var sEnv = EnvGen.kr(Env([0, 1, 1, 0], [fadeIn, sustain, fadeOut]), 1, doneAction: 2), 5 | fEnv = EnvGen.kr(Env([sFreq, eFreq], [fadeIn+(sustain/2)], 0, eFreq), 1), 6 | sine = SinOsc.ar(fEnv, 0, amp) * sEnv, 7 | pan2 = Pan2.ar(sine, pan); 8 | 9 | Out.ar(out, pan2); 10 | }.add; 11 | 12 | SynthDef(\sawSine) { |out=0, imp=5, freq=150, sustain=0.25, pan=0, amp=0.5| 13 | var aEnv = EnvGen.kr(Env([0,amp,amp,0], [sustain*0.75, sustain*0.25, 0.25], [-2.5,0,0]), 1, doneAction: 2), 14 | saw = Saw.ar(imp, aEnv), 15 | sine = SinOsc.ar(freq, 0, saw), 16 | rvrb = sine + FreeVerb.ar(sine, 0.25, 0.5, 0.25), 17 | pan2 = Pan2.ar(rvrb, pan); 18 | 19 | Out.ar(out, pan2); 20 | }.add; 21 | 22 | // Basses 23 | 24 | SynthDef(\triSaw) { |out=0, freq=150, hi=1, lo=0, imp=1, sustain=1, amp=0.5| 25 | var sust = EnvGen.kr(Env([1,1,0], [sustain, 0.75]), 1, doneAction: 2), 26 | vSaw = VarSaw.ar(freq, 0, LFTri.kr(imp).range(lo, hi), amp), 27 | pan2 = Pan2.ar(vSaw, FSinOsc.kr(imp*2)*0.25), 28 | rvrb = FreeVerb.ar(pan2, 0.25, 1, 0.75); 29 | 30 | Out.ar(out, rvrb*sust); 31 | }.add; 32 | 33 | // Drums 34 | 35 | SynthDef(\bassDrum) { |out=0, freq=150, sustain=0.25, pan=0, amp=1| 36 | var env = EnvGen.kr(Env([1, 1, 0], [sustain, 0.05]), 1, doneAction: 2), 37 | sine = SinOsc.ar(XLine.kr(freq, freq/3, sustain), 0, amp)*env, 38 | sqr = Pulse.ar(XLine.kr(freq, freq/3, sustain), 0.5)*(amp*0.25)*env, 39 | pan2 = Pan2.ar(sine+sqr, pan); 40 | 41 | Out.ar(out, pan2); 42 | }.add; 43 | 44 | 45 | 46 | Routine({ 47 | // 1 loop = 4 seconds 48 | ~guitarBits = { |loops=1, amp=0.25| 49 | Pbind( 50 | \instrument, \fadeGuitar, 51 | \freq, Pseq([50, 140, 150, 100, 240, 250]*5, loops), 52 | \dur, Pseq([2, 1, 1]/2, inf), 53 | \legato, 0.75, 54 | \panS, Pseq([-1, 1], inf), 55 | \panE, Pseq([1, -1], inf), 56 | \amp, amp 57 | ).play; 58 | }; 59 | 60 | // 4 movements, 1 loop = 3 seconds 61 | ~shapeBits = { |synth, loops=inf, amp=0.1, speed=1| 62 | Pbind( 63 | \instrument, synth, 64 | \freq, Pstutter( 65 | Pseq([1], inf), 66 | Pseq([750, 500, 250, 1000]*1.618, inf) 67 | ), 68 | \dur, 0.125*speed, 69 | \legato, 0.75, 70 | \imp, Pstutter( 71 | Pseq([2, 2, 4, 1, 0, 0, 1, 0, 0, 2, 4, 0, 4, 0, 2, 10], inf), 72 | Pseq([1, 2, 4, 6, 10, 8, 2, 50, 1, 3, 5, 175], loops) 73 | ), 74 | \pan, Pseq([-1, 0, 1], inf), 75 | \amp, amp 76 | ).play; 77 | }; 78 | 79 | // 1 loop = 2s 80 | ~bassKick = { |loops=1, freq=150, amp=0.5, dur=0.5, legato=0.25, dStut1=1, dStut2=1, dStut3=4, pan=0| 81 | Pbind( 82 | \instrument, \bassDrum, 83 | \freq, Pseq(freq.asArray, inf), 84 | \dur, PdurStutter( 85 | Pstutter( 86 | Pseq(dStut1.asArray, inf), 87 | Pseq(dStut2.asArray, inf) 88 | ), 89 | Pstutter( 90 | Pseq(dStut3.asArray, loops), 91 | Pseq(dur.asArray, loops) 92 | ) 93 | ), 94 | \legato, legato, 95 | \pan, pan, 96 | \amp, amp 97 | ).play; 98 | }; 99 | 100 | // 1 loop = 4 seconds 101 | ~bass2 = { |loops=1, freq=150, amp=0.5, legato=0.25, pan=0| 102 | ~bassKick.value(loops, freq, amp, [0.5, 2, 0.25, 0.5], legato, [7,1,7,1], [1,2,1,3], [16,1,2,13], pan); 103 | }; 104 | 105 | // 1 loop = 4 seconds 106 | ~bass3 = { |loops=1, freq=150, amp=0.5, legato=0.25, pan=0| 107 | ~bassKick.value(loops, freq, amp, [0.25], legato, [1,8,1,6], [2,1,2,1], [16], pan); 108 | }; 109 | 110 | 111 | // 1 loop = 8 seconds 112 | ~simpleBassLine = { |synth, loops=4, amp=0.25, pitchShift=1, imp=1| 113 | Pbind( 114 | \instrument, synth, 115 | \freq, Pstutter( 116 | Pseq([6, 2, 6, 2], inf), 117 | Pseq([75,92,75,96]*pitchShift, loops) 118 | ), 119 | \dur, 0.5, 120 | \legato, 0.75, 121 | \imp, imp, 122 | \amp, amp 123 | ).play; 124 | }; 125 | 126 | Pbind( 127 | \instrument, \sawSine, 128 | \freq, Pstutter( 129 | Pseq([1], inf), 130 | Pseq([750, 500, 250, 1000]*1.618, inf) 131 | ), 132 | \dur, 0.125, 133 | \legato, 0.75, 134 | \imp, Pswitch( 135 | [ 136 | Pstutter( 137 | Pseq([2, 2, 4, 1, 0, 0, 1, 0, 0, 2, 4, 0, 4, 0, 2, 10], 3), 138 | Pseq([1, 2, 4, 6, 10, 8, 2, 50, 1, 3, 5, 175], inf) 139 | ), 140 | Pstutter( 141 | Pseq([2, 2, 4, 1, 0, 0, 1, 0, 0, 2, 4, 0, 4, 0, 2, 10], 2, 13), 142 | Pseq([1, 2, 4, 6, 10, 8, 2, 50, 1, 3, 5, 175], inf) 143 | ), 144 | Pstutter( 145 | Pseq([1,2,2, 10, 5,3, 1, 2, 8, 2, 4, 1, 1, 2, 6, 2]), 146 | Pseq([1,6,25,250,4,400,600,10,500,700,625,1000,50,400,125,85]) 147 | ) 148 | ], 149 | Pstutter( 150 | Pseq([1, 1, 1], inf), 151 | Pseq([0, 1, 2], inf) 152 | ) 153 | ), 154 | \pan, Pseq([-1, 0, 1], inf), 155 | \amp, 0.15 156 | ).play; 157 | 158 | 4.wait; 159 | 160 | ~bassKick.value; // 2s 161 | 162 | 4.wait; 163 | ~simpleBassLine.value(\triSaw, inf, 0.25, pitchShift: 1.25); 164 | 165 | ~bass3.value(8); // 32s 166 | ~bass3.value(8, 7500, 0.0125, 0.3, 1); // 32s 167 | (0.25).wait; 168 | ~snare3.value(4, 2000, 0.5); // 32s 169 | 170 | 2.wait; 171 | 172 | Synth(\envSine, [\sFreq, 0, \eFreq, 300, \amp, 0.5, \fadeIn, 2, \sustain, 0, \fadeOut, 0]); 173 | 174 | }).play; -------------------------------------------------------------------------------- /musical/promising/color splash on sunny day.scd: -------------------------------------------------------------------------------- 1 | // Fairly nice granular synthesis 2 | 3 | ~kaliba = "~/Music/supercollider-music/samples/Kaliba.aiff".standardizePath; 4 | "Audio samples loaded"; 5 | 6 | // Random kalimba Leaves 7 | SynthDef(\grain) { |out=0, sustain=1, attack=1, decay=1, rate=4, density=25, imp=25, amp=1, buf| 8 | var chan = buf.numChannels, 9 | samp = GrainBuf.ar( 10 | chan, // number of channels 11 | Saw.kr(density), // trigger 12 | //LFNoise1.kr.range(0.1, 0.25), // duration 13 | VarSaw.kr(density, 0, LFTri.kr(Saw.kr(imp)).range(1, 5)), // duration 14 | buf, 15 | rate, // playback rate 16 | VarSaw.kr(density, 0, LFTri.kr(Saw.kr(imp)).range(0, 1)), // position 17 | 2, // interpolation 18 | 0, // panning 19 | Buffer.sendCollection( 20 | s, 21 | Env([0, 0.5, 1, 0.25], [0.05, 0.05, 0.1], [2.5, -2.5, -5]).discretize, 22 | chan 23 | ) 24 | ) * XLine.kr(0.005, amp, attack), 25 | env = EnvGen.kr(Env([0,1,1,0], [attack,sustain,decay]), doneAction: 2) * samp, 26 | rvrb = FreeVerb2.ar(env, env, 0.5, 0.75, 1), 27 | pan2 = Pan2.ar(rvrb, LFNoise0.kr(density, -1, 2)-1); 28 | 29 | Out.ar(out, pan2); 30 | }.add; 31 | 32 | b = Buffer.readChannel(s, ~kaliba, channels: 0, action: { |kaliba_buffer| 33 | Routine({ 34 | Synth(\grain, [\buf, kaliba_buffer, \sustain, 40, \attack, 1, \decay, 4, \amp, 0.5, \density, 1.618, \imp, 1.618, \rate, 2.5]); 35 | 4.wait; 36 | Synth(\grain, [\buf, kaliba_buffer, \sustain, 40, \attack, 1, \decay, 4, \amp, 0.5, \density, 1, \imp, 1, \rate, 1.5]); 37 | 4.wait; 38 | Synth(\grain, [\buf, kaliba_buffer, \sustain, 40, \attack, 0.05, \decay, 4, \amp, 0.5, \density, 2, \imp, 40, \rate, 0.5]); 39 | /*Pbind( 40 | \instrument, \grain, 41 | \buf, kaliba_buffer, 42 | \dur, Pseq([4, 8] / 2, inf), 43 | \density, Pseq([10, 20], inf), 44 | \rate, Pseq([2.5, 1.5], inf), 45 | \legato, 1.25, 46 | \attack, 0.05, 47 | \decay, 2, 48 | \amp, 0.5, 49 | \pan, 0 50 | ).play;*/ 51 | }).play; 52 | }); -------------------------------------------------------------------------------- /musical/promising/darkness.scd: -------------------------------------------------------------------------------- 1 | SynthDef(\siren) {|out=0, freq=440, mod=0.75, crushRate=100, crushStep=0.1, amp=0.5, sustain=1| 2 | var osc, f_mod, env, reverb; 3 | 4 | env = EnvGen.kr(Env.linen(0.005, 0.15, sustain), doneAction: 2); 5 | f_mod = EnvGen.kr(Env([freq, freq*mod], [sustain])); 6 | osc = Saw.ar(f_mod, env); 7 | reverb = FreeVerb.ar(osc, 1, 1, 0.5); 8 | 9 | Out.ar(out, reverb * env); 10 | }.add; 11 | 12 | SynthDef(\bubbleString) { |out=0, freq=250, amp=0.5, feedbackAmp=0.975, gate=1| 13 | var pluckAt, period, controlPeriod, block, sustain, exciter, bubble_gum, effects, synth, feedback, d1, d2; 14 | 15 | // Properties 16 | pluckAt = 0.5; 17 | period = freq.reciprocal; 18 | controlPeriod = ControlRate.ir; 19 | block = controlPeriod.reciprocal; 20 | 21 | // Synths 22 | sustain = Linen.kr(gate, susLevel: amp, doneAction: 0); 23 | exciter = EnvGen.ar( 24 | Env.new( 25 | [0,1,0], 26 | [period * pluckAt + 0.01, period * (1-pluckAt) + 0.01], 27 | 'linear' 28 | ), 29 | doneAction: 0 30 | ); 31 | bubble_gum = SinOsc.kr(0.5).abs().max(0.5); 32 | effects = bubble_gum; 33 | synth = ( 34 | Pulse.ar(freq, bubble_gum) + 35 | VarSaw.ar(freq, 0, LFTri.kr(0.5).range(0.5,1)) 36 | ) * exciter; 37 | 38 | // Output 39 | feedback = LocalIn.ar(1); 40 | d1 = DelayL.ar(synth + feedback, period-block, period-block); 41 | d2 = DelayL.ar(synth + d1.neg, period-block, period-block) * feedbackAmp; 42 | 43 | LocalOut.ar(d2.neg); 44 | 45 | Out.ar(out, d2 * effects * sustain); 46 | }.add; 47 | 48 | SynthDef(\bass_drum) { |out=0, freq=150, sustain=0.25, pan=0, amp=1| 49 | var hit_time, sust, osc, osc2, panning; 50 | 51 | hit_time = 0.15; 52 | sust = EnvGen.kr(Env([1, 1, 0], [sustain, 0.05]), doneAction: 2); 53 | 54 | osc = SinOsc.ar(XLine.kr(freq*1.618, freq/3.236, hit_time), 0, amp); 55 | osc2 = osc - Pulse.kr(freq/6.472, 0.5, 0.25*amp); 56 | 57 | panning = Pan2.ar(osc2, pan); 58 | 59 | Out.ar(out, panning*sust); 60 | }.add; 61 | 62 | SynthDef(\noiseSnare) { |out=0, pan=0, freq=440, attack=0.005, sustain=0.05, decay=0.15, amp=0.25| 63 | var level, hitLevel, hit_time, noise, reverb, pan2; 64 | 65 | hit_time = 0.05; 66 | 67 | level = EnvGen.kr(Env([0,amp,amp,0], [attack,sustain,decay]), 1, doneAction: 2); 68 | hitLevel = EnvGen.kr(Env([0,amp,amp,0], [attack,hit_time,decay]), 1); 69 | 70 | noise = LFNoise0.ar(freq, hitLevel) + LFNoise0.ar(freq / 1.618, hitLevel); 71 | reverb = FreeVerb.ar(noise, 0, 1, 0.5); 72 | 73 | pan2 = Pan2.ar(reverb, pan); 74 | 75 | Out.ar(out, pan2 * level); 76 | }.add; 77 | 78 | SynthDef(\fogVibe) { |out=0, imp=5, freq=150, sustain=0.25, attack=0.75, decay=0.25, pan=0, amp=0.5| 79 | var aEnv = EnvGen.kr( 80 | Env.linen(sustain*attack, sustain*(1-attack), decay, amp), 81 | 1, 82 | doneAction: 2 83 | ), 84 | saw = Saw.ar(imp).min(1), 85 | sine = SinOsc.ar(freq, 0, saw), 86 | rvrb = sine + FreeVerb.ar(sine, 0.5, 1, 0.5), 87 | pan2 = Pan2.ar(rvrb, pan); 88 | 89 | Out.ar(out, pan2 * aEnv); 90 | }.add; 91 | 92 | 93 | 94 | Routine({ 95 | 96 | // 1 loop = 8 seconds 97 | ~bassMelody = { |synth, loops=1, amp=0.25, feedbackAmp=0.995, shift=1, speed=1, out=0| 98 | Pbind( 99 | \instrument, synth, 100 | \freq, Pseq([75, 90, 110, 50, 25, 100] * shift, loops), 101 | \dur, Pseq([0.75] / speed, inf), 102 | \legato, 1, 103 | \amp, amp, 104 | \feedbackAmp, feedbackAmp, 105 | \out, out 106 | ).play; 107 | }; 108 | 109 | // 1 loop = 2s 110 | ~bassKick = { |loops=1, freq=150, amp=0.5, dur=0.5, legato=0.25, dStut1=1, dStut2=1, dStut3=4, pan=0, speed=1| 111 | Pbind( 112 | \instrument, \bass_drum, 113 | \freq, Pseq(freq.asArray, inf), 114 | \dur, PdurStutter( 115 | Pstutter( 116 | Pseq(dStut1.asArray, inf), 117 | Pseq(dStut2.asArray, inf) 118 | ), 119 | Pstutter( 120 | Pseq(dStut3.asArray, loops), 121 | Pseq(dur.asArray/speed, loops) 122 | ) 123 | ), 124 | \legato, legato, 125 | \pan, pan, 126 | \amp, amp 127 | ).play; 128 | }; 129 | 130 | // 1 loop = 2 seconds 131 | ~snare = { |loops=1, freq=1250 amp=0.5, dur=0.5, dStut1=1, dStut2=1, dStut3=4, speed=1| 132 | Pbind( 133 | \instrument, \noiseSnare, 134 | \freq, Pseq(freq.asArray, inf), 135 | \dur, PdurStutter( 136 | Pstutter( 137 | Pseq(dStut1.asArray, inf), 138 | Pseq(dStut2.asArray, inf) 139 | ), 140 | Pstutter( 141 | Pseq(dStut3.asArray, loops), 142 | Pseq(dur.asArray/speed, loops) 143 | ) 144 | ), 145 | \amp, amp 146 | ).play; 147 | }; 148 | 149 | Synth(\siren, [\freq, 75, \sustain, 10]); 150 | Synth(\siren, [\freq, 75/2, \sustain, 10, \amp, 0.25]); 151 | (5).wait; 152 | Synth(\siren, [\freq, 75, \mod, 5, \sustain, 10, \out, 1]); 153 | ~bassMelody.value(\siren, loops:10, amp:0.5, shift:1.618, speed:150); 154 | (0.6).wait; 155 | ~bassMelody.value(\siren, loops:5, amp:0.5, shift:4, speed:250, out:1); 156 | (0.25).wait; 157 | ~bassMelody.value(\siren, loops:5, amp:0.5, shift:6, speed:300); 158 | ~bassMelody.value(\siren, loops:15, amp:0.5, shift:1, speed:50, out:1); 159 | (0.6).wait; 160 | ~bassMelody.value(\siren, loops:3, amp:0.5, shift:10, speed:350, out:1); 161 | (0.6).wait; 162 | Synth(\bubbleString, [\freq, 250, \amp, 0.5, \feedbackAmp, 0.9975]); 163 | (2.375).wait; 164 | Synth(\bubbleString, [\freq, 100, \amp, 0.5, \feedbackAmp, 0.995, \out, 1]); 165 | (7.5).wait; 166 | Synth(\bubbleString, [\freq, 90, \amp, 0.5, \feedbackAmp, 0.995, \out, 1]); 167 | 168 | ~bassKick.value(loops:4, freq:135, speed:0.5); // 16s 169 | (8.5).wait; 170 | ~snare.value(loops:4, freq:250, amp:0.4, speed:0.5); // 16s 171 | 172 | (2.5).wait; 173 | 174 | Pbind( 175 | \instrument, \fogVibe, 176 | \freq, Pseq([75, 70, 100, 90, 85] * 2 * 1.618, inf), 177 | \dur, Pstutter( 178 | Pseq([3], inf), 179 | Pseq([4], 100) 180 | ), 181 | \legato, 1, 182 | \attack, 0.15, 183 | \imp, 60, 184 | \amp, 0.1 185 | ).play; 186 | 187 | (16).wait; 188 | 189 | ~bassKick.value(loops:4, freq:135, speed:0.5); // 16s 190 | (0.5).wait; 191 | ~snare.value(loops:4, freq:250, amp:0.4, speed:0.5); // 16s 192 | 193 | (8).wait; 194 | 195 | /* 196 | ~bassMelody.value(\siren, loops:3, amp:0.025, shift:10, speed:350, out:1); 197 | (0.05).wait; 198 | ~bassMelody.value(\siren, loops:5, amp:0.025, shift:4, speed:250); 199 | (0.1).wait; 200 | ~bassMelody.value(\siren, loops:5, amp:0.025, shift:6, speed:300, out:1); 201 | (0.15).wait; 202 | ~bassMelody.value(\siren, loops:3, amp:0.025, shift:18, speed:400); 203 | */ 204 | 205 | }).play; -------------------------------------------------------------------------------- /musical/promising/idyllic.scd: -------------------------------------------------------------------------------- 1 | // Mishmash of various instruments and textures from other files 2 | 3 | ~kaliba = "~/Music/supercollider-music/samples/Kaliba.aiff".standardizePath; 4 | "Audio samples loaded"; 5 | 6 | // Kalimba Ringer 7 | SynthDef(\kring) { |out=0, dur=3, pos=0, gate=1, attack=0.005, decay=0.005, amp=0.5, buf| 8 | var samp = GrainBuf.ar( 9 | buf.numChannels, // number of channels 10 | Impulse.ar(XLine.kr(100, 10, dur)), // trigger 11 | XLine.kr(0.1, 1.5, dur), // duration 12 | buf, 13 | 1, // playback rate 14 | pos, // position 15 | 1, // no interpolation 16 | 0, // panning 17 | -1 // grain envelope buffer 18 | ) * XLine.kr(0.005, amp, attack), 19 | env = EnvGen.kr(Env.cutoff(decay, 1), gate, doneAction: 2) * samp; 20 | 21 | Out.ar(out, env); 22 | }.add; 23 | 24 | // Random kalimba Leaves 25 | SynthDef(\randomLeaves) { |out=0, gate=1, attack=1, decay=1, rate=4, density=25, amp=1, buf| 26 | var chan = buf.numChannels, 27 | samp = GrainBuf.ar( 28 | chan, // number of channels 29 | LFNoise1.kr(density), // trigger 30 | LFNoise1.kr.range(0.1, 0.25), // duration 31 | buf, 32 | rate, // playback rate 33 | LFNoise0.kr.range(0,1), // position 34 | 2, // interpolation 35 | 0, // panning 36 | Buffer.sendCollection( 37 | s, 38 | Env([0, 0.5, 1, 0.25], [0.05, 0.05, 0.1], [2.5, -2.5, -5]).discretize, 39 | chan 40 | ) 41 | ) * XLine.kr(0.005, amp, attack), 42 | env = EnvGen.kr(Env.cutoff(decay, 1), gate, doneAction: 2) * samp, 43 | rvrb = FreeVerb2.ar(env, env, 0.5, 1, 0), 44 | pan2 = Pan2.ar(rvrb, LFNoise0.kr(density, -1, 2)-1); 45 | 46 | Out.ar(out, pan2); 47 | }.add; 48 | 49 | SynthDef(\sineBell) { |out=0, pan=0, freq=100, attack=0.005, sustain=0.1, decay=0.005, amp=1| 50 | var sine = SinOsc.ar( 51 | freq, 52 | 0, 53 | EnvGen.kr(Env([0,amp,amp,0], [attack,sustain,decay]), 1, doneAction: 2) 54 | ), 55 | pan2 = Pan2.ar(sine, pan); 56 | 57 | Out.ar(out, pan2); 58 | }.add; 59 | 60 | 61 | 62 | // 1 loop = 14 seconds 63 | ~bassLine = { |synth, loops=1, legato=0.95, attack=0.005, decay=0.005, amp=0.25, imp=0.125, speed=1, scale=1| 64 | Pbind( 65 | \instrument, synth, 66 | \freq, Pswitch( 67 | [ 68 | Pseq([28,35,40, 30,37,42, 31,38,43, 30,37,42].midicps), 69 | Pseq([31, 38, 43,33, 40, 45].midicps) 70 | ], 71 | Pstutter( 72 | Pseq([3,1], inf), 73 | Pseq([0,1], loops) 74 | ) 75 | ) * scale, 76 | \dur, Pswitch( 77 | [ 78 | Pseq([0.5,0.5,1] / 2) 79 | ], 80 | Pstutter( 81 | Pseq([14], inf), 82 | Pseq([0], loops) 83 | ) 84 | ) / speed, 85 | \legato, legato, 86 | \attack, attack, 87 | \decay, decay, 88 | \amp, amp, 89 | \imp, imp, 90 | \pan, 0 91 | ).play; 92 | }; 93 | 94 | ~bassLineAccomp = { |synth, loops=1, legato=0.95, attack=0.005, decay=0.005, amp=0.25, imp=0.125, speed=1, scale=1| 95 | Pbind( 96 | \instrument, synth, 97 | \freq, Pswitch( 98 | [ 99 | Pseq([28,35,40, 30,37,\rest, \r,\r,\r, \r,\r,\r, 31,38,43, 30,37,\r, \r,\r,\r, \r,\r,\r].midicps), 100 | Pseq([31, 38, 43,33, 40, 45].midicps) 101 | ], 102 | Pstutter( 103 | Pseq([2,1], inf), 104 | Pseq([0,1], loops) 105 | ) 106 | ) * scale, 107 | \dur, Pswitch( 108 | [ 109 | Pseq([0.5,0.5,1] / 2) 110 | ], 111 | Pstutter( 112 | Pseq([14], inf), 113 | Pseq([0], loops) 114 | ) 115 | ) / speed, 116 | \legato, legato, 117 | \attack, attack, 118 | \decay, decay, 119 | \amp, amp, 120 | \imp, imp, 121 | \pan, 0 122 | ).play; 123 | }; 124 | 125 | 126 | 127 | b = Buffer.readChannel(s, ~kaliba, channels: 0, action: { |kaliba_buffer| 128 | Routine({ 129 | 130 | var dur = 4, 131 | legato = 1; 132 | 133 | Synth(\randomLeaves, [\buf, kaliba_buffer, \attack, 1, \decay, 4, \amp, 0.5, \density, 10, \rate, 0.5]); 134 | Synth(\randomLeaves, [\buf, kaliba_buffer, \attack, 1, \decay, 4, \amp, 0.5, \density, 25, \rate, 0.75]); 135 | Synth(\randomLeaves, [\buf, kaliba_buffer, \attack, 1, \decay, 4, \amp, 0.5, \density, 5, \rate, 2]); 136 | 137 | ~bassLine.value(\sineBell, loops:inf, amp:0.5, decay:0.75, speed:1, scale:4); 138 | ~bassLine.value(\sineBell, loops:inf, amp:0.05, decay:0.75, speed:1, scale:4*4); 139 | 4.wait; 140 | ~bassLineAccomp.value(\sineBell, loops:inf, amp:0.25, attack:0.75, decay:0.75, scale:4*1.5); 141 | 142 | 100.wait; 143 | 144 | Pbind( 145 | \instrument, \randomLeaves, 146 | \buf, kaliba_buffer, 147 | \rate, Pseq([4, 8, 10, 1], inf), 148 | \density, Pseq([25, 50, 75, 100, 5], inf), 149 | \dur, Pseq([dur], inf), 150 | \attack, 0.005, 151 | \decay, (dur*legato) - dur, 152 | \legato, legato, 153 | \amp, 0.5 154 | );//.play; 155 | 156 | // Ringer 157 | Pbind( 158 | \instrument, \kring, 159 | \buf, kaliba_buffer, 160 | \dur, Pseq([5]), 161 | \decay, 5, 162 | \pos, 0.03, 163 | \amp, 0.25 164 | ).play; 165 | 166 | (5).wait; 167 | 168 | Pbind( 169 | \instrument, \kring, 170 | \buf, kaliba_buffer, 171 | \dur, Pseq([5]), 172 | \decay, 5, 173 | \pos, 0.3, 174 | \amp, 0.25, 175 | \out, 1 176 | ).play; 177 | 178 | }).play; 179 | }); -------------------------------------------------------------------------------- /musical/promising/love dance.scd: -------------------------------------------------------------------------------- 1 | SynthDef(\square) { |out=0, freq=400, atk=0.005, sustain=1, dec=0.005, pan=0, amp=0.25| 2 | var env, osc, osc2, panning, reverb; 3 | 4 | env = EnvGen.kr(Env.linen(atk, sustain, dec, amp, 0), doneAction: 2); 5 | osc = Pulse.ar(freq, 0.5, 1); 6 | osc2 = Pulse.ar(freq*2, 0.5, 1); 7 | panning = Pan2.ar(osc+osc2, pan); 8 | reverb = FreeVerb.ar(panning, 0.5, 1, 0.5) * env; 9 | 10 | Out.ar(out, reverb); 11 | }.add; 12 | 13 | SynthDef(\chipBassDrum) { |out=0, freq=150, sustain=0.25, pan=0, amp=1| 14 | var hit_time, level, pulse1, pulse2, pan2; 15 | 16 | hit_time = 0.1; 17 | level = EnvGen.kr(Env([1, 1, 0], [hit_time, 0.05]), 1, doneAction: 2); 18 | 19 | pulse1 = Pulse.ar(XLine.kr(freq, freq/4, hit_time), 0.5, amp); 20 | pulse2 = pulse1 - Pulse.kr(freq/4/2, 0.5, 0.75); 21 | pan2 = Pan2.ar(pulse2, pan); 22 | 23 | Out.ar(out, pan2 * level); 24 | }.add; 25 | 26 | SynthDef(\noiseSnare) { |out=0, pan=0, freq=440, attack=0.005, sustain=0.05, decay=0.15, amp=0.25| 27 | var level, hitLevel, hit_time, noise, reverb, pan2; 28 | 29 | hit_time = 0.05; 30 | 31 | level = EnvGen.kr(Env([0,amp,amp,0], [attack,sustain,decay]), 1, doneAction: 2); 32 | hitLevel = EnvGen.kr(Env([0,amp,amp,0], [attack,hit_time,decay]), 1); 33 | 34 | noise = LFNoise0.ar(freq, hitLevel) + LFNoise0.ar(freq / 1.618, hitLevel); 35 | reverb = FreeVerb.ar(noise, 0, 1, 0.5); 36 | 37 | pan2 = Pan2.ar(reverb, pan); 38 | 39 | Out.ar(out, pan2 * level); 40 | }.add; 41 | 42 | 43 | 44 | Routine({ 45 | 46 | ~speed = 0.35 * 1.75; 47 | 48 | // Drum 49 | 50 | // Bass Drum 51 | Pbind( 52 | \instrument, \chipBassDrum, 53 | \freq, Pswitch( 54 | [ 55 | Pseq([\r]), // 0 56 | Pseq([200]), // 1 57 | ], 58 | Pswitch( 59 | [ 60 | Pseq([1,0,0,1,1,0,0,0]), // 0 61 | Pseq([0,0,0,1,0,1,0,0]), // 1 62 | Pseq([1,0,0,0,1,0,1,0]), // 2 63 | Pseq([1,0,0,0,0,0,0,0]), // 3 64 | ], 65 | Pswitch( 66 | [ 67 | Pseq([0,1,2,3]), // 0 68 | ], 69 | Pstutter( 70 | Pseq([inf], inf), 71 | Pseq([0], inf) 72 | ) 73 | ) 74 | ) 75 | ), 76 | \dur, Pswitch( 77 | [ 78 | Pseq(1 / [8,8,8,8,8,8,8,8]), // 0 79 | ] / ~speed, 80 | Pswitch( 81 | [ 82 | Pseq([0,0,0,0]), // 0 83 | ], 84 | Pstutter( 85 | Pseq([inf], inf), 86 | Pseq([0]) 87 | ) 88 | ) 89 | ), 90 | \decay, 0.4, 91 | \amp, 0.175 92 | ).play; 93 | 94 | // Snare Drum 95 | Pbind( 96 | \instrument, \noiseSnare, 97 | \freq, Pswitch( 98 | [ 99 | Pseq([\r]), // 0 100 | Pseq([5000]), // 1 101 | ], 102 | Pswitch( 103 | [ 104 | Pseq([0,0,0,0,0,0,1,0]), // 0 105 | Pseq([0,0,1,0,0,0,0,1]), // 1 106 | Pseq([0,0,1,0,0,0,0,0]), // 2 107 | ], 108 | Pswitch( 109 | [ 110 | Pseq([0,0,1,1]), // 0 111 | ], 112 | Pstutter( 113 | Pseq([inf], inf), 114 | Pseq([0], inf) 115 | ) 116 | ) 117 | ) 118 | ), 119 | \dur, Pswitch( 120 | [ 121 | Pseq(1 / [8,8,8,8,8,8,8,8]), // 0 122 | ] / ~speed, 123 | Pswitch( 124 | [ 125 | Pseq([0,0,0,0]), // 0 126 | ], 127 | Pstutter( 128 | Pseq([inf], inf), 129 | Pseq([0]) 130 | ) 131 | ) 132 | ), 133 | \decay, 0.4, 134 | \amp, 0.25 135 | ).play; 136 | 137 | // Hi-hat 138 | Pbind( 139 | \instrument, \noiseSnare, 140 | \freq, Pswitch( 141 | [ 142 | Pseq([\r]), // 0 143 | Pseq([15000]), // 1 144 | Pseq([22500]), // 2 145 | ], 146 | Pswitch( 147 | [ 148 | Pseq([1,0,1,0,1,0,1,0]), // 0 149 | Pseq([1,1,2,0,0,1,1,2]), // 1 150 | Pseq([0,0,1,1,2,0,0,1]), // 2 151 | ], 152 | Pswitch( 153 | [ 154 | Pseq([0,0,1,2]), // 0 155 | ], 156 | Pstutter( 157 | Pseq([inf], inf), 158 | Pseq([0], inf) 159 | ) 160 | ) 161 | ) 162 | ), 163 | \dur, Pswitch( 164 | [ 165 | Pseq(1 / [8,8,8,8,8,8,8,8]), // 0 166 | ] / ~speed, 167 | Pswitch( 168 | [ 169 | Pseq([0,0,0,0]), // 0 170 | ], 171 | Pstutter( 172 | Pseq([inf], inf), 173 | Pseq([0]) 174 | ) 175 | ) 176 | ), 177 | \decay, 0.6, 178 | \amp, 0.15 179 | ).play; 180 | 181 | }).play; -------------------------------------------------------------------------------- /musical/promising/nini.scd: -------------------------------------------------------------------------------- 1 | // Supposed to sound like a marsh at night with a bell part, but I haven't gotten to the bells 2 | 3 | SynthDef(\beep) { |out=0, freq=440, amp=1, sustain=1| 4 | var sine, ring; 5 | 6 | sine = SinOsc.ar( 7 | freq, 8 | 0, 9 | Trig.kr(Line.kr(1, 0, sustain), sustain) 10 | ); 11 | ring = Ringz.ar(sine, 2000, sustain, amp); 12 | 13 | Out.ar(out, ring); 14 | }.add; 15 | 16 | 17 | 18 | 19 | 20 | Routine({ 21 | 22 | Pbind( 23 | \instrument, \beep, 24 | \freq, Pstutter( 25 | Pseq([4, 1], inf), 26 | Pseq([41, 39].midicps, inf) 27 | ), 28 | \dur, Pstutter( 29 | Pseq([4, 1], inf), 30 | Pseq([0.125 / 2, Rest(0.125 * 2)], inf) 31 | ), 32 | \amp, 0.05, 33 | \out, 0 34 | ).play; 35 | 36 | Pbind( 37 | \instrument, \beep, 38 | \freq, Pswitch( 39 | [ 40 | Pseq([\r]), 41 | Pstutter( 42 | Pseq([4, 1]), 43 | Pseq([53, 45].midicps, inf) 44 | ) 45 | ], 46 | Pstutter( 47 | Pseq([1, inf]), 48 | Pseq([0, 1]) 49 | ) 50 | ), 51 | \dur, Pstutter( 52 | Pseq([4, 1], inf), 53 | Pseq([0.125 / 2, Rest(0.125 * 1.618)], inf) 54 | ), 55 | \amp, 0.05, 56 | \out, 1 57 | ).play; 58 | 59 | 60 | //90.wait; 61 | Pbind( 62 | \instrument, \beep, 63 | \freq, Pstutter( 64 | Pseq([4, 1], inf), 65 | Pseq([71, 59].midicps, inf) 66 | ), 67 | \dur, Pstutter( 68 | Pseq([4, 1], inf), 69 | Pseq([0.125 / 2, Rest(0.125 * 2 * 8)], inf) 70 | ), 71 | \amp, 0.075, 72 | \out, 0 73 | ).play; 74 | 75 | (1.618 * 2).wait; 76 | 77 | Pbind( 78 | \instrument, \beep, 79 | \freq, Pstutter( 80 | Pseq([4, 1], inf), 81 | Pseq([59, 47].midicps, inf) 82 | ), 83 | \dur, Pstutter( 84 | Pseq([4, 1], inf), 85 | Pseq([0.125 / 2, Rest(0.125 * 2 * 4)], inf) 86 | ), 87 | \amp, 0.075, 88 | \out, 1 89 | ).play; 90 | 91 | (1.618 * 2).wait; 92 | 93 | Pbind( 94 | \instrument, \beep, 95 | \freq, Pstutter( 96 | Pseq([4, 1], inf), 97 | Pseq([80, 97].midicps, inf) 98 | ), 99 | \dur, Pstutter( 100 | Pseq([4, 1], inf), 101 | Pseq([0.125 / 2, Rest(0.125 * 2 * 12)], inf) 102 | ), 103 | \amp, 0.05, 104 | \out, 0 105 | ).play; 106 | 107 | Pbind( 108 | \instrument, \beep, 109 | \freq, Pswitch( 110 | [ 111 | Pstutter( // 0 112 | Pseq([4, 1]), 113 | Pseq([71, 59].midicps, inf) 114 | ), 115 | Pstutter( // 1 116 | Pseq([4, 1]), 117 | Pseq([59, 47].midicps, inf) 118 | ), 119 | Pstutter( // 2 120 | Pseq([1,1,1,1,1]), 121 | Pseq([67, 55, 71, 60, 64].midicps, inf) 122 | ), 123 | Pstutter( // 3 124 | Pseq([1,1,1,1,1]), 125 | Pseq([40, 50, 60, 70, 80].midicps, inf) 126 | ), 127 | Pstutter( // 4 128 | Pseq([1,1,1,1,1]), 129 | Pseq([80, 70, 50, 60, 90].midicps, inf) 130 | ) 131 | ], 132 | Pstutter( 133 | Pseq([8, 4, 3, 1], inf), 134 | Pseq([0, 1, 2, 3], inf) 135 | ) 136 | ), 137 | \dur, Pstutter( 138 | Pseq([4, 1], inf), 139 | Pseq([0.125/2, Rest(0.125*2*10)], inf) 140 | ), 141 | \amp, 0.1, 142 | \out, Pseq([0], inf) 143 | ).play; 144 | 145 | }).play; -------------------------------------------------------------------------------- /musical/promising/riff.scd: -------------------------------------------------------------------------------- 1 | // Accidental synth rock or something 2 | 3 | SynthDef(\vibeSpark) { |out=0, imp=5, freq=150, sustain=0.25, attack=0.75, decay=0.25, pan=0, amp=0.5| 4 | var aEnv, saw, sine, rvrb, pan2; 5 | 6 | aEnv = EnvGen.kr( 7 | Env.linen(sustain*attack, sustain*(1-attack), decay, amp, [-2.5,0,0]), 8 | 1, 9 | doneAction: 2 10 | ); 11 | saw = Saw.ar(imp, aEnv); 12 | sine = SinOsc.ar(freq, 0, saw).min(amp).max(0-amp); 13 | rvrb = sine + FreeVerb.ar(sine, 0.5, 1, 0.5); 14 | pan2 = Pan2.ar(rvrb, pan); 15 | 16 | Out.ar(out, pan2); 17 | }.add; 18 | 19 | 20 | 21 | Routine({ 22 | 23 | // 1/6 is interesting, 1/12 as well 24 | var speed = 1/5; 25 | 26 | // Bass 27 | Pbind( 28 | \instrument, \vibeSpark, 29 | \freq, Pswitch( 30 | [ 31 | // Main melody start 32 | Pseq([ 50, 25, 50, 75] * 3.236), 33 | Pseq([ 50, 25, 50, 75] * 2.427), 34 | Pseq([ 50, 25,100,125] * 2.427), 35 | // Sub-main melody start 36 | Pseq([ 50, 25, 50, 75] * 2), 37 | Pseq([ 50, 25, 50, 75] * 1.618), 38 | Pseq([ 50, 25,100,150] * 1.618), 39 | // Sub-main melody end 40 | // Main melody end 41 | // Filler start 42 | Pseq([ 75, 50, 75, 50] * 3.236), 43 | Pseq([ 75,100, 75,100] * 3.236), 44 | Pseq([150,100,125, 75] * 2.427), 45 | Pseq([150,100,125, 75] * 2), 46 | // Filler end 47 | ], 48 | Pswitch( 49 | [ 50 | // Main melody (speed * 4 * 8) 51 | Pstutter( 52 | Pseq([4,3,1]), 53 | Pseq([0,1,2]) 54 | ), 55 | // Sub-main melody (speed * 4 * 6) 56 | Pstutter( 57 | Pseq([2,3,1]), 58 | Pseq([3,4,5]) 59 | ), 60 | // Filler (speed * 4 * 10) 61 | Pstutter( 62 | Pseq([4,2,2,2]), 63 | Pseq([6,7,8,9]) 64 | ), 65 | ], 66 | Pstutter( 67 | Pseq([1,1,1,1,1,inf], inf), 68 | Pseq([0,1,0,1,0,2], 10) 69 | ) 70 | ) 71 | ), 72 | \dur, Pseq([speed], inf), 73 | \legato, 1, 74 | \imp, 0.00025, 75 | \amp, 0.1, 76 | \out, 0 77 | ).play; 78 | 79 | (speed * 4 * 14).wait; 80 | 81 | // Lead 82 | Pbind( 83 | \instrument, \vibeSpark, 84 | \freq, Pswitch( 85 | [ 86 | // Main melody start 87 | Pseq([150, 75,100,125] * 3.236 * 2), 88 | Pseq([150, 75,100,125] * 3.236 * 2 * 0.75), 89 | Pseq([150, 75,100,125] * 3.236 * 2 * 0.5), 90 | Pseq([ 75,100, 75,150] * 3.236 * 2 * 0.5), 91 | Pseq([ 75,100,125,150] * 3.236 * 2 * 0.5), 92 | Pseq([ 75,100,225,250] * 3.236 * 2 * 0.5), 93 | Pseq([ 50, 75,100,150] * 3.236 * 2 * 0.5), 94 | // Main melody end 95 | ], 96 | // Main Melody (speed * 4 * 23) 97 | Pstutter( 98 | Pseq([2,2,2,1,1,2,2,2,1,1,2,2,2,1], 1), // 1 loop 99 | Pseq([0,1,2,3,4,0,1,2,5,6,1,0,1,6], 10) 100 | ) 101 | ), 102 | \dur, Pseq([speed], inf), 103 | \legato, 1, 104 | \imp, 0.00025, 105 | \amp, 0.075, 106 | \out, 0 107 | ).play; 108 | 109 | (speed * 4 * 42).wait; 110 | 111 | // Lead 112 | Pbind( 113 | \instrument, \vibeSpark, 114 | \freq, Pswitch( 115 | [ 116 | // Main melody start 117 | Pseq([ 75,125, 75,100] * 3.236 * 2), 118 | Pseq([100,150,100,125] * 3.236 * 2 * 0.75), 119 | Pseq([150, \r,125, \r] * 3.236 * 2 * 0.5), 120 | Pseq([150, \r, \r, \r] * 3.236 * 2 * 0.5), 121 | Pseq([125, \r, \r, \r] * 3.236 * 2 * 0.5), 122 | // Main melody end 123 | ], 124 | // Main Melody (speed * 4 * 10) 125 | Pstutter( 126 | Pseq([2,2,2,2,2], 2), // 2 loops 127 | Pseq([0,1,2,3,4], 10) 128 | ) 129 | ), 130 | \dur, Pseq([speed], inf), 131 | \legato, 1, 132 | \imp, 0.00025, 133 | \amp, 0.075, 134 | \out, 0 135 | ).play; 136 | 137 | 120.wait; // This would be a cool outro (below) 138 | 139 | Pbind( 140 | \instrument, \vibeSpark, 141 | \freq, Pswitch( 142 | [ 143 | Pseq([50,50,50,50] * 3.236 * 2), 144 | Pseq([150,75,100,125] * 3.236 * 2), 145 | Pseq([150,75,100,125] * 3.236 * 2 * 0.75), 146 | Pseq([150,75,100,125] * 3.236 * 2 * 0.5), 147 | Pseq([75,100,75,150] * 3.236 * 2 * 0.5), 148 | Pseq([75,100,125,150] * 3.236 * 2 * 0.5), 149 | ], 150 | Pstutter( 151 | Pseq([0,2,2,2,1,1], inf), 152 | Pseq([0,1,2,3,4,5], 10) 153 | ) 154 | ), 155 | \dur, Pseq([speed], inf), 156 | \legato, 1, 157 | \imp, 0.0025, 158 | \amp, 0.1, 159 | \out, 0 160 | ).play; 161 | 162 | /*Pbind( 163 | \instrument, \vibeSpark, 164 | \freq, Pseq([59, 66, 62, 60, 59, 67, 64, 59, 66, 62].midicps * 2, 10), 165 | \dur, Pstutter( 166 | Pseq([4, 1], inf), 167 | Pseq([1.5, 2] / 2.5, inf) 168 | ), 169 | \legato, 0.95, 170 | \imp, 0.00025, 171 | \amp, 0.1, 172 | \out, 0 173 | ).play;*/ 174 | 175 | }).play; -------------------------------------------------------------------------------- /musical/promising/scratchy-sorrow.scd: -------------------------------------------------------------------------------- 1 | "~/Music/supercollider-music/samples/samples.sc".standardizePath.loadPaths; 2 | 3 | SynthDef(\cutBuf) { |out=0, imp=2.5, sustain=4, amp=0.25, pb_rate=0.618, buf| 4 | var samp = GrainBuf.ar( 5 | buf.numChannels, // number of channels 6 | 1, // trigger 7 | sustain, // duration 8 | buf, 9 | pb_rate, // playback rate 10 | 0, // position 11 | 0, // linear interpolation 12 | 0, // panning 13 | Buffer.sendCollection( 14 | s, 15 | Env.new([0.75, 1], [1], [0]).discretize, 16 | buf.numChannels 17 | ) 18 | ), 19 | sEnv = EnvGen.kr(Env([amp, amp, 0], [sustain, 0.75], [0, 1]), 1, doneAction: 2), 20 | //cStp = Stepper.kr(Impulse.kr(imp), 0, 0, 1, 1), 21 | cStp = Pulse.kr(imp, 0.5), 22 | pan2 = Pan2.ar(samp * sEnv * cStp, FSinOsc.kr(0.5)); 23 | 24 | Out.ar(out, pan2); 25 | }.add; 26 | 27 | Buffer.readChannel(s, a[15], channels: 0, action: { |ra1_buf| 28 | "Receive Assimilation I loaded".postln; 29 | Buffer.readChannel(s, a[16], channels: 0, action: { |ra2_buf| 30 | "Receive Assimilation II loaded".postln; 31 | Buffer.readChannel(s, a[17], channels: 0, action: { |ra3_buf| 32 | "Receive Assimilation III loaded".postln; 33 | Routine({ 34 | 35 | ~breakBuf = { |synth, buf, amp, imps, durs, loops=1| 36 | var sust = loops * durs.sum, 37 | sImp = Pseq(imps.asArray, inf).asStream, 38 | sDur = Pseq(durs.asArray, inf).asStream, 39 | inst = Synth(synth, [\buf, buf, \sustain, sust, \amp, amp, \imp, sImp.next]); 40 | 41 | Routine({ 42 | (loops * imps.size - 1).do({ 43 | sDur.next.wait; 44 | inst.set(\imp, sImp.next); 45 | }); 46 | }).play; 47 | }; 48 | 49 | ~breakBuf.value(\cutBuf, ra2_buf, 0.5, [1, 2.5, 10], [8, 4, 3, 1], 2); 50 | 51 | }).play; 52 | }); // ra3_buf 53 | }); // ra2_buf 54 | }); // ra1_buf -------------------------------------------------------------------------------- /musical/promising/starberi.scd: -------------------------------------------------------------------------------- 1 | // Somewhat choppy synth duet 2 | 3 | SynthDef(\starBerry) { |out=0, freq=150, filMin=0.1, filMax=0.95, imp=1, gate=1, amp=0.5| 4 | var sust = Linen.kr(gate, releaseTime: 0.25, doneAction: 2), 5 | vSaw = VarSaw.ar( 6 | freq, 7 | 0, 8 | EnvGen.kr(Env([filMin,filMax,filMin], [0.25*imp,0.75*imp], [-5,-5], 2), gate), 9 | amp 10 | ), 11 | pan2 = Pan2.ar(vSaw, FSinOsc.kr(imp*2)*0.25), 12 | rvrb = FreeVerb.ar(pan2, 0.25, 1, 0.75); 13 | 14 | Out.ar(out, rvrb*sust); 15 | }.add; 16 | 17 | SynthDef(\plick) { |out=0, freq=1000, atk=0.005, dec=1| 18 | var sine = SinOsc.ar(freq, 0, 0.25), 19 | saw = Saw.ar(freq*1.25, 0.25), 20 | env = EnvGen.kr(Env.perc(atk, dec*1.5), 1, doneAction: 2), 21 | eSine = sine*env, 22 | eSaw = saw*(env*0.5), 23 | rvrb = AllpassC.ar(eSine+eSaw, 0.025, 0.001, dec); 24 | 25 | Out.ar(out, rvrb); 26 | }.add; 27 | 28 | 29 | 30 | Routine({ 31 | // 1 loop = 16 seconds 32 | ~melody = { |synth, loops=1, amp=0.25, imp=1| 33 | Pbind( 34 | \instrument, synth, 35 | \freq, Pseq([60, 64, 53, 57, 55, 52, 53, 57, 55, 50, 52].midicps, loops), 36 | \dur, Pseq([1.5, 0.5, 0.5, 5.5, 4, 4, 4, 4, 4, 1.5, 2.5] / 2, loops), 37 | \legato, 0.5, 38 | \imp, imp, 39 | \amp, amp 40 | ).play; 41 | }; 42 | 43 | // 1 loop = 8 seconds 44 | ~bassMelody = { |synth, loops=1, amp=0.25, imp=1| 45 | Pbind( 46 | \instrument, synth, 47 | \freq, Pstutter( 48 | Pseq([16], inf), 49 | Pseq([24, 24, 26, 19].midicps*4, loops) 50 | ), 51 | \dur, 0.125, 52 | \legato, 1, 53 | \filMax, 0.1, 54 | \imp, imp, 55 | \amp, amp 56 | ).play; 57 | }; 58 | 59 | ~melody2 = { |synth, loops=1, amp=0.25| 60 | var speed = 1; 61 | 62 | Pbind( 63 | \instrument, synth, 64 | \freq, Pseq([ 65 | 36,38,40,36,38,40,36,38, 66 | 39,41,43,39,41,43,39,41, 67 | 38,40,41,38,40,41,38,40, 68 | 31,33,35,31,33,35,31,33 69 | ].midicps * 1.618 * 4, loops), 70 | \dur, 0.125 * speed, 71 | \legato, 1, 72 | \amp, Pstutter( 73 | Pseq([8, 8, 8, 8], inf), 74 | Pseq([0.5, 0.65, 0.80, 1]*amp, loops) 75 | ), 76 | \imp, 0.5, 77 | \filMax, 0.5, 78 | \filMin, 0.25 79 | ).play; 80 | }; 81 | 82 | ~melody4 = { |synth, loops=1, amp=0.25, imp=0.95| 83 | Pbind( 84 | \instrument, synth, 85 | \freq, Pstutter( 86 | Pseq([4], inf), 87 | Pseq([59, 66, 62, 60, 59, 67, 64, 59, 66, 62].midicps, loops), 88 | ), 89 | \dur, Pstutter( 90 | Pseq([8, 2], inf), 91 | Pseq([1.5, 2] / 8, inf) 92 | ), 93 | \legato, 1, 94 | \imp, imp, 95 | \amp, amp 96 | ).play; 97 | }; 98 | 99 | ~plickMelody4 = { |synth, loops=1, amp=0.25| 100 | Pbind( 101 | \instrument, synth, 102 | \freq, Pstutter( 103 | Pseq([1], inf), 104 | Pseq([59, 66, 62, 60, 59, 67, 64, 59, 66, 62].midicps * 1.618 * 5, loops), 105 | ), 106 | \dur, Pstutter( 107 | Pseq([4, 1], inf), 108 | Pseq([1.5, 2] / 2, inf) 109 | ), 110 | \legato, 1, 111 | \amp, amp 112 | ).play; 113 | }; 114 | 115 | ~bassMelody.value(\starBerry, 20, 0.5, 2); 116 | //~melody2.value(\starBerry, 20, 0.5); 117 | ~melody4.value(\starBerry, 20, 0.25, 0.75); 118 | //~plickMelody4.value(\plick, 20, 0.05); 119 | }).play; -------------------------------------------------------------------------------- /musical/promising/studies.scd: -------------------------------------------------------------------------------- 1 | SynthDef(\vibeSpark) { |out=0, imp=5, freq=150, sustain=0.25, attack=0.75, decay=0.25, pan=0, amp=0.5| 2 | var aEnv = EnvGen.kr( 3 | Env.linen(sustain*attack, sustain*(1-attack), decay, amp, [-2.5,0,0]), 4 | 1, 5 | doneAction: 2 6 | ), 7 | saw = Saw.ar(imp, aEnv), 8 | sine = SinOsc.ar(freq, 0, saw).min(amp).max(0-amp), 9 | rvrb = sine + FreeVerb.ar(sine, 0.5, 1, 0.5), 10 | pan2 = Pan2.ar(rvrb, pan); 11 | 12 | Out.ar(out, pan2); 13 | }.add; 14 | 15 | SynthDef(\fogVibe) { |out=0, imp=5, freq=150, sustain=0.25, attack=0.75, decay=0.25, pan=0, amp=0.5| 16 | var aEnv = EnvGen.kr( 17 | Env.linen(sustain*attack, sustain*(1-attack), decay, amp), 18 | 1, 19 | doneAction: 2 20 | ), 21 | saw = Saw.ar(imp).min(1), 22 | sine = SinOsc.ar(freq, 0, saw), 23 | rvrb = sine + FreeVerb.ar(sine, 0.5, 1, 0.5), 24 | pan2 = Pan2.ar(rvrb, pan); 25 | 26 | Out.ar(out, pan2 * aEnv); 27 | }.add; 28 | 29 | // --- Percussion 30 | 31 | SynthDef(\snare) { |out=0, freq=1250, decay=0.15, amp=0.25, pan=0| 32 | var sust, osc, noise, crispy, rvrb, pan2; 33 | 34 | sust = EnvGen.kr(Env.perc(0.005, decay, amp), 1, doneAction: 2); 35 | 36 | osc = Pulse.ar(freq, 0.5, 1) * WhiteNoise.kr(1); 37 | noise = WhiteNoise.ar(1); 38 | crispy = BrownNoise.ar(0.75); 39 | rvrb = FreeVerb.ar(osc+noise>crispy, 0, 1, 1); 40 | pan2 = Pan2.ar(rvrb, pan); 41 | 42 | Out.ar(out, pan2*sust); 43 | }.add; 44 | 45 | SynthDef(\bassDrum) { |out=0, freq=150, sustain=0.25, pan=0, amp=0.25| 46 | var hit_time, sust, osc, osc2, pan2; 47 | 48 | hit_time = 0.15; 49 | sust = EnvGen.kr(Env([1, 1, 0], [sustain, 0.05]), 1, doneAction: 2); 50 | 51 | osc = SinOsc.ar(XLine.kr(freq*1.618, freq/3.236, hit_time), 0, amp); 52 | osc2 = osc - SinOsc.kr(freq/6.472, 0, 0.25); 53 | pan2 = Pan2.ar(osc2, pan); 54 | 55 | Out.ar(out, pan2*sust); 56 | }.add; 57 | 58 | 59 | 60 | Routine({ 61 | 62 | Pbind( 63 | \instrument, \fogVibe, 64 | \freq, Pseq([75, 100, 75, 50] * 1.618, inf), 65 | \dur, Pseq([2], inf), 66 | \legato, 1, 67 | \attack, 0.25, 68 | \decay, 0.5, 69 | \imp, 0.000125, 70 | \amp, 0.25 71 | ).play; 72 | 73 | 8.wait; 74 | 75 | Pbind( 76 | \instrument, \fogVibe, 77 | \freq, Pswitch( 78 | [ 79 | Pseq([75, 90, 110, 50, 75, 100] * 4), 80 | Pseq([75, 90, 110, 50, 75, 100] * 3.236) 81 | ], 82 | Pstutter( 83 | Pseq([8,8], inf), 84 | Pseq([0,1], 10) 85 | ) 86 | ), 87 | \dur, Pseq([1/8], inf), 88 | \legato, 1, 89 | \imp, 0.025, 90 | \amp, 0.25 91 | ).play; 92 | 93 | Pbind( 94 | \instrument, \fogVibe, 95 | \freq, Pseq([90, \rest, 92, \rest, 91, \rest, 93, \rest] * 1.618, inf), 96 | \dur, Pstutter( 97 | Pseq([8], inf), 98 | Pseq([1], 12) 99 | ), 100 | \legato, 1, 101 | \attack, 1, 102 | \decay, 2, 103 | \imp, 100, 104 | \amp, 0.1, 105 | \out, Pseq([0,0,1,1], inf) 106 | ).play; 107 | 108 | 8.wait; 109 | 110 | // 1 loop = 8s 111 | Pbind( 112 | \instrument, \vibeSpark, 113 | \freq, Pswitch( 114 | [ 115 | Pseq([75, 90, 110, 75, 90, 100] * 4), 116 | Pseq([75, 90, 110, 75, 90, 100] * 3.236) 117 | ], 118 | Pstutter( 119 | Pseq([4,4], inf), 120 | Pseq([0,1], 10) 121 | ) 122 | ), 123 | \dur, Pseq([1/4], inf), 124 | \legato, 1, 125 | \imp, 0.125, 126 | \amp, 0.1, 127 | \out, [0,1] 128 | ).play; 129 | 130 | 8.wait; 131 | 132 | Pbind( 133 | \instrument, \vibeSpark, 134 | \freq, Pswitch( 135 | [ 136 | Pseq([75, 90, 110, 75, 90, 100] * 4 * 2), 137 | Pseq([75, 90, 110, 75, 90, 100] * 3.236 * 2) 138 | ], 139 | Pstutter( 140 | Pseq([4,4] * 2, inf), 141 | Pseq([0,1], 10) 142 | ) 143 | ), 144 | \dur, Pseq([1/4] / 2, inf), 145 | \legato, 1, 146 | \imp, 1, 147 | \decay, 1, 148 | \amp, 0.1, 149 | \out, 0 150 | ).play; 151 | 152 | /*8.wait; 153 | 154 | Pbind( 155 | \instrument, \fogVibe, 156 | \freq, Pstutter( 157 | Pseq([4], inf), 158 | Pseq([144,60,10,5] * 1.618, inf) 159 | ), 160 | \dur, Pstutter( 161 | Pseq([4], inf), 162 | Pseq([0.25], 12) 163 | ), 164 | \legato, 1, 165 | \attack, 0.5, 166 | \decay, 0.5, 167 | \imp, 100, 168 | \amp, 0.15 169 | ).play; 170 | 171 | 4.wait; 172 | 173 | Pbind( 174 | \instrument, \fogVibe, 175 | \freq, Pstutter( 176 | Pseq([4], inf), 177 | Pseq([144,84,134,139] * 1.618 * 6, inf) 178 | ), 179 | \dur, Pstutter( 180 | Pseq([4], inf), 181 | Pseq([0.25], 12) 182 | ), 183 | \legato, 1, 184 | \attack, 0.5, 185 | \decay, 0.5, 186 | \imp, 100, 187 | \amp, 0.1, 188 | \out, 1 189 | ).play;*/ 190 | 191 | 90.wait; 192 | 193 | /*Pbind( 194 | \instrument, \fogVibe, 195 | \freq, Pseq([90, \rest, 92, \rest] * 1.618, inf), 196 | \dur, Pseq([0.5,1.5], 10), 197 | \legato, 1, 198 | \attack, 0.5, 199 | \decay, 0.5, 200 | \imp, 100, 201 | \amp, 0.25 202 | ).play;*/ 203 | 204 | (7.75).wait; 205 | 206 | Synth(\bassDrum, [\freq, 161.8, \sustain, 0.5, \amp, 0.5]); 207 | (0.25).wait; 208 | Synth(\snare, [\amp, 0.25]); 209 | 210 | (0.5).wait; 211 | ~bassKick4.value(4, freq:161.8, dur:1, amp:0.5); 212 | 213 | 90.wait; 214 | 215 | Pbind( 216 | \instrument, \fogVibe, 217 | \freq, Pseq([75, 70, 100, 90, 85] * 4), 218 | \dur, Pstutter( 219 | Pseq([3,2], inf), 220 | Pseq([4,2], 10) 221 | ), 222 | \legato, 1, 223 | \attack, 0.15, 224 | \imp, 20, 225 | \amp, 0.5 226 | ).play; 227 | 228 | Pbind( 229 | \instrument, \fogVibe, 230 | \freq, Pseq([\rest, 90, \rest, 85, \rest] * 4), 231 | \dur, Pseq([12,0.5,1.5,0.5,1.5], 10), 232 | \legato, 1, 233 | \attack, 0.25, 234 | \imp, 200, 235 | \amp, 0.25 236 | ).play; 237 | 238 | 90.wait; 239 | 240 | Pbind( 241 | \instrument, \fogVibe, 242 | \freq, Pswitch( 243 | [ 244 | Pseq([75, 90, 110, 50, 25, 100, 50] * 4), 245 | Pseq([75, 90, 110, 50, 25, 100, 50] * 3.236) 246 | ], 247 | Pstutter( 248 | Pseq([8,8], inf), 249 | Pseq([0,1], 10) 250 | ) 251 | ), 252 | \dur, Pswitch( 253 | [ 254 | Pseq([0.7] / 10), 255 | Pseq([5]) 256 | ], 257 | Pstutter( 258 | Pseq([10,10], inf), 259 | Pseq([1 ,0 ], 10) 260 | ) 261 | ), 262 | \legato, 1, 263 | \imp, Pswitch( 264 | [ 265 | Pseq([0.5]), 266 | Pseq([50]) 267 | ], 268 | Pstutter( 269 | Pseq([10,10], inf), 270 | Pseq([1 ,0 ], 10) 271 | ) 272 | ), 273 | \amp, 0.5 274 | ).play; 275 | 276 | 8.wait; 277 | 278 | }).play; -------------------------------------------------------------------------------- /musical/senior project/Forest.sc: -------------------------------------------------------------------------------- 1 | "~/Music/supercollider-music/samples/samples.sc".standardizePath.loadPaths; 2 | 3 | 4 | 5 | // Background Leads 6 | 7 | SynthDef(\hardSine) { |out=0, freq=440, gate=1, amp=1| 8 | var env = Linen.kr(gate, releaseTime: 2, doneAction: 2), 9 | aEnv = EnvGen.kr(Env([0, amp, amp/2], [0.15, 0.1], [5, -10])), 10 | sine = SinOsc.ar(freq, 0, aEnv), 11 | pan = Pan2.ar(sine*env, 0, FSinOsc.kr(2)), 12 | rvrb = FreeVerb.ar(pan, 1, 1, 1); 13 | 14 | Out.ar(out, rvrb); 15 | }.add; 16 | 17 | SynthDef(\beep) { |out=0, freq=440, amp=1, sustain=1| 18 | var sine = SinOsc.ar( 19 | freq, 20 | 0, 21 | Trig.kr(Line.kr(1, 0, sustain), sustain) 22 | ), 23 | ring = Ringz.ar(sine, 2000, sustain, amp); 24 | 25 | Out.ar(out, ring); 26 | }.add; 27 | 28 | SynthDef(\plick) { |out=0, freq=1000, atk=0.005, dec=1, amp=0.5| 29 | var sine = SinOsc.ar(freq, 0, 0.25), 30 | saw = Saw.ar(freq * 1.25, 0.25), 31 | env = EnvGen.kr(Env.perc(atk, dec*1.5), 1, doneAction: 2), 32 | eSine = sine * env, 33 | eSaw = saw * (env * 0.5), 34 | rvrb = AllpassC.ar(eSine + eSaw, 0.025, 0.001, dec); 35 | 36 | Out.ar(out, rvrb * amp); 37 | }.add; 38 | 39 | SynthDef(\distantMachine) { |out=0, fSaw=300, fSin=1000, imp=25, sustain=1, fadeOut=4 amp=0.25| 40 | var sust = EnvGen.kr(Env([1, 1, 0], [sustain, fadeOut], [0, -5]), 1, doneAction: 2), 41 | cut1 = Stepper.kr(Impulse.kr(imp), 0, 0, 1, 1), 42 | cut2 = Stepper.kr(Impulse.kr(imp), 1, 0, 1, -1), 43 | saw = Saw.ar(fSaw, amp) * cut1, 44 | sine = SinOsc.ar(fSin, 0, amp) * cut2, 45 | pan2 = Pan2.ar(sine+saw*sust, 0), 46 | rvrb = FreeVerb.ar(pan2, 1, 1, 0); 47 | 48 | Out.ar(out, rvrb); 49 | }.add; 50 | 51 | // Noise 52 | 53 | SynthDef(\noisySteamBurst) { |out=0, amp=0.1| 54 | var sust = EnvGen.kr(Env([amp,amp,0], [0.15,1], [-5]), 1, doneAction: 2), 55 | noise = WhiteNoise.ar(1), 56 | rvrb = FreeVerb.ar(noise, 1, 1, 0) + noise; 57 | 58 | Out.ar(out, rvrb * sust); 59 | }.add; 60 | 61 | // Samplers 62 | 63 | SynthDef(\kalimbaAtmosphere) { |out=0, channel=0, gate=1, decay=2.5, density=250, pos=0, amp=0.5, buf| 64 | var samp = GrainBuf.ar( 65 | buf.numChannels, // number of channels 66 | LFNoise0.kr(density), // trigger 67 | XLine.kr(0.005, 0.5, 5), // duration 68 | buf, 69 | 1, // playback rate 70 | pos, // position 71 | 2, // linear interpolation 72 | 0, // panning 73 | -1 // grain envelope buffer 74 | ), 75 | pan = Pan2.ar(samp, channel), 76 | env = Linen.kr(gate, releaseTime: decay, doneAction: 2); 77 | 78 | Out.ar(out, pan*env*amp); 79 | }.add; 80 | 81 | // Effect Groups 82 | 83 | SynthDef(\pitchShifter) { |out=0, effectBus=0, window=0.005, pRatio=1, pDisp=0, tDisp=0.0001| 84 | var in = In.ar(effectBus, 2), 85 | env = EnvGen.kr(Env([500,500,1],[0.5,1.5],[0,5]).circle, 1), 86 | frsh = FreqShift.ar(in, env); 87 | 88 | Out.ar(out, frsh); 89 | }.add; 90 | 91 | 92 | 93 | 94 | 95 | // Music begins 96 | Buffer.readChannel(s, a[5], channels: 0, action: { |kbuf| 97 | "Kalimbas loaded".postln; 98 | Routine({ 99 | 100 | // Initialize effect groups 101 | ~sources = Group.new; 102 | ~pitchShifter = Group.after(~sources); 103 | ~pitchShifterBus = Bus.audio(s, 2); 104 | Synth(\pitchShifter, [\out, 0, \effectBus, ~pitchShifterBus], ~pitchShifter, \addToTail); 105 | 106 | 107 | 108 | //Synth(\distantMachine, [\amp, 0.05, \sustain, 10, \fadeOut, 6]); // 16s 109 | 110 | //50.wait; 111 | 112 | /*Pbind( 113 | \instrument, \plick, 114 | \out, 1, 115 | \freq, Pseq([750, 1000, 1500], inf), 116 | \dur, Pseq([0.5, 0.25, 0.25], inf), 117 | \amp, 0.5 118 | ).play;*/ 119 | 120 | /*Pbind( 121 | \instrument, \beep, 122 | \out, Pseq([0, 1], inf), 123 | \freq, Pseq([250, 500], inf), 124 | \dur, Pstutter( 125 | Pseq([5, 1], inf), 126 | Pseq([0.1, Rest(1)], inf) 127 | ), 128 | \amp, 0.25 129 | ).play;*/ 130 | 131 | Pbind( 132 | \instrument, \beep, 133 | \out, Pseq([0, 1], inf), 134 | \freq, Pseq([250, 500], inf), 135 | \dur, Pseq([0.5], inf), 136 | \legato, 0.5, 137 | \amp, 0.25 138 | ).play; 139 | 140 | (4.1).wait; 141 | 142 | Pbind( 143 | \instrument, \beep, 144 | \out, Pseq([1, \, 0, 1, \], inf), 145 | \freq, Pseq([250, \, 300, 350, \], inf), 146 | \dur, Pseq([0.1, Rest(0.2), 0.1, 0.1, Rest(2)], inf), 147 | \amp, 0.25 148 | ).play; 149 | 150 | (0.55).wait; 151 | 152 | Pbind( 153 | \instrument, \noisySteamBurst, 154 | \dur, Pseq([1.5], inf), 155 | \amp, 0.1 156 | ).play; 157 | 158 | /*Pbind( 159 | \instrument, \beep, 160 | \out, Pseq([0, 0, 1, 1], inf), 161 | \freq, Pstutter( 162 | Pseq([4, 1], inf), 163 | Pseq([500, 250], inf) 164 | ), 165 | \dur, Pstutter( 166 | Pseq([4, 1], inf), 167 | Pseq([0.125/2, Rest(0.125*2)], inf) 168 | ), 169 | \amp, 0.1 170 | ).play;*/ 171 | 172 | /*Pbind( 173 | \instrument, \beep, 174 | \out, Pseq([0, 1], inf), 175 | \freq, Pseq([750, 850, \, 1000, 900], inf), 176 | \dur, Pstutter( 177 | Pseq([5, 1], inf), 178 | Pseq([0.125, Rest(0.375)], inf) 179 | ), 180 | \amp, 0.25 181 | ).play;*/ 182 | 183 | 184 | 50.wait; 185 | 186 | 187 | Pbind( 188 | \instrument, \kalimbaAtmosphere, 189 | \dur, Pseq([60], 1), 190 | \channel, 0, 191 | \amp, 0.3, 192 | \buf, kbuf, 193 | \pos, 0.05, 194 | \density, 75 195 | ).play; 196 | 197 | (2.5).wait; 198 | 199 | Pbind( 200 | \instrument, \kalimbaAtmosphere, 201 | \group, ~pitchShifter, 202 | \dur, Pseq([60], 1), 203 | \amp, 0.3, 204 | //\out, ~pitchShifterBus, 205 | \channel, 1, 206 | \buf, kbuf, 207 | \pos, 0.1, 208 | \density, 75 209 | ).play; 210 | 211 | (5).wait; 212 | 213 | Pbind( 214 | \instrument, \hardSine, 215 | \freq, Pseq([500, 600, 750, 400], 2, 2), 216 | \dur, 0.75, 217 | \amp, 0.1 218 | ).play; 219 | 220 | (6).wait; 221 | 222 | Pbind( 223 | \instrument, \hardSine, 224 | \freq, Pseq([400, 500, 600, 750], 3, 3), 225 | \dur, 0.5, 226 | \amp, 0.5 227 | ).play; 228 | 229 | (7).wait; 230 | 231 | Pbind( 232 | \instrument, \hardSine, 233 | \freq, Pseq([400, 500, 600, 750], inf, 1), 234 | \out, ~pitchShifterBus, 235 | \dur, 0.25, 236 | \amp, 0.25 237 | ).play; 238 | 239 | }).play; 240 | }); -------------------------------------------------------------------------------- /musical/senior project/data.emulate.sc: -------------------------------------------------------------------------------- 1 | // 1m31s 2 | 3 | var routFactory, 4 | plicker, 5 | panPlicker, 6 | panPlicker2, 7 | panPlicker3, 8 | doublePlicker; 9 | 10 | SynthDef(\background) { |out=0| 11 | var pink = PinkNoise.ar(0.05), 12 | brown = BrownNoise.ar(0.05), 13 | pinkPan = Pan2.ar(pink, FSinOsc.kr(1)), 14 | brownPan = Pan2.ar(brown, FSinOsc.kr(0.5)); 15 | Out.ar(out, pinkPan+brownPan); 16 | }.send(s); 17 | 18 | SynthDef(\plick) { |out=0, freq=1000, atk=0.005, dec=1| 19 | var sine = SinOsc.ar(freq, 0, 0.25), 20 | saw = Saw.ar(freq*1.25, 0.25), 21 | env = EnvGen.kr(Env.perc(atk, dec*1.5), 1, doneAction: 2), 22 | eSine = sine*env, 23 | eSaw = saw*(env*0.5), 24 | rvrb = AllpassC.ar(eSine+eSaw, 0.025, 0.001, dec); 25 | Out.ar(out, rvrb); 26 | }.send(s); 27 | 28 | SynthDef(\sinebass) { |out=0, freq=100, imp=1| 29 | var sine = SinOsc.ar( 30 | freq, 31 | 0, 32 | Stepper.kr(Impulse.kr(imp), 0, 0, 1, 1) 33 | ); 34 | Out.ar(out, sine); 35 | }.send(s); 36 | 37 | SynthDef(\beep) { |out=0, freq=440, amp=1, dur=1| 38 | var sine = SinOsc.ar( 39 | freq, 40 | 0, 41 | Trig.kr(Line.kr(1, 0, dur), dur) 42 | ), 43 | ring = Ringz.ar(sine, 2000, dur, amp); 44 | Out.ar(out, ring); 45 | }.send(s); 46 | 47 | SynthDef(\noisePulse) { |out=0, imp=2, amp=0.1| 48 | var noise = WhiteNoise.ar( 49 | Stepper.kr(Impulse.kr(imp), 0, 0, 1, 1)*amp 50 | ); 51 | Out.ar(out, noise); 52 | }.send(s); 53 | 54 | SynthDef(\panNoisePulse) { |imp=2, amp=0.1| 55 | var noise = WhiteNoise.ar( 56 | Stepper.kr(Impulse.kr(imp), 0, 0, 1, 1)*amp 57 | ); 58 | Out.ar(Stepper.kr(Impulse.kr(2*imp), 0, 0, 1, 1), noise); 59 | }.send(s); 60 | 61 | // Returns a simple one-channel plicker routine 62 | plicker = { |delay=1| 63 | Routine.new({ 64 | var freq = 500, 65 | rDelay = delay; 66 | 67 | loop({ 68 | Synth(\plick, [\freq, freq]); 69 | freq = freq+250; 70 | if (freq == 1500, { 71 | freq = 500; 72 | }); 73 | 74 | rDelay.wait; 75 | }); 76 | }).play; 77 | }; 78 | 79 | // Generate two panning plickers to use 80 | routFactory = { 81 | { |delay=1| 82 | Routine({ 83 | var freq = 500, 84 | out = 0, 85 | rDelay = delay; 86 | 87 | loop({ 88 | Synth(\plick, [\out, out, \freq, freq]); 89 | 90 | if (out == 0, { 91 | out = 1; 92 | }, { 93 | out = 0; 94 | }); 95 | 96 | freq = freq+250; 97 | if (freq == 1500, { 98 | freq = 500; 99 | }); 100 | 101 | rDelay.wait; 102 | }); 103 | }).play; 104 | }; 105 | }; 106 | panPlicker = routFactory.value; 107 | panPlicker.reset; 108 | panPlicker2 = routFactory.value; 109 | panPlicker2.reset; 110 | panPlicker3 = routFactory.value; 111 | panPlicker3.reset; 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | // Music starts here 128 | Routine({ 129 | var bg, 130 | plicks = (), 131 | sbass = (), 132 | noise = (), 133 | beeps; 134 | 135 | bg = Synth(\background); 136 | 4.wait; 137 | 138 | // Loops every 2 seconds 139 | sbass[0] = Synth(\sinebass); 140 | 4.wait; 141 | 142 | // Triple impulse bass routine 143 | // Reserves indexes 1, 2 144 | // Loops every 8 seconds 145 | sbass[2] = Routine({ 146 | loop({ 147 | 3.do({ 148 | sbass[1] = Synth(\sinebass, [\out, 1, \freq, 150, \imp, 6]); 149 | 1.wait; 150 | sbass[1].free; 151 | 1.wait; 152 | }); 153 | 2.wait; 154 | }); 155 | }).play; 156 | 8.wait; 157 | 158 | plicks[0] = panPlicker.value(2); 159 | 8.wait; 160 | 161 | plicks[0].stop; 162 | sbass[0].free; 163 | sbass[1].free; 164 | sbass[2].stop; 165 | 166 | // Reserves indexes 3, 4, 5 167 | // Loops every 4 seconds 168 | sbass[3] = Routine({ 169 | sbass[4] = Synth(\sinebass, [\imp, 0.5]); 170 | (0.5).wait; 171 | sbass[5] = Synth(\sinebass, [\out, 1, \imp, 0.5]); 172 | }).play; 173 | (7.5).wait; 174 | 175 | sbass[3].stop; 176 | sbass[4].free; 177 | sbass[5].free; 178 | 179 | sbass[7] = Routine({ 180 | loop({ 181 | sbass[6] = Synth(\sinebass, [\imp, 1]); 182 | 1.wait; 183 | sbass[6].free; 184 | 1.wait; 185 | }); 186 | }).play; 187 | (1.25).wait; 188 | 189 | sbass[8] = Routine({ 190 | loop({ 191 | sbass[9] = Synth(\sinebass, [\out, 1, \freq, 175, \imp, 0.25]); 192 | (0.75).wait; 193 | sbass[9].free; 194 | (1.25).wait; 195 | }); 196 | }).play; 197 | 4.wait; 198 | 199 | beeps = Routine({ 200 | loop({ 201 | Synth(\beep, [\out, rrand(0, 1), \freq, rrand(750, 1250), \dur, rrand(0.1, 0.25), \amp, 0.25]); 202 | (0.5).wait; 203 | }); 204 | }).play; 205 | 4.wait; 206 | 207 | // Triple impulse noise routine 208 | // Reserves indexes 0, 1 209 | // Loops every 8 seconds 210 | noise[1] = Routine({ 211 | loop({ 212 | 3.do({ 213 | noise[0] = Synth(\panNoisePulse, [\imp, 6, \amp, 0.05]); 214 | 1.wait; 215 | noise[0].free; 216 | 1.wait; 217 | }); 218 | 2.wait; 219 | }); 220 | }).play; 221 | 1.wait; 222 | 223 | beeps.stop; 224 | (5.5).wait; 225 | 226 | beeps.reset.play; 227 | (2.5).wait; 228 | 229 | beeps.stop; 230 | noise[1].stop; 231 | 8.wait; 232 | 233 | plicks[0] = plicker.value(1); 234 | 4.wait; 235 | 236 | plicks[0].stop; 237 | plicks[1] = panPlicker.value(1); 238 | (4.75).wait; 239 | 240 | // This plicker sort of doubles up with the other one 241 | // Reserves indexes 2, 3 242 | plicks[3] = Routine({ 243 | loop({ 244 | plicks[2] = panPlicker2.value(1); 245 | (1.75).wait; 246 | plicks[2].stop; 247 | (2.25).wait; 248 | }); 249 | }).play; 250 | 5.25.wait; 251 | 252 | plicks[4] = panPlicker3.value(0.5); 253 | 4.wait; 254 | 255 | plicks[4].stop; 256 | plicks[4] = panPlicker3.value(0.25); 257 | (4.75).wait; 258 | 259 | plicks[4].stop; 260 | plicks[4] = panPlicker3.value(0.125); 261 | 1.wait; 262 | 263 | plicks[4].stop; 264 | plicks[4] = panPlicker3.value(0.0625); 265 | (0.5).wait; 266 | 267 | plicks[4].stop; 268 | 1.5.wait; 269 | 270 | plicks[3].stop; 271 | plicks[2].stop; 272 | (4.75).wait; 273 | 274 | plicks[4] = panPlicker3.value(0.125); 275 | 1.wait; 276 | 277 | plicks[4].stop; 278 | plicks[4] = panPlicker3.value(0.0625); 279 | (0.5).wait; 280 | 281 | plicks[4].stop; 282 | plicks[1].stop; 283 | sbass[6].free; 284 | sbass[7].stop; 285 | sbass[8].stop; 286 | 1.wait; 287 | 288 | bg.free; 289 | 290 | "It's Over".postln; 291 | 292 | }).play; 293 | 294 | "Now Playing"; -------------------------------------------------------------------------------- /musical/senior project/industria.sc: -------------------------------------------------------------------------------- 1 | // 1m57s 2 | 3 | SynthDef(\sineBass) { |out=0, freq=100, imp=1, amp=1| 4 | var sine = SinOsc.ar( 5 | freq, 6 | 0, 7 | Stepper.kr(Impulse.kr(imp), 0, 0, 1, 1)*amp 8 | ); 9 | Out.ar(out, sine); 10 | }.send(s); 11 | 12 | SynthDef(\highPulse) { |freq=1500, atk=0.25, dec=0.25, imp=1, amp=0.5, da=2, out=0| 13 | var sine = SinOsc.ar( 14 | freq, 15 | 0, 16 | EnvGen.kr( 17 | Env( 18 | [0, amp, 0], 19 | [atk, dec] 20 | ), 21 | Impulse.kr(imp) 22 | ) 23 | ); 24 | Out.ar(out, sine); 25 | }.send(s); 26 | 27 | SynthDef(\singleHighPulse) { |freq=1500, atk=0.25, dec=0.25, maxAmp=0.05, minAmp=0.025, da=2, out=0| 28 | var sine = SinOsc.ar( 29 | freq, 30 | 0, 31 | EnvGen.kr( 32 | Env( 33 | [0, maxAmp, minAmp], 34 | [atk, dec] 35 | ) 36 | ) 37 | ); 38 | Out.ar(out, sine); 39 | }.send(s); 40 | 41 | SynthDef(\wnoisePulse) { |out=0, imp=2, amp=0.1, gate=1, fadeDur=1, fadeCurve=1, da=2| 42 | var noise = WhiteNoise.ar( 43 | Stepper.kr(Impulse.kr(imp), 0, 0, 1, 1)*amp 44 | ), 45 | env = EnvGen.kr(Env.cutoff(fadeDur, fadeCurve), gate, doneAction: da)*noise; 46 | 47 | Out.ar(out, env); 48 | }.send(s); 49 | 50 | SynthDef(\panWnoisePulse) { |imp=2, amp=0.1, gate=1, fadeDur=1, fadeCurve=1, da=2| 51 | var noise = WhiteNoise.ar( 52 | Stepper.kr(Impulse.kr(imp), 0, 0, 1, 1)*amp 53 | ), 54 | env = EnvGen.kr(Env.cutoff(fadeDur, fadeCurve), gate, doneAction: da)*noise; 55 | 56 | Out.ar(Stepper.kr(Impulse.kr(2*imp), 0, 0, 1, 1), env); 57 | }.send(s); 58 | 59 | SynthDef(\pnoisePulse) { |out=0, imp=2, amp=0.5, gate=1, fadeDur=1, fadeCurve=1, da=2| 60 | var noise = PinkNoise.ar( 61 | Stepper.kr(Impulse.kr(imp), 0, 0, 1, 1)*amp 62 | ), 63 | env = EnvGen.kr(Env.cutoff(fadeDur, fadeCurve), gate, doneAction: da)*noise; 64 | 65 | Out.ar(out, env); 66 | }.send(s); 67 | 68 | SynthDef(\panPnoisePulse) { |imp=2, amp=0.5, gate=1, fadeDur=1, fadeCurve=1, da=2| 69 | var noise = PinkNoise.ar( 70 | Stepper.kr(Impulse.kr(imp), 0, 0, 1, 1)*amp 71 | ), 72 | env = EnvGen.kr(Env.cutoff(fadeDur, fadeCurve), gate, doneAction: da)*noise; 73 | 74 | Out.ar(Stepper.kr(Impulse.kr(2*imp), 0, 0, 1, 1), env); 75 | }.send(s); 76 | 77 | SynthDef(\bnoisePulse) { |out=0, imp=2, amp=0.25, gate=1, fadeDur=1, fadeCurve=1, da=2| 78 | var noise = BrownNoise.ar( 79 | Stepper.kr(Impulse.kr(imp), 0, 0, 1, 1)*amp 80 | ) + Dust.ar( 81 | Stepper.kr( 82 | Impulse.kr(imp), 0, 2, 20000, 100 83 | ), 84 | Stepper.kr( 85 | Impulse.kr(imp), 0, 0, 1, 1 86 | )*amp*0.75 87 | ), 88 | env = EnvGen.kr(Env.cutoff(fadeDur, fadeCurve), gate, doneAction: da)*noise; 89 | 90 | Out.ar(out, env); 91 | }.send(s); 92 | 93 | SynthDef(\panBnoisePulse) { |imp=2, amp=0.25, gate=1, fadeDur=1, fadeCurve=1, da=2| 94 | var noise = BrownNoise.ar( 95 | Stepper.kr(Impulse.kr(imp), 0, 0, 1, 1)*amp 96 | ) + Dust.ar( 97 | Stepper.kr( 98 | Impulse.kr(imp*2), 0, 2, 20000, 100 99 | ), 100 | Stepper.kr( 101 | Impulse.kr(imp), 0, 0, 1, 1 102 | )*amp*0.75 103 | ), 104 | env = EnvGen.kr(Env.cutoff(fadeDur, fadeCurve), gate, doneAction: da)*noise; 105 | 106 | Out.ar(Stepper.kr(Impulse.kr(2*imp), 1, 0, 1, -1), env); 107 | }.send(s); 108 | 109 | SynthDef(\panBiStep) { |out=0, fMin=600, fMax=1000, step=100, aImp=25, fImp=10, pImp=25, amp=1| 110 | var saw = Saw.ar( 111 | Stepper.kr(Impulse.kr(fImp), 0, fMin, fMax, step)/2, 112 | Stepper.kr(Impulse.kr(aImp), 0, 0, 1, 1) 113 | ), 114 | sine = SinOsc.ar( 115 | Stepper.kr(Impulse.kr(fImp), 0, fMin, fMax, step), 116 | 0, 117 | Stepper.kr(Impulse.kr(aImp), 0, 0, 1, 1) 118 | ), 119 | pan = Pan2.ar(sine+saw, Stepper.kr(Impulse.kr(pImp), 0, -1, 1, 2)); 120 | 121 | Out.ar(out, pan*amp); 122 | }.send(s); 123 | 124 | 125 | 126 | SynthDef(\fadeIn) { |bus, dur=5| 127 | var env = EnvGen.ar(Env([0, 1], [dur]), 1, 1); 128 | Out.ar(0, In.ar(bus)*env); 129 | }.send(s); 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | // Music starts here 141 | Routine({ 142 | var hpit = (), 143 | hpul = (), 144 | noise = (), 145 | sbass = (), 146 | step = (); 147 | 148 | // Use this to skip blocks of audio! 149 | //if (false, { 150 | 151 | 152 | 153 | /* 154 | 4500Hz left channel 155 | Loops every 6s 156 | */ 157 | hpul[1] = Synth(\highPulse, [\freq, 4500, \atk, 1, \dec, 1.5, \imp, 0.1667, \amp, 0.05]); 158 | 7.wait; 159 | 160 | /* 161 | Panning brown 162 | Loops every 2s 163 | */ 164 | noise[1] = Synth(\panBnoisePulse, [\imp, 1, \amp, 0.4]); 165 | /* 166 | 6500Hz right channel 167 | Loops every 8s 168 | */ 169 | hpul[2] = Synth(\highPulse, [\out, 1, \freq, 6500, \atk, 1.5, \dec, 2, \imp, 0.125, \amp, 0.025]); 170 | 3.wait; 171 | 172 | /* 173 | 10000Hz constant left channel 174 | */ 175 | hpit[1] = Synth(\singleHighPulse, [\freq, 10000, \maxAmp, 0.05, \minAmp, 0.01, \atk, 0.5, \dec, 5]); 176 | /* 177 | Right channel white 178 | Loops every 4s 179 | Reserves 2, 3 180 | */ 181 | noise[2] = Routine({ 182 | loop({ 183 | noise[3] = Synth(\wnoisePulse, [\out, 1, \imp, 2]); 184 | (0.5).wait; 185 | noise[3].free; 186 | (3.5).wait; 187 | }); 188 | }).play; 189 | 4.wait; 190 | 191 | noise[2].stop; 192 | 193 | /* 194 | 15000Hz constant left channel 195 | */ 196 | hpit[2] = Synth(\singleHighPulse, [\out, 1, \freq, 15000, \maxAmp, 0.1, \minAmp, 0.025, \atk, 0.25, \dec, 2.5]); 197 | /* 198 | 17500Hz right channel 199 | Loops every 10s 200 | */ 201 | hpul[3] = Synth(\highPulse, [\out, 1, \freq, 15000, \atk, 2, \dec, 0.5, \imp, 0.1, \amp, 0.1]); 202 | /* 203 | Panning white 204 | Loops every 2s 205 | Reserves 4, 5 206 | */ 207 | noise[4] = Routine({ 208 | loop({ 209 | noise[5] = Synth(\panWnoisePulse, [\imp, 2]); 210 | (0.5).wait; 211 | noise[5].free; 212 | (3.5).wait; 213 | }); 214 | }).play; 215 | 2.wait; 216 | noise[2].reset.play; 217 | 4.wait; 218 | 219 | /* 220 | Loops every 2s 221 | */ 222 | sbass[1] = Synth(\sineBass, [\freq, 200, \imp, 1, \amp, 0.5]); 223 | 1.wait; 224 | 225 | /* 226 | Loops every 1/3s 227 | */ 228 | sbass[2] = Synth(\sineBass, [\freq, 100, \imp, 6, \amp, 0.5]); 229 | 6.wait; 230 | 231 | /* 232 | Right channel sineBass 233 | Loops every 2s 234 | Reserves 3, 4 235 | */ 236 | sbass[4] = Routine({ 237 | loop({ 238 | sbass[3] = Synth(\sineBass, [\out, 1, \freq, 125, \imp, 3, \amp, 0.75]); 239 | 1.wait; 240 | sbass[3].free; 241 | 1.wait; 242 | }); 243 | }).play; 244 | 4.wait; 245 | 246 | sbass[1].free; 247 | 4.wait; 248 | 249 | sbass[2].free; 250 | 2.wait; 251 | 252 | noise[1].set(\gate, 0); 253 | noise[4].stop; 254 | 8.wait; 255 | 256 | /* 257 | Panning stepper 258 | Fades in 259 | */ 260 | step[1] = Bus.control(s, 2); 261 | step[2] = Synth(\panBiStep, [\out, step[1], \aImp, 1.5, \fImp, 5.25, \pImp, 4.75, \fMin, 200, \fMax, 400, \amp, 0.25]); 262 | Synth.after( 263 | step[2], 264 | \fadeIn, 265 | [\bus, step[1], \dur, 4] 266 | ); 267 | 4.wait; 268 | 269 | step[1].set(\aImp, 5); 270 | step[1].set(\fImp, 2); 271 | 2.wait; 272 | 273 | step[1].set(\aImp, 2.5); 274 | step[1].set(\fImp, 2.5); 275 | 4.wait; 276 | 277 | step[1].free; 278 | step[2].free; 279 | /* 280 | Panning stepper 281 | */ 282 | step[3] = Synth(\panBiStep, [\aImp, 1, \fImp, 3, \pImp, 15, \fMin, 200, \fMax, 400, \amp, 0.25]); 283 | /* 284 | Panning stepper 285 | */ 286 | step[4] = Synth(\panBiStep, [\aImp, 10, \fImp, 15, \pImp, 20, \fMin, 50, \fMax, 1000, \step, 50, \amp, 0.25]); 287 | 4.wait; 288 | 289 | step[3].free; 290 | 4.wait; 291 | 292 | step[4].set(\amp, 0.5); 293 | 4.wait; 294 | 295 | /* 296 | Panning brown 297 | Loops every 2s 298 | */ 299 | noise[1] = Synth(\panBnoisePulse, [\imp, 1, \amp, 0.4]); 300 | 2.wait; 301 | 302 | step[4].set(\aImp, 15, \fImp, 10, \pImp, 30); 303 | 4.wait; 304 | 305 | noise[1].free; 306 | step[4].set(\step, -10); 307 | (7.5).wait; 308 | 309 | step[4].set(\step, 50); 310 | (4.5).wait; 311 | 312 | step[4].set(\step, -100); 313 | 2.wait; 314 | 315 | step[4].set(\step, 150); 316 | 2.wait; 317 | 318 | step[4].set(\step, 5); 319 | 6.wait; 320 | 321 | step[4].set(\step, -15); 322 | 5.wait; 323 | 324 | step[4].free; 325 | 4.wait; 326 | 327 | sbass[4].stop; 328 | 2.wait; 329 | 330 | hpul[1].free; 331 | 4.wait; 332 | 333 | hpul[2].free; 334 | 2.wait; 335 | 336 | hpul[3].free; 337 | 2.wait; 338 | 339 | noise[2].stop; 340 | 3.wait; 341 | 342 | hpit[1].free; 343 | hpit[2].free; 344 | 345 | 346 | 347 | "It's Over".postln; 348 | }).play; 349 | "Now Playing"; -------------------------------------------------------------------------------- /musical/senior project/music for type/didot/didot-compressed.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codehearts/supercollider-music/e8cd492e26d0d23be329cef8647644a1f76a7791/musical/senior project/music for type/didot/didot-compressed.mp3 -------------------------------------------------------------------------------- /musical/senior project/music for type/didot/didot-mini.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codehearts/supercollider-music/e8cd492e26d0d23be329cef8647644a1f76a7791/musical/senior project/music for type/didot/didot-mini.mp3 -------------------------------------------------------------------------------- /musical/senior project/music for type/didot/didot.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codehearts/supercollider-music/e8cd492e26d0d23be329cef8647644a1f76a7791/musical/senior project/music for type/didot/didot.mp3 -------------------------------------------------------------------------------- /musical/senior project/music for type/didot/style guide.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codehearts/supercollider-music/e8cd492e26d0d23be329cef8647644a1f76a7791/musical/senior project/music for type/didot/style guide.pdf -------------------------------------------------------------------------------- /musical/senior project/music for type/helvetica/style guide.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codehearts/supercollider-music/e8cd492e26d0d23be329cef8647644a1f76a7791/musical/senior project/music for type/helvetica/style guide.pdf -------------------------------------------------------------------------------- /musical/senior project/piece 06.sc: -------------------------------------------------------------------------------- 1 | "~/Music/supercollider-music/samples/samples.sc".standardizePath.loadPaths; 2 | 3 | SynthDef(\square) { |out=0, freq=440, amp=0.25, pan=0, sustain=1| 4 | var env = EnvGen.kr(Env([0.5, 1, 0], [sustain, 0.1]), 1, doneAction: 2), 5 | sqr = (Pulse.ar(freq, 0.5, amp)+Saw.ar(freq, amp*0.25))*env, 6 | pan2 = Pan2.ar(sqr, pan); 7 | 8 | Out.ar(out, pan2); 9 | }.add; 10 | 11 | SynthDef(\squareFade) { |out=0, freq=440, amp=0.25, sustain=1, curve=0| 12 | var env = EnvGen.kr(Env([amp/2, amp, amp/2], [0.1, sustain-0.1], curve), 1, doneAction: 2), 13 | trem = SinOsc.kr(1), 14 | sqr = Pulse.ar(freq, 0.5, (amp*0.75)+(abs(trem)*(amp*0.25)))*env, 15 | pan = Pan2.ar(sqr, Line.kr(-1, 1, sustain)); 16 | 17 | Out.ar(out, pan); 18 | }.add; 19 | 20 | SynthDef(\squareSpace) { |out=0, freq=440, amp=0.25, pan=0, gate=1| 21 | var env = EnvGen.kr(Env.cutoff(4, amp), gate, doneAction: 2), 22 | inst = Pulse.ar(freq, 0.5, amp)*env, 23 | rvrb = FreeVerb.ar(inst, 0.75, 0.75, 0.5), 24 | pan2 = Pan2.ar(rvrb, pan); 25 | 26 | Out.ar(out, pan2); 27 | }.add; 28 | 29 | SynthDef(\leaves) { |out=0, gate=1, fadeIn=1, fadeOut=1, rate=4, density=25, amp=1, buf| 30 | var chan = buf.numChannels, 31 | samp = GrainBuf.ar( 32 | chan, // number of channels 33 | LFNoise1.kr(density), // trigger 34 | LFNoise1.kr.range(0.1, 0.25), // duration 35 | buf, 36 | rate, // playback rate 37 | LFNoise0.kr.range(0,1), // position 38 | 2, // interpolation 39 | 0, // panning 40 | Buffer.sendCollection( 41 | s, 42 | Env([0, 0.5, 1, 0.25], [0.05, 0.05, 0.1], [2.5, -2.5, -5]).discretize, 43 | chan 44 | ) 45 | ) * XLine.kr(0.005, amp, fadeIn), 46 | env = EnvGen.kr(Env.cutoff(fadeOut, 1), gate, doneAction: 2) * samp, 47 | rvrb = FreeVerb2.ar(env, env, 0.5, 1, 0), 48 | pan2 = Pan2.ar(rvrb, LFNoise0.kr(density, -1, 2)-1); 49 | 50 | Out.ar(out, pan2); 51 | }.send(s); 52 | 53 | 54 | 55 | Buffer.readChannel(s, a[5], channels: 0, action: { |kbuf| 56 | "Kalimbas loaded".postln; 57 | 58 | Routine({ 59 | var flourish, 60 | chimes, 61 | bass; 62 | 63 | flourish = Routine({ 64 | var sustain = 32, // Should be divisible by 4 65 | leaf; 66 | 67 | leaf = Synth(\leaves, [\buf, kbuf, \fadeIn, 2, \fadeOut, 4, \density, 25, \amp, 0.15]); 68 | 69 | (sustain/4).do({ |i| 70 | var rate = (i+1)%5+1, 71 | dens = (i+1)%20*5+5; 72 | 73 | leaf.set(\rate, rate); 74 | leaf.set(\density, dens); 75 | 76 | 4.wait; 77 | }); 78 | 79 | leaf.set(\gate, 0); 80 | }); 81 | 82 | bass = Routine({ 83 | var loops = 64, 84 | freq = Pstutter( 85 | Pseq([10, 6, 14, 1], loops), 86 | Pseq([100, 61.8, 50, 161.8], loops) 87 | ).asStream, 88 | legato = Pseq([2], loops).asStream, 89 | durs = PdurStutter( 90 | Pseq([1,1,1,1,1,1, 2,2, 1,1,2,2,1,1, 2,4,6,1], loops), 91 | Pseq([1,1,1,1,1,1, 1,1, 1,1,1,1,1,1, 0.5,0.5,0.5,0.5], loops) 92 | ).asStream; 93 | 94 | loops.do({ |i| 95 | var leg = legato.next, 96 | dur = durs.next, 97 | square = Synth(\square, [\freq, freq.next, \sustain, dur/leg, \amp, 0.15]); 98 | 99 | dur.wait; 100 | }); 101 | }); 102 | 103 | chimes = Routine({ 104 | var loops = 10, 105 | waitFor = 4, 106 | dur = 0.1; 107 | 108 | loops.do({ |i| 109 | var freqs = [100, 161.8, 261.8, 423.6, 685.4, 1108.9]*(((i+1)%3)+1), 110 | stut = [1,1,1,1,1,1]; 111 | 112 | if ((i+1)%4 == 0, { 113 | stut[1] = 6; 114 | }); 115 | 116 | if ((i+1)%6 == 0, { 117 | stut = [2,2,2,2,2,2]; 118 | }); 119 | 120 | Pbind( 121 | \instrument, \squareSpace, 122 | \freq, Pstutter( 123 | Pseq(stut, 1), 124 | Pseq(freqs, 1) 125 | ), 126 | \dur, PdurStutter( 127 | Pseq([1, 2, 3, 4, 5, 6], 1), 128 | dur 129 | ), 130 | \amp, 0.2 131 | ).play; 132 | 133 | waitFor.wait; 134 | }); 135 | }); 136 | 137 | 138 | flourish.play; 139 | 8.wait; 140 | bass.play; 141 | 16.wait; 142 | chimes.play; 143 | 144 | 145 | 146 | /*squares = Routine({ 147 | var loops = 32, 148 | changes = 2, 149 | softLoops = loops/changes, 150 | sustain = 0.05; 151 | 152 | softLoops.do({ |i| 153 | var freqs = Pshuf([100, 200, 300, 400, 500], changes); 154 | 155 | freqs.do({ |freq| 156 | var square = Synth(\square, [\freq, freq, \amp, 0.5]); 157 | 158 | sustain.wait; 159 | square.set(\gate, 0); 160 | }); 161 | }); 162 | }).play;*/ 163 | 164 | /*Routine({ 165 | var loops = 50, 166 | dur = 0.1; 167 | 168 | loops.do({ |i| 169 | var freqs = [423.6, 1108.9, 685.4, 261.8, 161.8]; 170 | 171 | if (i%2 == 0, { freqs[1] = 161.8; }); 172 | if (i%3 == 0, { freqs[2] = 261.8; }); 173 | if (i%4 == 0, { freqs[3] = 685.4; }); 174 | if (i%5 == 0, { freqs[4] = 1108.9; }); 175 | 176 | freqs.do({ |freq, j| 177 | var square = Synth(\square, [\freq, freq, \amp, 0.25]); 178 | 179 | dur.wait; 180 | square.set(\gate, 0); 181 | }); 182 | }); 183 | }).play;*/ 184 | 185 | /*Routine({ 186 | var loops = 8, 187 | dur = 0.25; 188 | 189 | loops.do({ |i| 190 | var freqs = Pseq([1108.9, 161.8, 423.6, 261.8, 423.6, 261.8, 685.4, 423.6], 1, i).asStream; 191 | 192 | freqs.do({ |freq, j| 193 | var square = Synth(\square, [\freq, freq, \amp, 0.3]); 194 | 195 | dur.wait; 196 | square.set(\gate, 0); 197 | }); 198 | }); 199 | }).play;*/ 200 | 201 | /*Routine({ 202 | var loops = 32, 203 | freqs = Pseq([1108.9, 685.4, 423.6, 261.8, 423.6, 261.8, 161.8, 423.6], loops).asStream, 204 | dur = Pseq([1, 0.75, 0.5, 0.75, 1], loops).asStream; 205 | 206 | loops.do({ |i| 207 | var square = Synth(\square, [\freq, freqs.next, \amp, 0.25]); 208 | 209 | dur.next.wait; 210 | square.set(\gate, 0); 211 | }); 212 | }).play;*/ 213 | 214 | /*Routine({ 215 | var loops = 32, 216 | freqs = Pseq([1108.9, 685.4, 423.6, 261.8, 161.8, 100], loops).asStream, 217 | dur = PdurStutter( 218 | Pseq([2,2,2,2,2,2, 1,0.5,1,0.5,1,0.5], loops), 219 | Pseq([0.1], loops) 220 | ).asStream; 221 | 222 | loops.do({ |i| 223 | var square = Synth(\square, [\freq, freqs.next, \amp, 0.2]); 224 | 225 | dur.next.wait; 226 | square.set(\gate, 0); 227 | }); 228 | }).play;*/ 229 | 230 | }).play; 231 | }); -------------------------------------------------------------------------------- /musical/senior project/recordings/01 durchkomponiert.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codehearts/supercollider-music/e8cd492e26d0d23be329cef8647644a1f76a7791/musical/senior project/recordings/01 durchkomponiert.mp3 -------------------------------------------------------------------------------- /musical/senior project/recordings/02 winter.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codehearts/supercollider-music/e8cd492e26d0d23be329cef8647644a1f76a7791/musical/senior project/recordings/02 winter.mp3 -------------------------------------------------------------------------------- /musical/senior project/recordings/03 data.emulate.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codehearts/supercollider-music/e8cd492e26d0d23be329cef8647644a1f76a7791/musical/senior project/recordings/03 data.emulate.mp3 -------------------------------------------------------------------------------- /musical/senior project/recordings/04 industria.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codehearts/supercollider-music/e8cd492e26d0d23be329cef8647644a1f76a7791/musical/senior project/recordings/04 industria.mp3 -------------------------------------------------------------------------------- /musical/senior project/recordings/05 tentative.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codehearts/supercollider-music/e8cd492e26d0d23be329cef8647644a1f76a7791/musical/senior project/recordings/05 tentative.mp3 -------------------------------------------------------------------------------- /musical/senior project/recordings/06 neue-antiqua.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codehearts/supercollider-music/e8cd492e26d0d23be329cef8647644a1f76a7791/musical/senior project/recordings/06 neue-antiqua.mp3 -------------------------------------------------------------------------------- /musical/senior project/recordings/07 piece-06.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codehearts/supercollider-music/e8cd492e26d0d23be329cef8647644a1f76a7791/musical/senior project/recordings/07 piece-06.mp3 -------------------------------------------------------------------------------- /musical/senior project/recordings/08 helvetica.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codehearts/supercollider-music/e8cd492e26d0d23be329cef8647644a1f76a7791/musical/senior project/recordings/08 helvetica.mp3 -------------------------------------------------------------------------------- /musical/senior project/recordings/09 didot.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codehearts/supercollider-music/e8cd492e26d0d23be329cef8647644a1f76a7791/musical/senior project/recordings/09 didot.mp3 -------------------------------------------------------------------------------- /musical/senior project/tentative.sc: -------------------------------------------------------------------------------- 1 | // 1m42s 2 | 3 | "~/Music/supercollider-music//samples/samples.sc".standardizePath.loadPaths; 4 | //"~/Music/senpro/methods/melody-playback.sc".standardizePath.loadPaths; 5 | //"../samples/samples.sc".resolveRelative.loadPaths; 6 | //"../methods/melody-playback.sc".resolveRelative.loadPaths; 7 | 8 | 9 | 10 | SynthDef(\domobass) { |out=0, sFreq=50, eFreq=150, atk=0.25, atkC= -2.5, dur=0.75, dec=2, decC= -5, amp=1, panDir= -1 da=2| 11 | var halfTime = atk+(dur/2), 12 | freqEnv = EnvGen.kr(Env([sFreq, eFreq], [atk], [atkC]), 1, 1), 13 | ampEnv = EnvGen.kr(Env([amp, amp, 0], [atk+dur, dec], [decC]), 1, 1, doneAction: da), 14 | acmpEnv = EnvGen.kr(Env([0, amp, amp, 0], [atk, dur, dec], [atkC, 0, decC]), 1, 1), 15 | sine = SinOsc.ar(freqEnv, 0, ampEnv), 16 | dust = Dust.ar(XLine.kr(100, 1000, atk+dur), acmpEnv*0.15), 17 | saw = Saw.ar(freqEnv*XLine.kr(0.2, 0.5, halfTime), acmpEnv*0.5), 18 | pan = Pan2.ar(sine+saw+dust, FSinOsc.kr(0.5/(atk+dur+dec), panDir), 1); 19 | 20 | Out.ar(out, pan); 21 | }.send(s); 22 | 23 | SynthDef(\beep) { |out=0, freq=440, atk=0.1, dec=0.15, amp=1, da=2| 24 | var fEnv = EnvGen.kr( 25 | Env([freq-100, freq, freq-50], [atk, dec], [-2.5, 2.5]), 26 | 1, 27 | doneAction: da 28 | ), 29 | sine = Saw.ar(fEnv, amp), 30 | rvrb = FreeVerb.ar(sine, 0.5, 1, 0); 31 | 32 | Out.ar(out, rvrb); 33 | }.send(s); 34 | 35 | SynthDef(\beeper) { |out=0, freq=440, imp=2, amp=1| 36 | var sine = SinOsc.ar(freq, 0, Stepper.kr(Impulse.kr(imp), 0, 0, 1, 1)*amp); 37 | Out.ar(out, sine); 38 | }.send(s); 39 | 40 | SynthDef(\sineburst) { |out=0, freq=100, imp=1, amp=1| 41 | var sine = SinOsc.ar( 42 | freq, 43 | 0, 44 | EnvGen.kr(Env([amp, amp, 0], [0.1, 0]), 1, doneAction: 2) 45 | ); 46 | Out.ar(out, sine); 47 | }.send(s); 48 | 49 | 50 | 51 | SynthDef(\colorDeco) { |out=0, dur=2.5, fadeDur=1, pImp=5 da=2, amp=1, buf| 52 | var samp = GrainBuf.ar( 53 | buf.numChannels, // number of channels 54 | LFNoise0.kr.(1), // trigger 55 | LFNoise1.kr.range(0.05, 0.25), // duration 56 | buf, 57 | LFNoise0.kr.range(1, XLine.kr(1, 5, dur)), // playback rate 58 | LFNoise0.kr.range(0, 1), // position 59 | 1, // linear interpolation 60 | 0, // panning 61 | -1 // grain envelope buffer 62 | ), 63 | env = EnvGen.kr(Env([1, 1, 0], [dur, fadeDur]), 1, 1, doneAction: da), 64 | pan = Pan2.ar(samp*env, FSinOsc.kr(pImp), amp); 65 | 66 | Out.ar(out, pan); 67 | }.send(s); 68 | 69 | SynthDef(\hkBurst) { |out=0, dur=2.5, pb=4, rImp=50, fadeDur=1, pImp=5 da=2, amp=1, buf| 70 | var samp = GrainBuf.ar( 71 | buf.numChannels, // number of channels 72 | Impulse.kr(Stepper.kr(Impulse.kr(1), 1, 1, 10, 9)), // trigger 73 | Stepper.kr(Impulse.kr(rImp), 0, 0.1, 1, -1), // duration 74 | buf, 75 | pb, // playback rate 76 | 0, // position 77 | 1, // linear interpolation 78 | 0, // panning 79 | -1 // grain envelope buffer 80 | ), 81 | env = EnvGen.kr(Env([1, 1, 0], [dur, fadeDur]), 1, 1, doneAction: da), 82 | pan = Pan2.ar(samp*env, FSinOsc.kr(pImp), amp); 83 | 84 | Out.ar(out, pan); 85 | }.send(s); 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | // Music starts here 97 | Buffer.readChannel(s, a[2], channels: 0, action: { |ccbuf| 98 | "Code Couleur loaded".postln; 99 | 100 | Buffer.readChannel(s, a[11], channels: 0, action: { |hk1buf| 101 | "Hugs & Kisses Excerpt 2 loaded".postln; 102 | 103 | Routine({ 104 | var db = (), 105 | bp = (), 106 | hk = (), 107 | sb = (), 108 | be = (); 109 | 110 | // Use this to skip blocks of audio! 111 | /*if (false, {*/ 112 | 113 | 114 | 115 | Synth(\domobass, [\sFreq, 50, \eFreq, 250, \atk, 5, \dur, 10, \dec, 15, \amp, 0.25, \panDir, -1]); 116 | 10.wait; 117 | 118 | Synth(\domobass, [\sFreq, 150, \eFreq, 50, \atk, 1.75, \dur, 1, \dec, 0.25, \amp, 0.5, \panDir, 1]); 119 | 1.wait; 120 | 121 | Synth(\domobass, [\sFreq, 25, \eFreq, 250, \atk, 0.75, \dur, 0, \dec, 2, \amp, 0.5, \panDir, -1]); 122 | 2.wait; 123 | 124 | Synth(\domobass, [\sFreq, 25, \eFreq, 650, \atk, 0.75, \dur, 0, \dec, 1, \amp, 0.35, \panDir, -1]); 125 | 1.wait; 126 | 127 | Synth(\domobass, [\sFreq, 1000, \eFreq, 50, \atk, 1.75, \dur, 0, \dec, 0.25, \amp, 0.45, \panDir, 1]); 128 | 1.wait; 129 | 130 | bp[0] = Synth(\beeper, [\freq, 175, \imp, 8, \amp, 0.5]); 131 | (0.5).wait; 132 | 133 | bp[1] = Synth(\beeper, [\out, 1, \freq, 400, \imp, 10, \amp, 0.5]); 134 | (0.8).wait; 135 | 136 | bp[1].free; 137 | Synth(\domobass, [\sFreq, 25, \eFreq, 200, \atk, 0.5, \dur, 0, \dec, 0.75, \amp, 0.35, \panDir, 1]); 138 | (3).wait; 139 | 140 | bp[1] = Synth(\beeper, [\out, 1, \freq, 500, \imp, 10, \amp, 0.5]); 141 | (0.75).wait; 142 | 143 | bp[1].free; 144 | Synth(\domobass, [\sFreq, 0, \eFreq, 150, \atk, 0.5, \dur, 0, \dec, 0.75, \amp, 0.35, \panDir, -1]); 145 | 1.wait; 146 | 147 | bp[0].set(\freq, 75, \imp, 1, \amp, 1); 148 | (2.5).wait; 149 | 150 | Synth(\domobass, [\sFreq, 0, \eFreq, 75, \atk, 0.8, \dur, 0, \dec, 0.2, \amp, 0.5, \panDir, -1]); 151 | 1.wait; 152 | 153 | bp[0].free; 154 | Synth(\colorDeco, [\buf, ccbuf, \fadeDur, 0.25, \pImp, 15, \amp, 0.9]); 155 | (1.5).wait; 156 | 157 | hk[0] = Synth(\hkBurst, [\out, 1, \buf, hk1buf, \pb, 4]); 158 | 2.wait; 159 | 160 | hk[1] = Synth(\hkBurst, [\out, 1, \buf, hk1buf, \pb, 3, \dur, 10, \amp, 0.5]); 161 | 2.wait; 162 | 163 | hk[1].set(\out, [0, 1]); 164 | 6.wait; 165 | 166 | hk[2] = Synth(\hkBurst, [\buf, hk1buf, \pb, 4.5, \rImp, 75, \dur, 10, \amp, 0.5]); 167 | 8.wait; 168 | 169 | bp[2] = Synth(\beeper, [\out, 1, \freq, 100, \imp, 6, \amp, 0.5]); 170 | bp[3] = Synth(\beeper, [\out, 1, \freq, 100, \imp, 1/3, \amp, 0.5]); 171 | sb[0] = 175; 172 | sb[1] = 0.2; 173 | sb[2] = m.value(\sineburst, [ 174 | [\freq, sb[0]], 175 | [\freq, sb[0]+25], 176 | [\freq, sb[0]+50], 177 | [\freq, sb[0]+100], 178 | [\freq, sb[0]+50], 179 | [\freq, sb[0]+25] 180 | ], 181 | [sb[1], sb[1], sb[1], sb[1], sb[1], sb[1]] 182 | ); 183 | (sb[1]*3).wait; 184 | 185 | be[0] = sb[1]*6; 186 | be[1] = m.value(\beep, [ 187 | [\freq, 2000, \amp, 0.5], 188 | [\freq, 2000, \amp, 0.5, \out, 1], 189 | [\freq, 2000, \amp, 0.5], 190 | [\freq, 2000, \amp, 0.5, \out, 1], 191 | [\freq, 1750, \amp, 0.5], 192 | [\freq, 1750, \amp, 0.5, \out, 1], 193 | [\freq, 1500, \amp, 0.5], 194 | [\freq, 1250, \amp, 0.5, \out, 1] 195 | ], 196 | [be[0], be[0], be[0], be[0], be[0], be[0], be[0], be[0]] 197 | ); 198 | (be[0]*8).wait; 199 | 200 | Synth(\beep, [\freq, 2000, \atk, 5, \dec, 5, \out, 1, \amp, 0.1]); 201 | 4.wait; 202 | 203 | Synth(\beep, [\freq, 200, \atk, 5, \dec, 5, \amp, 0.05]); 204 | 10.wait; 205 | 206 | bp[4] = Synth(\beeper, [\freq, 110, \imp, 4.75, \amp, 0.75]); 207 | 1.wait; 208 | 209 | bp[5] = Synth(\beeper, [\out, 1, \freq, 100, \imp, 5.25, \amp, 0.75]); 210 | 4.wait; 211 | 212 | sb[2].stop; 213 | 9.wait; 214 | 215 | be[1].stop; 216 | 2.wait; 217 | 218 | bp[6] = Synth(\beeper, [\out, 1, \freq, 200, \imp, 18, \amp, 0.5]); 219 | 1.wait; 220 | 221 | bp[7] = Synth(\beeper, [\freq, 185, \imp, 12, \amp, 0.4]); 222 | 2.wait; 223 | 224 | bp[6].set(\freq, 90); 225 | 3.wait; 226 | 227 | bp[8] = Synth(\beeper, [\freq, 125, \imp, 6.25, \amp, 0.6]); 228 | 4.wait; 229 | 230 | bp[9] = Synth(\beeper, [\out, 1, \freq, 135, \imp, 3.6, \amp, 0.65]); 231 | 2.wait; 232 | 233 | bp[10] = Synth(\beeper, [\freq, 85, \imp, 22.5, \amp, 0.75]); 234 | 4.wait; 235 | 236 | bp[2].free; 237 | bp[3].free; 238 | bp[4].free; 239 | bp[5].free; 240 | bp[6].free; 241 | bp[7].free; 242 | bp[8].free; 243 | bp[9].free; 244 | bp[10].free; 245 | (0.1).wait; 246 | 247 | bp[11] = Synth(\beeper, [\freq, 200, \imp, 1, \amp, 1]); 248 | bp[12] = Synth(\beeper, [\out, 1, \freq, 200, \imp, 1, \amp, 1]); 249 | (0.85).wait; 250 | 251 | bp[13] = Synth(\beeper, [\out, 1, \freq, 400, \imp, 1, \amp, 0.25]); 252 | (0.15).wait; 253 | 254 | bp[11].free; 255 | bp[12].free; 256 | bp[13].free; 257 | 258 | 259 | 260 | "It's Over".postln; 261 | }).play; 262 | 263 | }); 264 | }); 265 | 266 | 267 | "Now Playing"; -------------------------------------------------------------------------------- /musical/senior project/winter.sc: -------------------------------------------------------------------------------- 1 | // 1m31s 2 | 3 | "~/Music/supercollider-music//samples/samples.sc".standardizePath.loadPaths; 4 | //"../samples/samples.sc".resolveRelative.loadPaths; 5 | 6 | 7 | 8 | // Samples 9 | SynthDef(\atmos) { |out=0, gate=1, fadeDur=2.5, totalDur=5, startDur=0.005, endDur=1, dense=250, pos=0, da=2, buf| 10 | var samp = GrainBuf.ar( 11 | buf.numChannels, // number of channels 12 | LFNoise0.kr(dense), // trigger 13 | XLine.kr(startDur, endDur, totalDur), // duration 14 | buf, 15 | 1, // playback rate 16 | pos, // position 17 | 2, // linear interpolation 18 | 0, // panning 19 | -1 // grain envelope buffer 20 | ), 21 | env = EnvGen.kr(Env.cutoff(fadeDur, 1), gate, doneAction: da) * samp; 22 | 23 | Out.ar(out, env); 24 | }.send(s); 25 | 26 | SynthDef(\kring) { |out=0, dur=3, rate=1, pos=0, buf| 27 | var samp = GrainBuf.ar( 28 | buf.numChannels, // number of channels 29 | Impulse.ar(XLine.kr(100, 10, dur)), // trigger 30 | XLine.kr(0.1, 1.5, dur, doneAction: 2), // duration 31 | buf, 32 | rate, // playback rate 33 | pos, // position 34 | 1, // no interpolation 35 | 0, // panning 36 | -1 // grain envelope buffer 37 | ); 38 | 39 | Out.ar(out, samp); 40 | }.send(s); 41 | 42 | SynthDef(\babum) { |bus=0, imp=25, buf| 43 | var samp = GrainBuf.ar( 44 | buf.numChannels, // number of channels 45 | Impulse.kr(imp), // trigger 46 | LFNoise2.kr.range(0.05, 0.25), // duration 47 | buf, 48 | LFNoise2.kr.range(0.5, 1.5), // playback rate 49 | LFNoise1.kr.range(0, 1), // position 50 | 2, // linear interpolation 51 | 0, // panning 52 | -1 // grain envelope buffer 53 | ), 54 | pan = Pan2.ar(samp, FSinOsc.kr(2), 0.5); 55 | 56 | Out.ar(bus, pan); 57 | }.send(s); 58 | 59 | SynthDef(\sled) { |out=0, dur=10, gate=1, fadeDur=2.5, da=2, buf| 60 | var samp = GrainBuf.ar( 61 | buf.numChannels, // number of channels 62 | LFNoise0.kr.(150), // trigger 63 | XLine.kr(0.005, 0.25, dur), // duration 64 | buf, 65 | LFNoise2.kr.range(XLine.kr(1, 0.5, dur), XLine.kr(1, 1.5, dur)), // playback rate 66 | 0.26, // position 67 | 2, // linear interpolation 68 | 0, // panning 69 | -1 // grain envelope buffer 70 | ), 71 | env = EnvGen.kr(Env.cutoff(fadeDur, 1), gate, doneAction: da) * samp; 72 | 73 | Out.ar(out, env); 74 | }.send(s); 75 | 76 | // Kalimba Forest 77 | SynthDef(\forest) { |bus=0, dense=150, vary=10, gate=1, amp=1, fadeDur=2.5, da=2, buf| 78 | var samp = GrainBuf.ar( 79 | buf.numChannels, // number of channels 80 | LFNoise0.kr(dense), // trigger 81 | LFNoise1.kr.range(0.1, vary*0.1), // duration 82 | buf, 83 | LFNoise0.kr.range(1, 1.025), // playback rate 84 | LFNoise1.kr.range(0, 1), // position 85 | 2, // linear interpolation 86 | 0, // panning 87 | -1 // grain envelope buffer 88 | ), 89 | env = EnvGen.kr(Env.cutoff(fadeDur, 1), gate, doneAction: da) * samp; 90 | 91 | Out.ar(bus, env*amp); 92 | }.send(s); 93 | 94 | 95 | // Synthdefs 96 | SynthDef(\bass) { |out=0, freq=150, dur=1| 97 | var inst = SinOsc.ar(XLine.kr(freq, 50, dur, doneAction: 2), 0, 1); 98 | 99 | Out.ar(out, inst); 100 | }.send(s); 101 | 102 | SynthDef(\snare) { |out=0, freq=1000, decay=0.25| 103 | var eAmp = EnvGen.kr(Env.perc(0.005, decay), 1, doneAction: 2), 104 | drum = SinOsc.ar(freq, 0, GrayNoise.ar(eAmp*0.15)) + WhiteNoise.ar(eAmp*0.5); 105 | 106 | Out.ar(out, drum); 107 | }.send(s); 108 | 109 | SynthDef(\bell) { |out=0, freq=800, resFreq=2000, attack=0.005, decay=0.75, resDecay=2| 110 | var eAmp = EnvGen.kr(Env.perc(attack, decay), 1, doneAction: 2), 111 | base = SinOsc.ar(freq, pi, eAmp*0.25) + Saw.ar(freq/2, eAmp*0.005), 112 | ring = Ringz.ar(base, resFreq, resDecay), 113 | rvrb = FreeVerb.ar(ring, 0.3, 1, 1); 114 | 115 | Out.ar(out, rvrb); 116 | }.send(s); 117 | 118 | 119 | // Effect synths 120 | SynthDef(\LRpan) { |bus, dur=5, level=1, da=2| 121 | Out.ar(0, Pan2.ar(In.ar(bus), Line.kr(-1, 1, dur, doneAction: da), level)); 122 | }.send(s); 123 | 124 | SynthDef(\RLpan) { |bus, dur=5, level=1, da=2| 125 | Out.ar(0, Pan2.ar(In.ar(bus), Line.kr(1, -1, dur, doneAction: da), level)); 126 | }.send(s); 127 | 128 | SynthDef(\fadeOut) { |bus, dur=1, da=2| 129 | // @todo No idea how to make this work 130 | }.send(s); 131 | 132 | 133 | 134 | 135 | 136 | // Music begins here 137 | Buffer.readChannel(s, a[5], channels: 0, action: { |kbuf| 138 | "Kalimbas loaded".postln; 139 | 140 | Buffer.readChannel(s, a[1], channels: 0, action: { |jbuf| 141 | "City of Julie loaded".postln; 142 | 143 | Buffer.readChannel(s, a[3], channels: 0, action: { |dbuf| 144 | "Denjiha loaded".postln; 145 | 146 | r = Routine({ 147 | var drumTempo = 1, 148 | atmos1, 149 | atmos2, 150 | atmosPan, 151 | atmosBus, 152 | bassR, 153 | snareR, 154 | sledL, 155 | sledR, 156 | effPan, 157 | effBus, 158 | effPan2, 159 | effBus2, 160 | babble, 161 | babbleSyn, 162 | forest, 163 | forest2; 164 | 165 | 166 | "Ready to go!".postln; 167 | 168 | 169 | // Use this to skip blocks of audio! 170 | /*if (false, {*/ 171 | 172 | 173 | atmos1 = Synth(\atmos, [ 174 | \buf, kbuf, 175 | \totalDur, 5, 176 | \startDur, 0.005, 177 | \endDur, 0.5, 178 | \pos, 0.05, 179 | \dense, 75 180 | ]); 181 | (2.5).wait; 182 | 183 | atmos2 = Synth(\atmos, [ 184 | \out, 1, 185 | \buf, kbuf, 186 | \totalDur, 5, 187 | \startDur, 0.005, 188 | \endDur, 0.5, 189 | \pos, 0.1, 190 | \dense, 75 191 | ]); 192 | (5).wait; 193 | 194 | atmosBus = Bus.control(s, 2); 195 | atmosPan = Synth(\atmos, [ 196 | \out, atmosBus, 197 | \buf, kbuf, 198 | \totalDur, 5, 199 | \startDur, 0.05, 200 | \endDur, 0.9, 201 | \pos, 0.14, 202 | \dense, 75 203 | ]); 204 | Synth.after(atmosPan, \LRpan, [\bus, atmosBus, \dur, 5, \da, 0]); 205 | 206 | Synth(\kring, [ 207 | \buf, kbuf, 208 | \dur, 3.75, 209 | \pos, 0.09 210 | ]); 211 | (1.15).wait; 212 | 213 | Synth(\kring, [ 214 | \out, 1, 215 | \buf, kbuf, 216 | \dur, 1.75, 217 | \pos, 0.09, 218 | \rate, 1.1 219 | ]); 220 | (0.25).wait; 221 | 222 | Synth(\kring, [ 223 | \out, 1, 224 | \buf, kbuf, 225 | \dur, 2.75, 226 | \pos, 0.09, 227 | \rate, 1.25 228 | ]); 229 | (2.75).wait; 230 | 231 | bassR = Routine({ 232 | var bassDur = 0.25, 233 | bassBus = Bus.control(s, 2), 234 | bassSyn; 235 | 236 | loop({ 237 | 4.do({ 238 | bassSyn = Synth.new(\bass, [\out, bassBus, \freq, 200, \dur, bassDur]); 239 | Synth.after( 240 | bassSyn, 241 | \LRpan, 242 | [\bus, bassBus, \dur, bassDur] 243 | ); 244 | drumTempo.wait; 245 | 246 | bassSyn = Synth.new(\bass, [\out, bassBus, \freq, 200, \dur, bassDur]); 247 | Synth.after( 248 | bassSyn, 249 | \RLpan, 250 | [\bus, bassBus, \dur, bassDur] 251 | ); 252 | drumTempo.wait; 253 | }); 254 | 255 | // Lower frequency 256 | bassSyn = Synth.new(\bass, [\out, bassBus, \freq, 150, \dur, bassDur]); 257 | Synth.after( 258 | bassSyn, 259 | \LRpan, 260 | [\bus, bassBus, \dur, bassDur] 261 | ); 262 | drumTempo.wait; 263 | 264 | bassSyn = Synth.new(\bass, [\out, bassBus, \freq, 150, \dur, bassDur]); 265 | Synth.after( 266 | bassSyn, 267 | \RLpan, 268 | [\bus, bassBus, \dur, bassDur] 269 | ); 270 | drumTempo.wait; 271 | }); 272 | }).play; 273 | ((6*drumTempo) + (drumTempo/2)).wait; 274 | 275 | snareR = Routine({ 276 | loop({ 277 | // Single snare (three times) 278 | 3.do({ 279 | Synth(\snare, [\out, 0, \freq, 1000]); 280 | Synth(\snare, [\out, 1, \freq, 0500]); 281 | drumTempo.wait; 282 | }); 283 | 284 | // Double snare 285 | Synth(\snare, [\out, 0, \freq, 1050]); 286 | Synth(\snare, [\out, 1, \freq, 0550]); 287 | (drumTempo/4).wait; 288 | 289 | Synth(\snare, [\out, 0, \freq, 1000]); 290 | Synth(\snare, [\out, 1, \freq, 0500]); 291 | (drumTempo/4).wait; 292 | 293 | (drumTempo/2).wait; 294 | }); 295 | }).play; 296 | (4*drumTempo).wait; 297 | 298 | babble = Routine({ 299 | loop({ 300 | babbleSyn = Synth(\babum, [\buf, jbuf, \imp, 10]); 301 | "Julie?".postln; 302 | 4.wait; 303 | 304 | babbleSyn.free; 305 | "...".postln; 306 | 1.wait; 307 | }); 308 | }); 309 | babble.play; 310 | 5.wait; 311 | 312 | // Fade out the panning Kalimba atmosphere 313 | atmosPan.set(\gate, 0); 314 | 315 | // Start the sled atmosphere 316 | sledL = Synth(\sled, [ 317 | \buf, dbuf, 318 | \fadeDur, 5 319 | ]); 320 | sledR = Synth(\sled, [ 321 | \out, 1, 322 | \buf, dbuf, 323 | \fadeDur, 5 324 | ]); 325 | (7.5).wait; 326 | 327 | effBus = Bus.control(s, 2); 328 | effPan = Synth(\bass, [\out, effBus, \freq, 1000, \dur, 5]); 329 | Synth.after( 330 | effPan, 331 | \LRpan, 332 | [\bus, effBus, \dur, 5] 333 | ); 334 | (2.75).wait; 335 | 336 | effBus2 = Bus.control(s, 2); 337 | effPan2 = Synth(\bass, [\out, effBus2, \freq, 500, \dur, 2.5]); 338 | Synth.after( 339 | effPan2, 340 | \RLpan, 341 | [\bus, effBus2, \dur, 2.5] 342 | ); 343 | (4.75).wait; 344 | 345 | babble.stop; 346 | babbleSyn.free; 347 | "Julie stopped".postln; 348 | 349 | Synth(\bell, [\freq, 785, \decay, 3.5]); 350 | 3.wait; 351 | 352 | Synth(\bell, [\out, 1, \freq, 850, \decay, 3]); 353 | 2.wait; 354 | 355 | Synth(\bell, [\freq, 975, \decay, 1.5]); 356 | (0.95).wait; 357 | 358 | Synth(\bell, [\out, 1, \freq, 925, \decay, 1.5]); 359 | (0.95).wait; 360 | 361 | Synth(\bell, [\freq, 900, \decay, 1.5]); 362 | (0.95).wait; 363 | 364 | Synth(\bell, [\out, 1, \freq, 850, \decay, 1.5]); 365 | (0.95).wait; 366 | 367 | Synth(\bell, [\freq, 825, \decay, 4]); 368 | Synth(\bell, [\out, 1, \freq, 650, \decay, 2.5]); 369 | (2.5).wait; 370 | 371 | // Fade out the sled atmosphere 372 | sledL.set(\gate, 0); 373 | (2.5).wait; 374 | sledR.set(\gate, 0); 375 | 376 | forest = Synth(\forest, [\dense, 15, \amp, 0.25, \fadeDur, 7.5]); 377 | 3.wait; 378 | 379 | forest.set(\dense, 40); 380 | forest2 = Synth(\forest, [\bus, 1, \dense, 25, \vary, 15, \amp, 0.25, \fadeDur, 1]); 381 | 3.wait; 382 | 383 | forest.set(\dense, 75, \vary, 10, \amp, 0.5); 384 | forest2.set(\amp, 0.5); 385 | 6.wait; 386 | 387 | atmos1.set(\gate, 0); 388 | (2.5).wait; 389 | 390 | atmos2.set(\gate, 0); 391 | (1.5).wait; 392 | 393 | snareR.stop; 394 | 4.wait; 395 | 396 | bassR.stop; 397 | forest.set(\amp, 0.75); 398 | forest2.set(\amp, 0.75); 399 | 4.wait; 400 | 401 | forest.set(\gate, 0); 402 | (9.5).wait; 403 | 404 | forest2.set(\gate, 0); 405 | 1.wait; 406 | 407 | 408 | 409 | "It's Over".postln; 410 | }).play; 411 | 412 | }); 413 | }); 414 | }); -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | ## SuperCollider Music 2 | Various pieces that I've cobbled together in SuperCollider. Some of these are more musical than others, and they're all organized by how I feel about them. 3 | 4 | - `musical`: Pieces that are more musical than anything. 5 | - `alright`: Pieces that I don't care for too much. 6 | - `good`: Pieces that I think aren't too bad. 7 | - `great`: Pieces that I actually enjoy listening to. 8 | - `promising`: Pieces that I think could turn out really well with some more work. 9 | - `experiments`: Pieces that were more experiments than actual attempts at music. 10 | - `failures`: Pieces that just did not come out right. 11 | - `senior project`: Pieces I composed for my high school senior project. These are my first pieces. 12 | - `sounds`: Files that contain sound effects more than music. 13 | - `synths`: Various synths I've programmed or found. 14 | - `samples`: Audio samples for granular synthesis. 15 | -------------------------------------------------------------------------------- /samples/Cello II.aiff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codehearts/supercollider-music/e8cd492e26d0d23be329cef8647644a1f76a7791/samples/Cello II.aiff -------------------------------------------------------------------------------- /samples/City of Julie.aiff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codehearts/supercollider-music/e8cd492e26d0d23be329cef8647644a1f76a7791/samples/City of Julie.aiff -------------------------------------------------------------------------------- /samples/Code Couleur.aiff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codehearts/supercollider-music/e8cd492e26d0d23be329cef8647644a1f76a7791/samples/Code Couleur.aiff -------------------------------------------------------------------------------- /samples/Denjiha.aiff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codehearts/supercollider-music/e8cd492e26d0d23be329cef8647644a1f76a7791/samples/Denjiha.aiff -------------------------------------------------------------------------------- /samples/Drum & Babass.aiff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codehearts/supercollider-music/e8cd492e26d0d23be329cef8647644a1f76a7791/samples/Drum & Babass.aiff -------------------------------------------------------------------------------- /samples/Fru.aiff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codehearts/supercollider-music/e8cd492e26d0d23be329cef8647644a1f76a7791/samples/Fru.aiff -------------------------------------------------------------------------------- /samples/Kaliba.aiff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codehearts/supercollider-music/e8cd492e26d0d23be329cef8647644a1f76a7791/samples/Kaliba.aiff -------------------------------------------------------------------------------- /samples/Rebonddent.aiff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codehearts/supercollider-music/e8cd492e26d0d23be329cef8647644a1f76a7791/samples/Rebonddent.aiff -------------------------------------------------------------------------------- /samples/Track 30.aiff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codehearts/supercollider-music/e8cd492e26d0d23be329cef8647644a1f76a7791/samples/Track 30.aiff -------------------------------------------------------------------------------- /samples/Viens, va-t-en.aiff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codehearts/supercollider-music/e8cd492e26d0d23be329cef8647644a1f76a7791/samples/Viens, va-t-en.aiff -------------------------------------------------------------------------------- /samples/Wind.aiff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codehearts/supercollider-music/e8cd492e26d0d23be329cef8647644a1f76a7791/samples/Wind.aiff -------------------------------------------------------------------------------- /samples/hk1.aiff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codehearts/supercollider-music/e8cd492e26d0d23be329cef8647644a1f76a7791/samples/hk1.aiff -------------------------------------------------------------------------------- /samples/hk2.aiff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codehearts/supercollider-music/e8cd492e26d0d23be329cef8647644a1f76a7791/samples/hk2.aiff -------------------------------------------------------------------------------- /samples/readme.md: -------------------------------------------------------------------------------- 1 | ## Audio Samples 2 | These are bits and pieces of audio that I occasionally use for granular synthesis or other purposes in my pieces. I don't own any of this audio. 3 | 4 | - `Cello II.aiff`: Taken from Cello II by MINI FER on the album [Room 106](https://itunes.apple.com/us/album/cello-ii/id292502990?i=292503035) 5 | - `City of Julie.aiff`: Taken from City of Julie by O.Lamm on the album [Monolith](http://olamm.bandcamp.com/track/city-of-julie-with-cindy-lee-baker) 6 | - `Code Couleur.aiff`: Taken from Code Couleur by Discom. 7 | - `Denjiha.aiff`: Taken from Denjiha by Davide Balula. 8 | - `Drum & Babass.aiff`: Taken from Drum & Babass and the Magic Sound of Metallo by Hypo on the album [Kotva](http://hypo.bandcamp.com/track/drum-babass-and-the-magic-sound-of-metallo) 9 | - `Fru.aiff`: Taken from this [Russian animation](https://www.youtube.com/watch?v=qbar3nsf0_U) 10 | - `hk1.aiff`: Taken from Hugs & Kisses by Domotic on his album [Ask for Tiger](http://domotic.bandcamp.com/track/hugs-kisses) 11 | - `Kaliba.aiff`: sliced from the intro of Kaliba from King Q4's self-titled album [King Q4](http://kingq4.bandcamp.com/album/king-q4). 12 | - `Rebonddent.aiff`: Taken from Rebonddent by Port Radium on their album [Autopuzzle](http://www.amazon.fr/Autopuzzle-Port-Radium/dp/B00005OL4X) 13 | - `rec_assim_1.aiff`: Taken from Receive Assimilation by Coaltar of the Deepers on the EP [Receive E.P.](http://www.amazon.com/receive-COALTAR-DEEPERS-Þ-ÇèL-HEALERS/dp/B00005EYL7) 14 | - `svc1.aiff`: Taken from Stupid Vinyl Collection by Domotic, unreleased. 15 | - `Track 30.aiff`: Taken from Track 30 by Hypo on [Early Works 1991 - 1997](http://hypo.bandcamp.com/track/hypo-early-works-1991-1997-track-30) 16 | - `Viens, va-t-en.aiff`: Taken from Viens, va-t-en by Davide Balula on [Pellicule](http://www.amazon.com/Viens-va-t-en/dp/B0016GPYHQ) 17 | - `Wind.aiff` Taken from Kirby's Dreamland 3 18 | -------------------------------------------------------------------------------- /samples/rec_assim_1.aiff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codehearts/supercollider-music/e8cd492e26d0d23be329cef8647644a1f76a7791/samples/rec_assim_1.aiff -------------------------------------------------------------------------------- /samples/rec_assim_2.aiff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codehearts/supercollider-music/e8cd492e26d0d23be329cef8647644a1f76a7791/samples/rec_assim_2.aiff -------------------------------------------------------------------------------- /samples/rec_assim_3.aiff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codehearts/supercollider-music/e8cd492e26d0d23be329cef8647644a1f76a7791/samples/rec_assim_3.aiff -------------------------------------------------------------------------------- /samples/samples.sc: -------------------------------------------------------------------------------- 1 | /** 2 | * Sets global variables with a list of available audio samples 3 | * a - An array of paths to all available audio files 4 | * p - A method that takes in an audio file path, reads it as a buffer, and plays it 5 | */ 6 | 7 | var dir = "~/Music/supercollider-music/samples/".standardizePath; 8 | a = [ 9 | dir++"Cello II.aiff", // 0 10 | dir++"City of Julie.aiff", // 1 11 | dir++"Code Couleur.aiff", // 2 12 | dir++"Denjiha.aiff", // 3 13 | dir++"Drum & Babass.aiff", // 4 14 | dir++"Kaliba.aiff", // 5 15 | dir++"Rebonddent.aiff", // 6 16 | dir++"Track 30.aiff", // 7 17 | dir++"Viens, va-t-en.aiff", // 8 18 | dir++"Wind.aiff", // 9 19 | dir++"hk1.aiff", // 10 20 | dir++"hk2.aiff", // 11 21 | dir++"fru.aiff", // 12 22 | dir++"svc1.aiff", // 13 23 | dir++"svc2.aiff", // 14 24 | dir++"rec_assim_1.aiff", // 15 25 | dir++"rec_assim_2.aiff", // 16 26 | dir++"rec_assim_3.aiff" // 17 27 | ]; 28 | 29 | p = { |file| 30 | Buffer.read(s, file, action: { |buf| 31 | { PlayBuf.ar(buf.numChannels, buf, BufRateScale.kr(buf), doneAction: 2) }.play; 32 | }); 33 | }; 34 | 35 | "Audio sample array initialized"; -------------------------------------------------------------------------------- /samples/svc1.aiff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codehearts/supercollider-music/e8cd492e26d0d23be329cef8647644a1f76a7791/samples/svc1.aiff -------------------------------------------------------------------------------- /samples/svc2.aiff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/codehearts/supercollider-music/e8cd492e26d0d23be329cef8647644a1f76a7791/samples/svc2.aiff -------------------------------------------------------------------------------- /sounds/robo-sounds.scd: -------------------------------------------------------------------------------- 1 | // Various robotic/air raid siren noises 2 | 3 | ( 4 | 5 | SynthDef(\roboSiren, {|sFreq = 440, eFreq = 220, dur = 10, crushRate = 100, crushStep = 0.1, amp = 0.5, out = 0| 6 | var osc, freq, env, reverb; 7 | 8 | env = EnvGen.kr(Env.linen(0.005, 0.005, dur, amp, 0), doneAction: 2); 9 | freq = EnvGen.kr(Env([sFreq, eFreq], [dur]), 1); 10 | osc = Saw.ar(freq, env); 11 | reverb = FreeVerb.ar(osc, 1, 1, 0.5); 12 | 13 | Out.ar(out, reverb); 14 | }).play(s); 15 | 16 | ) 17 | 18 | ( 19 | 20 | // Air raid siren (from AIF invasion night) 21 | Pbind( 22 | \instrument, \roboSiren, 23 | \sFreq, Pseq([330], inf), 24 | \eFreq, Pseq([110], inf), 25 | \dur, Pseq([12.5], inf), 26 | \legato, 1, 27 | \amp, 0.5, 28 | \out, [0,1] 29 | ).play; 30 | 31 | ) 32 | 33 | ( 34 | 35 | SynthDef(\roboScreech, {|sFreq = 500, eFreq = 1250, curve = -5, dur = 0.5, amp = 0.5, out = 0| 36 | var osc, freq, env; 37 | 38 | env = EnvGen.kr(Env.linen(0.005, 0.005, dur, amp, 0), doneAction: 2); 39 | freq = EnvGen.kr(Env([sFreq, eFreq], [dur], [curve]), 1); 40 | osc = Saw.ar(freq, env); 41 | 42 | Out.ar(out, osc); 43 | }).play(s); 44 | 45 | ) -------------------------------------------------------------------------------- /synths/chiptune-reference.sc: -------------------------------------------------------------------------------- 1 | ( 2 | SynthDef(\EightBitSaw, {|freq = 440, dur = 1, amp = 0.2, out = 0| 3 | var osc, env, mask; 4 | 5 | env = EnvGen.kr(Env.linen(dur * 0.1, dur * 0.8, dur * 0.1, amp, 0), doneAction: 2); 6 | osc = Saw.ar(freq, env); 7 | mask = MantissaMask.ar(osc, 8); // make 8 bit 8 | Out.ar(out, mask); 9 | }).play 10 | ) 11 | 12 | ( 13 | SynthDef(\RoundedSine, {|freq = 440, dur = 1, amp = 0.2, out = 0| 14 | var osc, env, mask; 15 | 16 | env = EnvGen.kr(Env.linen(dur * 0.1, dur * 0.8, dur * 0.1, amp, 0), doneAction: 2); 17 | osc = SinOsc.ar(freq, 0, env).round(0.1); 18 | 19 | Out.ar(out, osc); 20 | }).play 21 | ) 22 | 23 | ( 24 | SynthDef(\LatchedSaw, {|freq = 440, dur = 1, amp = 0.2, out = 0| 25 | 26 | var osc, env, latched; 27 | 28 | env = EnvGen.kr(Env.linen(dur * 0.1, dur * 0.8, dur * 0.1, amp, 0), doneAction: 2); 29 | osc = Saw.ar(freq, env).round(0.1); 30 | latched = Latch.ar(osc, Impulse.ar(SampleRate.ir / 2)); 31 | Out.ar(out, latched); 32 | }).play 33 | ) 34 | 35 | ( 36 | SynthDef(\RingSine, {|freq1 = 111, freq2 = 440, dur = 1, amp1 = 1, amp2 = 0.2, out = 0| 37 | 38 | var osc1, osc2, env1, env2; 39 | 40 | env1 = EnvGen.kr(Env.linen(dur * 0.1, dur * 0.8, dur * 0.1, amp1, 0), doneAction: 2); 41 | env2 = EnvGen.kr(Env.linen(dur * 0.1, dur * 0.8, dur * 0.1, amp2, 0)); 42 | 43 | osc1 = SinOsc.ar(freq1, 0, env1); 44 | osc2 = SinOsc.ar(freq2, 0, osc1) * env2; 45 | Out.ar(out, osc2); 46 | }).play 47 | ) 48 | 49 | ( 50 | SynthDef(\RingSineGated, {|freq1 = 111, freq = 440, gate = 1, amp1 = 1, amp2 = 0.2, out = 0| 51 | 52 | var osc1, osc2, env1, env2; 53 | 54 | env1 = EnvGen.kr(Env.adsr(0.1, 0.01, amp1, 0.5), gate); 55 | env2 = EnvGen.kr(Env.adsr(0.2, 0.1, amp2, 0.1), gate, doneAction: 2); 56 | // with ring modulation, it doesn't matter which envelope gets the doneAction 57 | 58 | osc1 = SinOsc.ar(freq1, 0, env1); 59 | osc2 = SinOsc.ar(freq, 0, osc1) * env2; 60 | Out.ar(out, osc2); 61 | }).add; 62 | 63 | Pbind( 64 | \instrument, \RingSineGated, 65 | \freq, Pseq([440], 1), 66 | \freq2, 111, 67 | \amp1, 1, 68 | \amp2, 0.2, 69 | \dur, 1 70 | ).play 71 | ) -------------------------------------------------------------------------------- /synths/instruments.sc: -------------------------------------------------------------------------------- 1 | ( 2 | 3 | SynthDef(\kivBass) { |out=0, freq=100, gate=1, imp=0.125, pan=0, amp=0.5| 4 | var sust = Linen.kr(gate, doneAction: 2), 5 | vSaw = VarSaw.ar(freq, 0, LFTri.kr(imp).range(0.88, 0.98), amp), 6 | pan2 = Pan2.ar(vSaw, pan); 7 | 8 | Out.ar(out, pan2*sust); 9 | }.send(s); 10 | 11 | Routine({ 12 | var freq = Pseq([100, 75], inf).asStream, 13 | dur = Pseq([4], inf).asStream; 14 | 15 | x = Synth(\kivBass, [\freq, freq.next]); 16 | 17 | loop({ 18 | dur.next.wait; 19 | x.set(\freq, freq.next); 20 | }).play; 21 | }).play; 22 | 23 | ) 24 | 25 | 26 | ( 27 | 28 | SynthDef(\sawBass) { |out=0, freq=100, gate=1, pulse=2, imp=0.125, pan=0, amp=0.5| 29 | var sust = Linen.kr(gate, doneAction: 2), 30 | vSaw = VarSaw.ar(freq, 0, Saw.kr(pulse).range(0.5, 0.95), amp), 31 | pan2 = Pan2.ar(vSaw, pan); 32 | 33 | Out.ar(out, pan2*sust); 34 | }.send(s); 35 | 36 | Routine({ 37 | var freq = Pseq([100, 75], inf).asStream, 38 | dur = Pseq([4], inf).asStream; 39 | 40 | x = Synth(\sawBass, [\freq, freq.next]); 41 | 42 | loop({ 43 | dur.next.wait; 44 | x.set(\freq, freq.next); 45 | }).play; 46 | }).play; 47 | 48 | ) 49 | 50 | 51 | ( 52 | 53 | SynthDef(\sawSine) { |out=0, freq=100, gate=1, pulse=2, imp=0.125, pan=0, amp=0.5| 54 | var sust = Linen.kr(gate, doneAction: 2), 55 | sine = SinOsc.ar(freq, 0, Saw.kr(pulse).range(0, amp)); 56 | 57 | Out.ar(out, sine*sust); 58 | }.send(s); 59 | 60 | x = Synth(\sawSine); 61 | 62 | ) 63 | 64 | 65 | ( 66 | 67 | SynthDef(\breakup) { |out=0, bus, channels=1, minImp=10, maxImp=2000, dur=5, gate=1| 68 | var sust = Linen.kr(gate, doneAction: 2), 69 | in = In.ar(bus, channels), 70 | nois = Dust.kr(XLine.kr(maxImp, minImp, dur)); 71 | 72 | ReplaceOut.ar(out, in*nois*sust); 73 | }.send(s); 74 | 75 | ) 76 | 77 | 78 | ( 79 | 80 | SynthDef(\sine) { |out=0, gate=1, pan=0, amp=0.5| 81 | var sust = Linen.kr(gate, doneAction: 2), 82 | sine = SinOsc.ar(EnvGen.kr(Env([100, 150, 75], [2, 3], [5, -5]).circle, 1), 0, amp), 83 | pan2 = Pan2.ar(sine, pan); 84 | 85 | Out.ar(out, pan2*sust); 86 | }.send(s); 87 | 88 | x = Synth(\sine); 89 | 90 | ) 91 | 92 | 93 | ( 94 | 95 | SynthDef(\mouseBrokenWub) { |out=0, freq=150, sustain=0.25, pan=0, amp=0.5| 96 | var aEnv = EnvGen.kr(Env([amp,amp,0], [sustain, 0.05], [-2.5,0,0]), 1, doneAction: 2), 97 | fMod = MouseY.kr(1, 1000, 1), 98 | saw = Saw.ar(100, aEnv), 99 | modu = SinOsc.ar(fMod, 0, saw), 100 | sine = SinOsc.ar(freq, 0, 1), 101 | pan2 = Pan2.ar(sine*modu, pan); 102 | 103 | Out.ar(out, pan2); 104 | }.add; 105 | 106 | x = Synth(\mouseBrokenWub, [\sustain, 500]); 107 | 108 | ) -------------------------------------------------------------------------------- /synths/ixibass.sc: -------------------------------------------------------------------------------- 1 | SynthDef(\ixibass, {arg out=0, amp=0.3, t_trig=1, freq=100, rq=0.004; 2 | var env, signal; 3 | var rho, theta, b1, b2; 4 | b1 = 1.98 * 0.989999999 * cos(0.09); 5 | b2 = 0.998057.neg; 6 | signal = SOS.ar(K2A.ar(t_trig), 0.123, 0.0, 0.0, b1, b2); 7 | signal = RHPF.ar(signal, freq, rq) + RHPF.ar(signal, freq*0.5, rq); 8 | signal = Decay2.ar(signal, 0.4, 0.3, signal); 9 | DetectSilence.ar(signal, 0.01, doneAction:2); 10 | Out.ar(out, signal*(amp*0.45)!2); 11 | }).add; 12 | 13 | 14 | ( 15 | Pmono(\ixibass, 16 | \dur, Pseq([0.25, 0.25, 0.5, 0.75], inf), 17 | \midinote, Pseq([ 60, 50, 48, 62, 70] , inf)).play; 18 | 19 | Pmono(\ixibass, 20 | \dur, Pseq([0.25, 0.25, 0.5, 0.25, 0.25, 0.25], inf), 21 | \midinote, Pseq([ 48, 45, 48, 55, 57, 60, 50] , inf)).play(quant:[0,3.5,0]) 22 | ) 23 | 24 | 25 | 26 | Synth(\ixibass, [\freq, 110]) 27 | -------------------------------------------------------------------------------- /synths/rumblesan drums.scd: -------------------------------------------------------------------------------- 1 | ( 2 | 3 | SynthDef('clap', { 4 | 5 | var claposc, clapenv, clapnoise, clapoutput; 6 | 7 | clapnoise = {BPF.ar(LPF.ar(WhiteNoise.ar(1),7500),1500)}; 8 | clapenv = {Line.ar(1, 0, 0.6, doneAction: 2)}; 9 | 10 | clapoutput = {Mix.arFill(7, 11 | {arg i; 12 | EnvGen.ar( 13 | Env.new( 14 | [0,0,1,0], 15 | [0.01 * i,0,0.04] 16 | ) 17 | ) * clapnoise * 0.5 18 | } 19 | )}; 20 | 21 | Out.ar(0, 22 | Pan2.ar(clapoutput * clapenv, 0) 23 | ) 24 | 25 | }).send(s); 26 | 27 | t = Synth('clap'); 28 | 29 | ) 30 | 31 | ( 32 | 33 | SynthDef('snaredrum', { 34 | 35 | var drumosc, filterenv, volenv, drumoutput, snaposc, snapenv, fulloutput; 36 | 37 | drumosc = {Pulse.ar(100)}; 38 | filterenv = {Line.ar(1, 0, 0.2, doneAction: 0)}; 39 | volenv = {Line.ar(1, 0, 0.6, doneAction: 2)}; 40 | drumoutput = {LPF.ar(drumosc,(filterenv *1000) + 30)}; 41 | 42 | snaposc = {BPF.ar(HPF.ar(WhiteNoise.ar(1),500),1500)}; 43 | snapenv = {Line.ar(1, 0, 0.2, doneAction: 0)}; 44 | 45 | fulloutput = (drumoutput * volenv) + (snaposc * snapenv); 46 | //fulloutput = (drumoutput * volenv); 47 | 48 | Out.ar(0, 49 | Pan2.ar(fulloutput, 0) 50 | ) 51 | 52 | }).send(s); 53 | 54 | t = Synth('snaredrum'); 55 | 56 | ) 57 | 58 | ( 59 | SynthDef('openhat', { 60 | 61 | var hatosc, hatenv, hatnoise, hatoutput; 62 | 63 | hatnoise = {LPF.ar(WhiteNoise.ar(1),6000)}; 64 | 65 | hatosc = {HPF.ar(hatnoise,2000)}; 66 | hatenv = {Line.ar(1, 0, 0.3)}; 67 | 68 | hatoutput = (hatosc * hatenv); 69 | 70 | Out.ar(0, 71 | Pan2.ar(hatoutput, 0) 72 | ) 73 | }).send(s); 74 | 75 | o = Synth('openhat'); 76 | 77 | ) 78 | 79 | ( 80 | 81 | SynthDef('closedhat', { 82 | 83 | var hatosc, hatenv, hatnoise, hatoutput; 84 | 85 | hatnoise = {LPF.ar(WhiteNoise.ar(1),4000)}; 86 | 87 | hatosc = {HPF.ar(hatnoise,2000)}; 88 | hatenv = {Line.ar(1, 0, 0.1)}; 89 | 90 | hatoutput = (hatosc * hatenv); 91 | 92 | Out.ar(0, 93 | Pan2.ar(hatoutput, 0) 94 | ) 95 | }).send(s); 96 | 97 | c = Synth('closedhat'); 98 | 99 | ) 100 | 101 | ( 102 | 103 | SynthDef('kickdrum', { 104 | 105 | var osc, env, output; 106 | 107 | osc = {SinOsc.ar(60)}; 108 | env = {Line.ar(1, 0, 1, doneAction: 2)}; 109 | 110 | output = osc * env; 111 | 112 | Out.ar(0, 113 | Pan2.ar(output, 0) 114 | ) 115 | }).send(s); 116 | 117 | t = Synth('kickdrum'); 118 | 119 | ) 120 | 121 | ( 122 | 123 | SynthDef('fullkickdrum', { 124 | 125 | var subosc, subenv, suboutput, clickosc, clickenv, clickoutput; 126 | 127 | subosc = {SinOsc.ar(60)}; 128 | subenv = {Line.ar(1, 0, 1, doneAction: 2)}; 129 | 130 | clickosc = {LPF.ar(WhiteNoise.ar(1),1500)}; 131 | clickenv = {Line.ar(1, 0, 0.02)}; 132 | 133 | suboutput = (subosc * subenv); 134 | clickoutput = (clickosc * clickenv); 135 | 136 | Out.ar(0, 137 | Pan2.ar(suboutput + clickoutput, 0) 138 | ) 139 | 140 | }).send(s); 141 | 142 | t = Synth('fullkickdrum'); 143 | 144 | ) -------------------------------------------------------------------------------- /synths/sommar.scd: -------------------------------------------------------------------------------- 1 | ( 2 | SynthDef(\acid, { arg out, freq = 1000, gate = 1, pan = 1, cut = 4000, rez = 0.8, amp = 1; 3 | Out.ar(out, 4 | Pan2.ar( 5 | RLPF.ar( 6 | Pulse.ar(freq, 0.05), 7 | cut, rez), 8 | pan) * EnvGen.kr(Env.linen(0.01, 1, 0.3), gate, amp, doneAction:2); 9 | ) 10 | }).add; 11 | 12 | SynthDef(\noiseSnare) { |out=0, pan=0, freq=440, attack=0.005, sustain=0.05, decay=0.15, amp=0.25| 13 | var level, hitLevel, hit_time, noise, reverb, pan2; 14 | 15 | hit_time = 0.05; 16 | 17 | level = EnvGen.kr(Env([0,amp,amp,0], [attack,sustain,decay]), 1, doneAction: 2); 18 | hitLevel = EnvGen.kr(Env([0,amp,amp,0], [attack,hit_time,decay]), 1); 19 | 20 | noise = LFNoise0.ar(freq, hitLevel) + LFNoise0.ar(freq / 1.618, hitLevel); 21 | reverb = FreeVerb.ar(noise, 0, 1, 0.5); 22 | 23 | pan2 = Pan2.ar(reverb, pan); 24 | 25 | Out.ar(out, pan2 * level); 26 | }.add; 27 | 28 | SynthDef(\chipBassDrum) { |out=0, freq=150, sustain=0.25, pan=0, amp=1| 29 | var hit_time, level, pulse1, pulse2, pan2; 30 | 31 | hit_time = 0.1; 32 | level = EnvGen.kr(Env([1, 1, 0], [hit_time, 0.05]), 1, doneAction: 2); 33 | 34 | pulse1 = Pulse.ar(XLine.kr(freq, freq/4, hit_time), 0.5, amp); 35 | pulse2 = pulse1 - Pulse.kr(freq/4/2, 0.5, 0.75); 36 | pan2 = Pan2.ar(pulse2, pan); 37 | 38 | Out.ar(out, pan2 * level); 39 | }.add; 40 | 41 | // Based on code from http://permalink.gmane.org/gmane.comp.audio.supercollider.user/77153 42 | SynthDef(\tape_delay) { |in=0, out=0, imp=1, lag=3, maxLag=0.2, decayTime=6| 43 | var input, newOut, delayTime, laggedDelayTime, outDelay; 44 | 45 | input = In.ar(in, 2) * 0.75; 46 | // Delay time jumps on impulse 47 | delayTime = Demand.kr(Impulse.kr(imp), 0, Dseq([0.3], inf)); 48 | // Amount of time to reach new value 49 | laggedDelayTime = Lag.kr(delayTime, lag); 50 | // CombC - delay with feedback 51 | newOut = CombC.ar(input, maxLag, laggedDelayTime, decayTime) + in; 52 | 53 | ReplaceOut.ar(out, newOut); 54 | }.add; 55 | ) 56 | 57 | ( 58 | Pbind(\instrument, \acid, \dur, Pseq([0.25, 0.5, 0.25], inf), \root, -12, 59 | \degree, Pseq([0, 3, 5, 7, 9, 11, 5, 1], inf), \pan, Pfunc({1.0.rand2}), 60 | \cut, Pxrand([1000, 500, 2000, 300], inf), \rez, Pfunc({0.7.rand +0.3}), \amp, 0.2).play; 61 | 62 | w = Window.new; 63 | c = Slider(w,Rect(0,0,100,30)); 64 | c.keyDownAction = { |view, char, modifiers, unicode, keycode| 65 | unicode.postln; 66 | switch (unicode, 67 | 32, {Synth(\chipBassDrum, [\amp, 0.125]);}, 68 | 122, {Synth(\noiseSnare, [\freq, 8500, \amp, 0.35]);} 69 | ) 70 | }; 71 | w.onClose = { 72 | s.freeAll; 73 | }; 74 | w.front; 75 | ) -------------------------------------------------------------------------------- /synths/synthesis.sc: -------------------------------------------------------------------------------- 1 | ( 2 | 3 | // Simple synthesis 4 | SynthDef(\simpsyn) { |out=0| 5 | var inst = SinOsc.ar( 6 | LFNoise0.kr( 7 | 5, 8 | XLine.kr(450, 250, 10), 9 | 500 10 | ), 11 | 0, 12 | Saw.ar( 13 | LFNoise0.kr(5, 250, 350), 14 | 0.75 15 | ) 16 | ); 17 | Out.ar(out, inst); 18 | }.send(s); 19 | 20 | x = Synth(\simpsyn); 21 | 22 | ) 23 | 24 | ( 25 | 26 | SynthDef(\twuu) { |out=0, freq=440, dur=1, dir=0| 27 | var line, base, inst; 28 | 29 | if (dir == 0, { 30 | line = Line.kr(1, -1, dur); 31 | }, { 32 | line = Line.kr(-1, 1, dur); 33 | }); 34 | 35 | base = SinOsc.ar(XLine.kr(freq, 50, dur, doneAction: 2), 0, 1); 36 | inst = Pan2.ar(base, line); 37 | 38 | Out.ar(out, inst); 39 | }.send(s); 40 | 41 | Routine({ 42 | loop({ 43 | var dur = rrand(0.1, 0.4); 44 | Synth(\twuu, [\freq, rrand(250, 1000), \dur, dur, \dir, 2.rand]); 45 | 46 | dur.wait; 47 | }); 48 | }).play; 49 | 50 | ) 51 | 52 | ( 53 | 54 | // Drumming 55 | SynthDef(\snare) { |out=0, freq=1000, decay=0.25| 56 | var eAmp = EnvGen.kr(Env.perc(0.005, decay), 1, doneAction: 2), 57 | drum = SinOsc.ar(freq, 0, GrayNoise.ar(eAmp*0.15)) + WhiteNoise.ar(eAmp*0.5); 58 | 59 | Out.ar(out, drum); 60 | }.send(s); 61 | 62 | Routine({ 63 | var dur = 0.25; 64 | 65 | loop({ 66 | Synth(\twuu, [\freq, 150, \dur, dur]); 67 | 68 | dur.wait; 69 | 70 | Synth(\snare, [\out, 0, \freq, 1000]); 71 | Synth(\snare, [\out, 1, \freq, 0500]); 72 | 73 | dur.wait; 74 | }); 75 | }).play; 76 | 77 | ) 78 | 79 | ( 80 | 81 | SynthDef(\simp2) { |out=0| 82 | var env = EnvGen.kr(Env.new([0.2, 1, 0.5], [2.5, 1.5], [3, -2.5]), 1, doneAction: 2), 83 | inst = SinOsc.ar(env*1000, 0, FSinOsc.kr(env*10)) + Saw.ar(env*500, 0.25); 84 | 85 | Out.ar(out, inst); 86 | }.play(s); 87 | 88 | ) 89 | 90 | ( 91 | 92 | SynthDef(\simp3) { |out=0| 93 | var inst = SinOsc.ar( 94 | 440, 95 | 0, 96 | Impulse.kr( 97 | XLine.kr(160, 16, 5, doneAction: 2), 98 | LFNoise1.kr(4, 0, 1) 99 | ) 100 | ); 101 | 102 | Out.ar(out, inst); 103 | }.play(s); 104 | 105 | ) 106 | 107 | ( 108 | 109 | SynthDef(\bubbles) { |out=0, lf=150, hf=500| 110 | var base = SinOsc.ar(LFNoise0.kr(25, lf, hf), 0, FSinOsc.kr(10)), 111 | inst = Pan2.ar(base, FSinOsc.kr(2), 1); 112 | 113 | Out.ar(out, inst); 114 | }.play(s); 115 | 116 | ) 117 | 118 | ( 119 | 120 | SynthDef(\simp4) { |out=0, freq=500, att=1, dec=0.5, amp=1| 121 | var fEnv = EnvGen.kr(Env.sine(att, dec), 1, doneAction: 2), 122 | inst = SinOsc.ar(freq*fEnv, 0, amp); 123 | 124 | Out.ar(out, inst); 125 | }.send(s); 126 | 127 | Routine({ 128 | var att = 0.5; 129 | Synth(\simp4, [\freq, 1000, \att, att, \dec, 0.5]); 130 | att.wait; 131 | 132 | att = 0.35; 133 | Synth(\simp4, [\freq, 1250, \att, att, \dec, 0.25]); 134 | att.wait; 135 | 136 | att = 0.75; 137 | Synth(\simp4, [\freq, 1500, \att, att, \dec, 1]); 138 | (0.4).wait; 139 | 140 | att = 0.65; 141 | Synth(\simp4, [\freq, 1400, \att, att, \dec, 1]); 142 | (0.35).wait; 143 | 144 | att = 0.55; 145 | Synth(\simp4, [\freq, 1300, \att, att, \dec, 1]); 146 | (0.3).wait; 147 | 148 | att = 0.45; 149 | Synth(\simp4, [\freq, 1200, \att, att, \dec, 1]); 150 | (0.25).wait; 151 | 152 | att = 0.35; 153 | Synth(\simp4, [\freq, 1100, \att, att, \dec, 1]); 154 | (0.2).wait; 155 | 156 | att = 0.25; 157 | Synth(\simp4, [\freq, 1000, \att, att, \dec, 1]); 158 | (0.15).wait; 159 | 160 | att = 0.15; 161 | Synth(\simp4, [\freq, 900, \att, att, \dec, 1]); 162 | (0.1).wait; 163 | 164 | att = 0.1; 165 | Synth(\simp4, [\freq, 800, \att, att, \dec, 1]); 166 | (0.05).wait; 167 | 168 | att = 0.05; 169 | Synth(\simp4, [\freq, 700, \att, att, \dec, 1]); 170 | }).play; 171 | 172 | ) 173 | 174 | // Steppers 175 | ( 176 | 177 | SynthDef(\randbistep) { |out=0, imp=25, dur=1| 178 | var saw = Saw.ar( 179 | Stepper.kr(Impulse.kr(dur), 0, 6, 10, 1)*50, 180 | TIRand.kr(0, 1, Impulse.kr(imp)) 181 | ), 182 | sine = SinOsc.ar( 183 | Stepper.kr(Impulse.kr(dur), 0, 6, 10, 1)*100, 184 | 0, 185 | TIRand.kr(0, 1, Impulse.kr(imp)) 186 | ); 187 | 188 | Out.ar(out, sine+saw); 189 | }.play(s); 190 | 191 | ) 192 | 193 | ( 194 | 195 | SynthDef(\bistep) { |out=0, imp=20, dur=1| 196 | var saw = Saw.ar( 197 | Stepper.kr(Impulse.kr(dur), 0, 6, 10, 1)*50, 198 | Stepper.kr(Impulse.kr(imp), 0, 0, 1, 1) 199 | ), 200 | sine = SinOsc.ar( 201 | Stepper.kr(Impulse.kr(dur), 0, 6, 10, 1)*100, 202 | 0, 203 | Stepper.kr(Impulse.kr(imp), 0, 0, 1, 1) 204 | ); 205 | 206 | Out.ar(out, sine+saw); 207 | }.play(s); 208 | 209 | ) 210 | 211 | ( 212 | 213 | // Panning stpper 214 | // Sounds good with pImp set to aImp or fImp! 215 | SynthDef(\panbistep) { |out=0, aImp=25, fImp=10, pImp=25| 216 | var saw = Saw.ar( 217 | Stepper.kr(Impulse.kr(fImp), 0, 6, 10, 1)*50, 218 | Stepper.kr(Impulse.kr(aImp), 0, 0, 1, 1) 219 | ), 220 | sine = SinOsc.ar( 221 | Stepper.kr(Impulse.kr(fImp), 0, 6, 10, 1)*100, 222 | 0, 223 | Stepper.kr(Impulse.kr(aImp), 0, 0, 1, 1) 224 | ), 225 | pan = Pan2.ar(sine+saw, Stepper.kr(Impulse.kr(pImp), 0, -1, 1, 2)); 226 | 227 | Out.ar(out, pan); 228 | }.play(s); 229 | 230 | ) --------------------------------------------------------------------------------