// SynthDefs /////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// // INSTRUMENTS ///////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// // -- GRANULATION -- // ------------------------------------------------------------------- SynthDef(\granPlay, { arg outBus = 0, bufnum = 0, gate = 1, rate = 1, amp = 0.1, atk = 4, rls = 4, sul = 1, freq = 160, fvar = 1, gdur = 0.1, durvar = 0.01, gpos = 0, posvar = 0.01, pitch = 1, pitchvar = 0, width = 1, gain = 0.3, autoPosN=0, autoPosS=0; var snd, env, posOsc, posSin; posOsc = LFNoise1.kr(1/8) * autoPosN; posSin = SinOsc.kr(1/8) * autoPosS; env = EnvGen.ar( Env.adsr( attackTime: atk, decayTime: atk, sustainLevel: sul, releaseTime: rls), gate, doneAction:2); snd = GrainBuf.ar( numChannels: 2, trigger: Impulse.kr(freq + (freq * (fvar * LFNoise2.kr(freq)))), // a UGen? dur: gdur + (durvar * LFNoise2.kr(freq)), // in seconds sndbuf: bufnum, rate: pitch + (pitchvar * LFNoise2.kr(5)), // pitch !! WHAT IS THE SPEED OF VARIATIONS? setable?? pos: gpos + (posvar * LFNoise2.kr(freq)) + posOsc + posSin, // position 0-1 interp: 2, // interpolation for pitchshifting pan: LFNoise1.kr(10).range(width.neg, width), // if numChannels=2, similar to Pan2, -1 left, +1 right maxGrains: 512, mul: gain ); snd = snd * env * amp; Out.ar(outBus, snd); }).add; // -- PLAY BUFFER -- // ------------------------------------------------------------------- SynthDef(\playBuf, { arg outBus = 0, bufnum = 0, gate=1, pan=0, rate=1, start=0.4, atk=0.01, rls=0.01, amp=0.1, sdel=0, hpff=0; var env, snd, rscale; rscale = BufRateScale.kr(bufnum); snd = PlayBuf.ar(1, bufnum, rscale * rate, gate, //20000, BufDur.kr(bufnum) * BufSampleRate.kr(bufnum) * start, 0); snd = [snd, DelayL.ar(snd,0.2, sdel)]; snd = HPF.ar(snd, hpff); env = EnvGen.ar(Env.adsr(atk, 0,1,rls), gate, doneAction:2); snd = snd * env * amp; snd = Balance2.ar(snd[0], snd[1], pan); Out.ar(outBus, snd); }).add; // beep. -- // ------------------------------------------------------------------- SynthDef(\beep_sus, { arg outBus = 0, freq=440, gate=1, amp=0.1, sawamp = 0.1; var snd; snd = Pulse.ar(freq) + LFTri.ar(freq/ Rand(1.99,2.01)) + Saw.ar(freq * Rand(1.99,2.01), mul:sawamp); snd = snd * EnvGen.kr(Env.cutoff, gate, doneAction:Done.freeSelf); snd = snd * amp * 0.1; Out.ar(outBus, snd!2); } ).add; // // simplenoise -- // -------------------------------------------------------- SynthDef(\noise, { arg outBus = 0, freq=440, gate=1, amp=0.1; var snd; //snd = Pulse.ar(freq) + LFTri.ar(freq/ Rand(1.99,2.01)) + Saw.ar(freq * Rand(1.99,2.01), mul:sawamp); snd = PinkNoise.ar(2); snd = Dust2.ar(200, mul:4) + snd; snd = HPF.ar(snd, 200); snd = snd * EnvGen.kr(Env.cutoff, gate, doneAction:Done.freeSelf); snd = snd * amp; Out.ar(outBus, snd!2); } ).add; // AKJ -- // -------------------------------------------------------- // SynthDef(\akjDisChord, { arg freq=300, amp=0.1, out=0, gate=1; var snd, env; freq = [freq,freq*1.01]; snd = LFPar.ar(freq) * 0.3 + (LFTri.ar(freq*16/19, mul:0.3)) + (Pulse.ar(freq*21/40, mul:0.1)) + (SinOsc.ar(freq/8.01, mul:4).clip2(0.3)); env = EnvGen.kr(Env([0,1,0],[20,30], \cub, 1), gate, doneAction:2); snd = Splay.ar(snd); snd = snd * env * amp; Out.ar(out, snd); }).add; SynthDef(\akjBaz, { arg freq=300, amp=0.1, out=0, gate=1; var snd, env; snd = SinOsc.ar(freq/4, mul:0.7)!2; snd = snd * Lag.ar(LFPulse.ar(freq/8.02, 0.5).range(1,0),0.005); snd = snd.softclip(0.5) * 1.5 ; env = Linen.kr(gate, 0,1,0, 2); snd = snd * env * amp; Splay.ar(snd); Out.ar(out, snd); }).add; SynthDef(\akjClick, { arg out=0, gate=1, freq=440, amp=0.1, releaseTime=0.1; var snd, env; snd = LFPulse.ar([freq, freq * 2], width: LFNoise1.ar(0.1).exprange(0.001,0.004)); snd = snd + (WhiteNoise.ar(1) * snd); snd = HPF.ar(snd, 200); env = EnvGen.ar(Env.perc(0,releaseTime)); snd = snd * env * amp * Linen.kr(gate, 0, 1, releaseTime, 2); snd = Splay.ar(snd); Out.ar(out, snd); }).add; SynthDef(\lcmnoise, { arg gate=1, outBus, amp1=0, amp2=1, amp=0.1; var snd, revchain, env; snd = [ tanh(lcm(SinOsc.ar( LFNoise0.kr(LFNoise0.kr(1/10).exprange(0.1,1)).exprange(1,15000) ).range(-100,100).round(1),SinOsc.ar( LFNoise0.kr(LFNoise0.kr(1/10).exprange(0.1,1)).exprange(1,15000) ).range(-100,100).round(1))*0.0001), tanh(lcm(Saw.ar( LFNoise0.kr(LFNoise0.kr(1/10).exprange(0.1,1)).exprange(1,15000) ).range(-100,100).round(1),LFCub.ar( LFNoise0.kr(LFNoise0.kr(1/10).exprange(0.1,1)).exprange(1,15000) ).range(-100,100).round(1))*0.0001) ] ; snd = BHiPass.ar(snd, 180); snd = snd.softclip * 0.8; snd = Splay.ar(snd, spread:1); revchain = snd * EnvGen.ar(Env.perc(0, 0.1, Rand(10,10000), 4)); revchain = Greyhole.ar( in: revchain, delayTime: LFNoise1.ar(1).range(0.0001,0.2), damp: 0.5, size: LFNoise1.ar(0.1).exprange(0.0001,5), feedback: 0.95); revchain = LeakDC.ar(revchain); revchain = Limiter.ar(revchain) * LFNoise1.ar([1,1]).range(0,0.9); snd = snd * LFNoise0.ar([0.9,0.8]).range(0,2); snd = (snd * amp1) + (revchain * amp2); snd = snd.softclip * 0.8; env = Linen.kr(gate, 0, 1, 0, 2); snd = snd * amp * env; Out.ar(outBus, snd); //snd = LPF.ar(snd.softclip, LFNoise1.ar(0.1).exprange(10000,20000)) * 0.8; }).add; // darksaw // ------------------------------------------------------ // "--- dark saw synthdef...".postln; SynthDef(\softSaw, { arg out = 0, freq = 40, oscdetune = 0.1, amp = 1, pan = 0, gate = 1, attackTime = 0.1, susLevel = 1.0, releaseTime = 1.0, gainBus; var env, snd; oscdetune = oscdetune * 0.1; amp = amp * 0.4; env = Linen.kr(gate, attackTime, susLevel, releaseTime, doneAction:2); snd = VarSaw.ar( freq: [freq, freq * (1.003 + oscdetune)], width: SinOsc.kr(0.01,0.2).range(0.05,0.095)); snd = snd + VarSaw.ar( freq: [(freq*2 * (1.001 - oscdetune)),(freq*2 * (1 + oscdetune))], width: SinOsc.kr(0.06,0.8).range(0.2,0.8)); snd = Balance2.ar(snd.at(0), snd.at(1), pos: pan); snd = snd * amp * env ; OffsetOut.ar(out, snd); }).add; ///////////////////////////////////////////////////////////////////////////////////////// // EFFECTS ///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////// // LOW PASS FILTER AS BUS EFFECT // --------------------------------------------------- SynthDef(\lpfFX, { arg inBus, outBus = 0, cutoff = 500, cutoffLag = 5; var snd, input; input = In.ar(inBus,2); snd = BLowPass4.ar(input, VarLag.kr(cutoff.max(50), cutoffLag, 0, warp:\exp)); Out.ar(outBus, snd); } ).add; // FEEDBACK DELAY WITH BANDPASS FILTER AND STEREO ROTATION // ---------------------------- SynthDef(\localFeedbackDelay1, { arg inBus, outBus = 0; var snd, input, local; input = In.ar(inBus,2); local = LocalIn.ar(2) * \amount.kr(0.99); local = BPF.ar(local, LFNoise1.kr(0.6).range(450,2000), LFNoise1.kr(0.1).range(0.8,1)); local = Rotate2.ar(local[0], local[1], 0.23); local = AllpassN.ar(local, 0.05, {Rand(0.01,0.05)}.dup, 2); local = DelayN.ar(local, 0.3, [0.26,0.19]); local = AllpassN.ar(local, 0.05, {Rand(0.03,0.15)}.dup, 2); local = LeakDC.ar(local); local = local + input; LocalOut.ar(local); Out.ar(outBus, local); } ).add; // reverb synthdef SynthDef(\revfx, { |inBus, outBus = 0, wet = 0.3, amp = 0.2| var snd, rev; snd = In.ar(inBus, 2); //snd = BHiShelf.ar(snd, 5000, db:-3); rev = GVerb.ar(snd, 100, taillevel:wet); rev = rev * amp; OffsetOut.ar(outBus, rev); }).add; // SATURATOR + REVERB // ----------------------------------------------------------- SynthDef(\saturator, { arg inBus, outBus=0; var snd, in, revsnd; in = In.ar(inBus, 2); //snd = AnalogTape.ar(in * LFNoise1.kr(1/4).range(1,2), 0.5, SinOsc.kr(1/4).range(0,1), 1, 0, 3) * 0.5; snd = AnalogTape.ar(in * 2, 0.5, 1, 1, 0, 3) * 0.5; snd = snd.sum; revsnd = HPF.ar(snd,100); snd = GVerb.ar(revsnd, 100, \revtime.kr(6), drylevel:0, earlyreflevel:\earlyreflevel.kr(0.3), taillevel:\taillevel.kr(0.3)) * 0.5 + snd; snd = [snd[0], DelayL.ar(snd[1], 0.2, 0.02)]; //snd = in; // !! --------- //snd = Limiter.ar(snd, 0.9, 0.1); snd = snd * \amp.kr(0).lag3(\amplag.kr(10)); OffsetOut.ar(outBus, snd); }).add;