Skip to content

Instantly share code, notes, and snippets.

@furenku
Created April 25, 2019 05:09
Show Gist options
  • Save furenku/73ee99bb46faeea7645bf72e79defc8d to your computer and use it in GitHub Desktop.
Save furenku/73ee99bb46faeea7645bf72e79defc8d to your computer and use it in GitHub Desktop.
INSTRUMENT SynthDefs
SynthDef(\audioBus, {|inBus=99,outBus=99,amp=1,pan=0|
var sig = In.ar(inBus);
Out.ar(outBus, Pan2.ar(sig * amp,pan))
}).store;
SynthDef(\audioInput, {| inBus=0, out = 0, gate=1,amp=1|
var in = SoundIn.ar(inBus);
var env = EnvGen.kr(Env.asr(0.01,1,0.01),gate,doneAction:2);
Out.ar(out, in * amp)
}).store;
SynthDef(\audioOutput, {|inBus=99,outBus=99,amp=1,pan=0|
var sig = In.ar(inBus);
Out.ar(outBus, Pan2.ar(sig * amp,pan))
}).store;
/*
bassTrance1
bassTrance2
bassTrance3
bassDist
mono_bassPhatPhase
bassSimple
bassSinTri
bassSmooth
bassWobbleRing
*/
SynthDef(\bassTrance1, {
|freq=1.0, decayTime=0.5, amp=0.5, gain=0.5, temp=100, out=0, done=2, pan=0, att=0.01, sus=0.1, rel=0.2, rq=0.06, dist=1|
var sig, env;
sig = SinOsc.ar(freq)/4;
sig = sig + Saw.ar(freq/4)/2;
sig = (sig * 23.33*gain).tanh;
sig = RLPF.ar(sig,freq*[1,4],rq).tanh;
// sig = (sig * 23.33).tanh;
env = EnvGen.kr( Env.perc(att,rel), doneAction: 2 );
sig = sig * env;
sig = (sig * dist).tanh;
Out.ar( out, Pan2.ar(sig * amp / 4, pan) );
}).store;
SynthDef(\bassTrance2, {
|freq=1.0, decayTime=0.5, amp=0.5, temp=100, out=0, done=2, pan=0, att=0.01, sus=0.1, rel=0.2|
var sig, env;
sig = SinOsc.ar(freq/2)/4;
sig = sig + Saw.ar(freq/4)/2;
sig = RLPF.ar(sig,freq*[1,4],0.06);
sig = (sig * 23.33).tanh;
// sig = (sig * 23.33).tanh;
env = EnvGen.kr( Env.perc(att,rel), doneAction: 2 );
sig = sig * env;
Out.ar( out, Pan2.ar(sig * amp / 4, pan) );
}).store;
SynthDef(\bassTrance3, {
|freq=1.0, decayTime=0.5, amp=0.5, temp=100, out=0, done=2, pan=0, att=0.01, sus=0.1, rel=0.2|
var sig, env;
sig = LFPulse.ar(freq/2,LFNoise2.kr(8,0.4,0.5));
sig = sig + Saw.ar(freq/[4,1/2])/[2,8];
sig = RLPF.ar(sig,freq*[1,4],0.06);
sig = (sig * 3.33).tanh;
// sig = (sig * 23.33).tanh;
env = EnvGen.kr( Env.perc(att,rel), doneAction: 2 );
sig = sig * env;
Out.ar( out, Pan2.ar(sig * amp / 4, pan) );
}).store;
SynthDef(\bassDist, {
|freq=1.0, decayTime=0.5, amp=0.5, gain=0.5, temp=100, out=0, done=2, pan=0, att=0.01, sus=0.1, rel=0.2, rq=0.06, dist=1|
var sig, env;
sig = SinOsc.ar(freq)/4;
sig = sig + Saw.ar(freq/4)/2;
sig = (sig * 23.33*gain).tanh;
sig = RLPF.ar(sig,freq*[1,4],rq).tanh;
// sig = (sig * 23.33).tanh;
env = EnvGen.kr( Env.perc(att,rel), doneAction: 2 );
sig = sig * env;
sig = (sig * dist).tanh;
Out.ar( out, Pan2.ar(sig * amp / 4, pan) );
}).store;
SynthDef(\mono_bassPhatPhase, {
|gain=2.1, factor2=1, amp=0.5, gate=1, out=0, freq=331.0, done=2, pan=0, att=0.01, sus=0.3, rel=0.3, q=0.06, legato=0.4, clock=1|
var lfo;
var spread;
var env;
var lagFreq = Lag2.kr(freq,legato);
var sig;
var factor;
factor = Latch.kr( LFNoise0.kr(clock), Dust.kr(clock)).linexp(-1,1,0.2,12)*factor2;
lfo = SinOsc.kr(clock*(5*factor),0,3,4);
spread = SinOsc.kr(clock*4,0,[13,30]).linlin(-1,1,0,factor);
sig = LFTri.ar(lagFreq+([1,2]))/3
+
Saw.ar(lagFreq+([3,4])/2)/4
+
LFPulse.ar(
[
lagFreq,
// lagFreq*[1/2,1,3,8],
Saw.ar(clock+([3,5]*lfo))
.linlin(0,1,lagFreq,lagFreq+(spread*[3,5]))
],
[0,3,5,7]/8,
lfo/[1,6,14,20]
) ;
sig = Mix.new(
sig/4 ! 1
) ! 1;
sig = sig * gain;
sig = sig.tanh;
sig = RLPF.ar(sig,lagFreq*[1,8,16],[0.3,0.15*lfo,1]);
env = EnvGen.kr(Env.asr(att,sus,rel),gate,doneAction:2);
sig = sig * (amp*env);
Out.ar( out, Pan2.ar( sig, pan ));
}).store;
SynthDef(\bassSimple, {|freq=220,amp=0.5, out=0|
var sig;
var env;
sig = Saw.ar(freq);
sig = sig * EnvGen.kr( Env.perc, doneAction: 2 );
Out.ar(out, Pan2.ar(sig * amp, 0, amp) / 2);
}).store;
SynthDef(\bassSinTri,
{
arg
out=0,
freq=90;
var sig, env;
sig = SinOsc.ar(freq,pi/2,1,0);
sig = sig + LFTri.ar(freq,4,1,0);
env = EnvGen.kr(Env.perc(0.005, 1, 2, 0.1),doneAction:2);
Out.ar(out, (Pan2.ar( sig * env) / 2));
}).store;
SynthDef(\bassSmooth, {
|gain=1,freq=331.0, decayTime=0.5, amp=2, gate=1, out=0, done=2, pan=0, att=0.01, sus=0.1, rel=0.3, cutoff=1, q=0.06,legato=0.2|
var sig, env;
sig = Pulse.ar(Lag2.kr(freq,legato));
sig = sig + (LFSaw.ar(Lag2.kr(freq,legato)/2)*3).tanh;
sig = sig+ RLPF.ar((sig*LFNoise2.kr(3, 1, 1.6)).tanh,cutoff*freq*[2.5,3.3],q.linlin(0,1,0.05,0.5))/3;
env = EnvGen.kr( Env.asr(att,sus,rel), gate, doneAction: 2 );
sig = (sig*gain.linlin(0,1,1,18)).tanh * (amp*env);
Out.ar( out, Pan2.ar( sig/1.25, pan ));
}).store;
SynthDef(\bassWobbleRing, {
|freq=331.0, decayTime=0.5, amp=0.25, gate=1, out=0, done=2, pan=0, att=0.3, rel=1.3, q=0.06,legato=0.02|
var sig, env;
sig = RLPF.ar(3*Blip.ar(freq,SinOsc.kr(3,pi/2,99,101)),Lag2.kr(freq*[1,2],legato),[0.001,0.1]);
sig = sig + (LFSaw.ar(Lag2.kr(freq,legato)*[2,3])*[13,3]).tanh / 2;
sig = sig+ (RLPF.ar((WhiteNoise.ar*LFNoise2.kr(3, 1, 1.6)).tanh,freq*[2,3],q)*2.3).tanh;
env = EnvGen.kr( Env.perc(att,rel), gate, doneAction: 2 );
sig = Mix.new((sig/12).tanh) * (amp*env);
Out.ar( out, Pan2.ar( sig/2, pan ));
}).store;
SynthDef(\kickDeep, {|amp=0.5, out=0|
var daNoise,daOsc,env1,env2,env3;
env1=Env.perc(0.001,1,80,-20);
env2=Env.perc(0.001,1,1,-8);
env3=Env.perc(0.001,1,80,-8);
daNoise=LPF.ar(WhiteNoise.ar(1),EnvGen.kr(env1)+20);
daOsc=LPF.ar(SinOsc.ar(EnvGen.kr(env3)+20),200);
Out.ar(out,Pan2.ar(Mix.ar([daNoise,daOsc]) * amp, 0, EnvGen.kr(env2,doneAction: 2))) / 2;
}).store;
SynthDef(\i8t_drum_kickElectro, {|pan = 0, amp = 1, out=0|
var body, bodyFreq, bodyAmp;
var pop, popFreq, popAmp;
var click, clickAmp;
var snd;
// body starts midrange, quickly drops down to low freqs, and trails off
bodyFreq = EnvGen.ar(Env([261, 120, 51], [0.035, 0.08], curve: \exp));
bodyAmp = EnvGen.ar(Env.linen(0.005, 0.1, 0.3), doneAction: 1);
body = SinOsc.ar(bodyFreq) * bodyAmp;
// pop sweeps over the midrange
popFreq = XLine.kr(750, 261, 0.02);
popAmp = EnvGen.ar(Env.linen(0.001, 0.02, 0.001)) * 0.15;
pop = SinOsc.ar(popFreq) * popAmp;
// click is spectrally rich, covering the high-freq range
// you can use Formant, FM, noise, whatever
clickAmp = EnvGen.ar(Env.perc(0.001, 0.01)) * 0.15;
click = LPF.ar(Formant.ar(910, 4760, 2110), 3140) * clickAmp;
snd = body + pop + click;
snd = snd.tanh;
Out.ar(out, Pan2.ar(snd * amp, pan, amp) / 2);
}).store;
SynthDef(\kickFull, {|amp=0.5, out=0|
var subosc, subenv, suboutput, clickosc, clickenv, clickoutput;
subosc = {SinOsc.ar(60)};
subenv = {Line.ar(1, 0, 0.3, doneAction: 2)};
clickosc = {LPF.ar(WhiteNoise.ar(1),1500)};
clickenv = {Line.ar(1, 0, 0.02)};
suboutput = (subosc * subenv);
clickoutput = (clickosc * clickenv);
Out.ar(out, Pan2.ar((suboutput + clickoutput) * amp, 0) / 2);
}).store;
SynthDef(\kickGabber, {|amp=0.5, out=0|
var snd;
snd = SinOsc.ar(Env([1000, 69, 60], [0.015, 0.1], \exp).ar * [-0.1, 0, 0.1].midiratio);
snd = Mix(snd);
snd = (snd * 10).tanh;
snd = (snd * 5.1).atan;
snd = BPeakEQ.ar(snd, XLine.kr(2000, 100, 0.3), 2.0, 8);
snd = snd + DelayC.ar(snd, 0.01, SinOsc.ar(4).range(0.0, 0.001));
snd = RLPF.ar(snd, 8000, 0.7);
snd = snd * EnvGen.kr(Env([0, 1, 0.7, 0.7, 0], [0.001, 0.01, 0.3, 0.02]),doneAction: 1);
snd = (snd * 0.6).clip(-1, 1);
Out.ar(out, Pan2.ar(snd * amp, \pan.kr(0), amp) / 2);
}).store;
SynthDef(\kickHard, { |basefreq = 50, envratio = 3, freqdecay = 0.02, ampdecay = 0.5, amp=0.5, out=0|
var fenv = EnvGen.kr(Env([envratio, 1], [freqdecay], \exp), 1) * basefreq,
aenv = EnvGen.kr(Env.perc(0.005, ampdecay), 1, doneAction: 2);
Out.ar(out, (SinOsc.ar(fenv, 0.5pi, aenv) * amp*1.4).distort);
}).store;
SynthDef(\kickHollow, {|amp=0.5, out=0|
var sig, env;
sig = SinOsc.ar(60,pi/2) ;
sig = sig+(Saw.ar(Line.kr(12000,40,1/123),pi/2) / 12);
sig = sig * EnvGen.kr( Env.perc(1/20,1/3), doneAction: 2);
sig = sig+((RLPF.ar((sig)+WhiteNoise.ar(1/8),Array.geom(7,90,43),0.5)).tanh/8 * EnvGen.kr( Env.perc(1/20,1/4) ))/8;
sig = (sig*1.3).tanh!2;
Out.ar( out, Pan2.ar(sig * amp,0)/2 );
}).store;
SynthDef(\kickSyn1, {|amp=0.5, out=0|
var snd;
snd = DC.ar(0);
snd = snd + (SinOsc.ar(XLine.ar(800, 400, 0.01)) * Env.perc(0.0005, 0.01).ar);
snd = snd + (BPF.ar(Hasher.ar(Sweep.ar), XLine.ar(800, 100, 0.01), 0.6) * Env.perc(0.001, 0.02).delay(0.001).ar);
snd = snd + (SinOsc.ar(XLine.ar(172, 50, 0.01)) * EnvGen.kr(Env.perc(0.0001, 0.3, 1, \lin).delay(0.005),doneAction: 2));
snd = snd.tanh;
Out.ar(out, Pan2.ar(snd * amp, \pan.kr(0), amp));
}).store;
SynthDef(\kickSyn2, {|amp=0.5, out=0|
var snd;
snd = DC.ar(0);
snd = snd + (HPF.ar(Hasher.ar(Sweep.ar), 1320) * Env.perc(0.003, 0.03).ar);
snd = snd + (SinOsc.ar(XLine.ar(750, 161, 0.02)) * Env.perc(0.0005, 0.02).ar);
snd = snd + (SinOsc.ar(XLine.ar(167, 52, 0.04)) * EnvGen.kr(Env.perc(0.0005, 0.3),doneAction: 2));
snd = snd.tanh;
Out.ar(out, Pan2.ar(snd * amp, \pan.kr(0), amp/1.5));
}).store;
SynthDef(\kickSyn3, {|amp=0.5, out=0|
var snd;
snd = DC.ar(0);
snd = snd + (SinOsc.ar(XLine.ar(1500, 800, 0.01)) * Env.perc(0.0005, 0.01, curve: \lin).ar);
snd = snd + (BPF.ar(Impulse.ar(0) * SampleRate.ir / 28000, 6100, 1.0) * 3.dbamp);
snd = snd + (BPF.ar(Hasher.ar(Sweep.ar), 300, 0.9) * Env.perc(0.001, 0.02).ar);
snd = snd + (SinOsc.ar(XLine.ar(472, 60, 0.045)) * EnvGen.kr(Env.perc(0.0001, 0.3, curve: \lin).delay(0.005),doneAction: 2));
snd = snd.tanh;
Out.ar(out, Pan2.ar(snd * amp, \pan.kr(0), amp) / 2);
}).store;
SynthDef(\clap1, {
|out = 0, amp = 0.5, pan = 0, dur = 1|
var env1, env2, snd, noise1, noise2;
// noise 1 - 4 short repeats
env1 = EnvGen.ar(
Env.new(
[0, 1, 0, 0.9, 0, 0.7, 0, 0.5, 0],
[0.001, 0.009, 0, 0.008, 0, 0.01, 0, 0.03],
[0, -3, 0, -3, 0, -3, 0, -4]
)
);
noise1 = WhiteNoise.ar(env1);
noise1 = HPF.ar(noise1, 600);
noise1 = LPF.ar(noise1, XLine.kr(7200, 4000, 0.03));
noise1 = BPF.ar(noise1, 1620, 3);
// noise 2 - 1 longer single
env2 = EnvGen.ar(Env.new([0, 1, 0], [0.02, 0.18], [0, -4]), doneAction: 2);
noise2 = WhiteNoise.ar(env2);
noise2 = HPF.ar(noise2, 1000);
noise2 = LPF.ar(noise2, 7600);
noise2 = BPF.ar(noise2, 1230, 0.7, 0.7);
snd = noise1 + noise2;
snd = snd * 2;
snd = snd.softclip;
Out.ar(out, Pan2.ar(snd,pan,amp) / 2);
}).store;
SynthDef(\clap2, {|amp=0.5,out=0|
var claposc, clapenv, clapnoise, clapoutput;
clapnoise = {BPF.ar(LPF.ar(WhiteNoise.ar(1),7500),1500)};
clapenv = {Line.ar(1, 0, 0.6, doneAction: 2)};
clapoutput = {Mix.arFill(7,
{arg i;
EnvGen.ar(
Env.new(
[0,0,1,0],
[0.01 * i,0,0.04]
)
) * clapnoise * 0.5
}
)};
Out.ar(out,Pan2.ar((clapoutput*amp) * clapenv, 0) / 2);
}).store;
SynthDef(\clapBasic, {
|out = 0, amp = 0.5, pan = 0, dur = 1|
var env1, env2, snd, noise1, noise2;
// noise 1 - 4 short repeats
env1 = EnvGen.ar(
Env.new(
[0, 1, 0, 0.9, 0, 0.7, 0, 0.5, 0],
[0.001, 0.009, 0, 0.008, 0, 0.01, 0, 0.03],
[0, -3, 0, -3, 0, -3, 0, -4]
)
);
noise1 = WhiteNoise.ar(env1);
noise1 = HPF.ar(noise1, 600);
noise1 = LPF.ar(noise1, XLine.kr(7200, 4000, 0.03));
noise1 = BPF.ar(noise1, 1620, 3);
// noise 2 - 1 longer single
env2 = EnvGen.ar(Env.new([0, 1, 0], [0.02, 0.18], [0, -4]), doneAction: 2);
noise2 = WhiteNoise.ar(env2);
noise2 = HPF.ar(noise2, 1000);
noise2 = LPF.ar(noise2, 7600);
noise2 = BPF.ar(noise2, 1230, 0.7, 0.7);
snd = noise1 + noise2;
snd = snd * 2;
snd = snd.softclip;
Out.ar(out, Pan2.ar(snd,pan,amp) / 2);
}).store;
SynthDef(\clapNoise, {|amp=0.5,out=0|
var claposc, clapenv, clapnoise, clapoutput;
clapnoise = {BPF.ar(LPF.ar(WhiteNoise.ar(1),7500),1500)};
clapenv = {EnvGen.kr(Env.perc(0.01, 0.6), doneAction: 2)};
clapoutput = {Mix.arFill(7,
{arg i;
EnvGen.ar(
Env.new(
[0,0,1,0],
[0.01 * i,0,0.04]
)
) * clapnoise * 0.5
}
)};
Out.ar(out,Pan2.ar((clapoutput*amp) * clapenv, 0) / 2);
}).store;
SynthDef(\hh2, {
|out = 0, pan = 0, amp = 0.5|
var click, clickAmp;
var noise, noiseAmp;
var snd;
// noise -> resonance -> expodec envelope
noiseAmp = EnvGen.ar(Env.perc(0.001, 0.3, curve: -8), doneAction: 2);
noise = Mix(BPF.ar(ClipNoise.ar, [4010, 4151], [0.15, 0.56], [1.0, 0.6])) * 0.7 * noiseAmp;
snd = noise;
Out.ar(out, Pan2.ar(snd, pan, amp) );
}).store;
SynthDef(\hhOpen, {|amp=0.5,out=0|
var hatosc, hatenv, hatnoise, hatoutput;
hatnoise = {LPF.ar(WhiteNoise.ar(1),6000)};
hatosc = {HPF.ar(hatnoise,2000)};
hatenv = {Line.ar(1, 0, 0.3,doneAction: 2)};
hatoutput = (hatosc * hatenv);
Out.ar(out,
Pan2.ar(hatoutput*amp, 0)
)
}).store;
SynthDef(\hhClosed, {|amp=0.5,out=0|
var hatosc, hatenv, hatnoise, hatoutput;
hatnoise = {LPF.ar(WhiteNoise.ar(1/2),6000)};
hatosc = {HPF.ar(hatnoise,2000)};
hatenv = {Line.ar(1, 0, 0.1,doneAction: 2)};
hatoutput = (hatosc * hatenv);
Out.ar(out,
Pan2.ar(hatoutput*amp, 0)
)
}).store;
SynthDef(\hihatClosed, {|amp=0.5,out=0, rel=0.125|
var hatosc, hatenv, hatnoise, hatoutput;
hatnoise = {LPF.ar(WhiteNoise.ar(1),6000)};
hatosc = {HPF.ar(hatnoise,2000)};
hatenv = EnvGen.kr(Env.perc(0.01,rel),doneAction:2);
hatoutput = (hatosc * hatenv)/2;
Out.ar(out,
Pan2.ar(hatoutput*amp, 0)
)
}).store;
SynthDef(\hihatOpen, {|amp=0.5,out=0|
var hatosc, hatenv, hatnoise, hatoutput;
hatnoise = {LPF.ar(WhiteNoise.ar(1),6000)};
hatosc = {HPF.ar(hatnoise,2000)};
hatenv = {Line.ar(1, 0, 0.3,doneAction: 2)};
hatoutput = (hatosc * hatenv);
Out.ar(out,
Pan2.ar(hatoutput*amp, 0)
)
}).store;
SynthDef(\hihatShort, {
|out = 0, pan = 0, amp = 0.5|
var click, clickAmp;
var noise, noiseAmp;
var snd;
// noise -> resonance -> expodec envelope
noiseAmp = EnvGen.ar(Env.perc(0.001, 0.3, curve: -8), doneAction: 2);
noise = Mix(BPF.ar(ClipNoise.ar, [4010, 4151], [0.15, 0.56], [1.0, 0.6])) * 0.7 * noiseAmp;
snd = noise;
Out.ar(out, Pan2.ar(snd, pan, amp) );
}).store;
SynthDef(\snareBass, {|amp=0.5,out=0|
var drumosc, filterenv, volenv, drumoutput, snaposc, snapenv, fulloutput;
drumosc = {((Pulse.ar(100)+WhiteNoise.ar)*3).tanh};
filterenv = {Line.ar(1, 0, 0.2, doneAction: 2)};
volenv = {EnvGen.kr(Env.perc(0.01,0.6), doneAction: 2)};
drumoutput = {LPF.ar(drumosc,(filterenv *1000) + 30)};
snaposc = {BPF.ar(HPF.ar(WhiteNoise.ar(1),500),1500)};
snapenv = {Line.ar(1, 0, 0.2, doneAction: 2)};
fulloutput = (drumoutput * volenv) + (snaposc * snapenv);
//fulloutput = (drumoutput * volenv);
Out.ar(out,Pan2.ar(fulloutput*(amp/3), 0));
}).store;
SynthDef(\snareDry, {
|out = 0, pan = 0, amp = 1|
var pop, popAmp, popFreq;
var noise, noiseAmp;
var snd;
// pop makes a click coming from very high frequencies
// slowing down a little and stopping in mid-to-low
popFreq = EnvGen.ar(Env([3261, 410, 160], [0.005, 0.01], curve: \exp));
popAmp = EnvGen.ar(Env.perc(0.001, 0.11)) * 0.7;
pop = SinOsc.ar(popFreq) * popAmp;
// bandpass-filtered white noise
noiseAmp = EnvGen.ar(Env.perc(0.001, 0.15), doneAction: 2);
noise = BPF.ar(WhiteNoise.ar, 810, 1.6) * noiseAmp;
snd = (pop + noise) * 1.3;
Out.ar(out, Pan2.ar(snd, pan, (amp/3)));
}).store;
SynthDef(\snareHollow, {arg out = 0, amp = 0.1, sinfreq = 180, att = 0.01, rel = 0.2, ffreq = 2000, pan = 0;
var env, snd1, snd2, sum;
env = Env.perc(att, rel, amp).kr(doneAction: 2);
snd1 = HPF.ar(
in: WhiteNoise.ar,
freq: ffreq,
mul: env
);
snd2 = SinOsc.ar(freq: sinfreq, mul: env);
sum = snd1 + snd2;
Out.ar(out, Pan2.ar(sum, pan));
}).store;
SynthDef(\snareNeuro, {
var snd;
// a percussive click to give it some attack
snd = LPF.ar(HPF.ar(WhiteNoise.ar, 300), 8000) * Env.linen(0.001, 0.01, 0.001).ar;
// sine sweep body. very important!
snd = snd + (SinOsc.ar(Env([400, 196, 160], [0.04, 0.2], \exp).ar) * Env.perc(0.04, 0.2).ar * 6.dbamp).tanh;
// sound of snare coils rattling
snd = snd + (HPF.ar(BPeakEQ.ar(WhiteNoise.ar, 4000, 0.5, 3), 300) * Env.perc(0.05, 0.2).delay(0.01).ar(2) * -3.dbamp);
// another sound sweep to improve the attack, optional
snd = snd + (SinOsc.ar(XLine.kr(3000, 1500, 0.01)) * Env.perc(0.001, 0.02).ar);
// distortion helps glue everything together and acts as a compressor
snd = (snd * 1.4).tanh/3;
snd = Pan2.ar(snd, \pan.kr(0), \amp.kr(0.1));
Out.ar(\out.kr(0), snd);
}).store;
// adapted from a post by Neil Cosgrove (other three are original)
SynthDef(\clapElectro, {
|out = 0, amp = 0.5, pan = 0, dur = 1|
var env1, env2, snd, noise1, noise2;
// noise 1 - 4 short repeats
env1 = EnvGen.ar(
Env.new(
[0, 1, 0, 0.9, 0, 0.7, 0, 0.5, 0],
[0.001, 0.009, 0, 0.008, 0, 0.01, 0, 0.03],
[0, -3, 0, -3, 0, -3, 0, -4]
)
);
noise1 = WhiteNoise.ar(env1);
noise1 = HPF.ar(noise1, 600);
noise1 = LPF.ar(noise1, XLine.kr(7200, 4000, 0.03));
noise1 = BPF.ar(noise1, 1620, 3);
// noise 2 - 1 longer single
env2 = EnvGen.ar(Env.new([0, 1, 0], [0.02, 0.18], [0, -4]), doneAction:2);
noise2 = WhiteNoise.ar(env2);
noise2 = HPF.ar(noise2, 1000);
noise2 = LPF.ar(noise2, 7600);
noise2 = BPF.ar(noise2, 1230, 0.7, 0.7);
snd = noise1 + noise2;
snd = snd * 2;
snd = snd.softclip;
Out.ar(out, Pan2.ar(snd,pan,amp));
}).store;
SynthDef(\kickElectro, {
|out = 0, pan = 0, amp = 0.3|
var body, bodyFreq, bodyAmp;
var pop, popFreq, popAmp;
var click, clickAmp;
var snd;
// body starts midrange, quickly drops down to low freqs, and trails off
bodyFreq = EnvGen.ar(Env([261, 120, 51], [0.035, 0.08], curve: \exp));
bodyAmp = EnvGen.ar(Env.linen(0.005, 0.1, 0.3), doneAction: 2);
body = SinOsc.ar(bodyFreq) * bodyAmp;
// pop sweeps over the midrange
popFreq = XLine.kr(750, 261, 0.02);
popAmp = EnvGen.ar(Env.linen(0.001, 0.02, 0.001)) * 0.15;
pop = SinOsc.ar(popFreq) * popAmp;
// click is spectrally rich, covering the high-freq range
// you can use Formant, FM, noise, whatever
clickAmp = EnvGen.ar(Env.perc(0.001, 0.01)) * 0.15;
click = LPF.ar(Formant.ar(910, 4760, 2110), 3140) * clickAmp;
snd = body + pop + click;
snd = snd.tanh;
Out.ar(out, Pan2.ar(snd, pan, amp));
}).store;
SynthDef(\snareElectro, {
|out = 0, pan = 0, amp = 0.3|
var pop, popAmp, popFreq;
var noise, noiseAmp;
var snd;
// pop makes a click coming from very high frequencies
// slowing down a little and stopping in mid-to-low
popFreq = EnvGen.ar(Env([3261, 410, 160], [0.005, 0.01], curve: \exp));
popAmp = EnvGen.ar(Env.perc(0.001, 0.11)) * 0.7;
pop = SinOsc.ar(popFreq) * popAmp;
// bandpass-filtered white noise
noiseAmp = EnvGen.ar(Env.perc(0.001, 0.15), doneAction: 2);
noise = BPF.ar(WhiteNoise.ar, 810, 1.6) * noiseAmp;
snd = (pop + noise) * 1.3;
Out.ar(out, Pan2.ar(snd, pan, amp));
}).store;
SynthDef(\reverbLPF, { arg inBus=0, outBus=0, cutoff=1500,q=0.075, room=0.4,damp=0.6, wet=0.5, lag=2;
ReplaceOut.ar(
outBus,(
(In.ar(inBus) * (1-wet))+
(RLPF.ar(
(FreeVerb.ar(In.ar(inBus),room,damp)*3).tanh, Lag2.kr(cutoff,lag), q
)*wet
)*0.75);
)
}).store;
SynthDef(\shineDestroy, {
arg
delay=1,
gain=3.3,
freq=440,
t_trig=1,
cutoff=3500,
res=10,
att=1,
decay=3,
rel=6,
inBus=0,
outBus=0,
lag=3;
var sig, env;
sig = In.ar(inBus);
sig = CompanderD.ar(sig,0.7,1.75,0.9,0.2,0.3);
sig = (sig*3.3).tanh;
sig = Mix.new(RLPF.ar(sig,cutoff,res.reciprocal*LFSaw.kr(1/8).linlin(-1,1,0.1,1)));
sig = sig * SinOsc.kr(4).linlin(-1,1,0.3,[1,1.3]);
sig = (sig*gain).tanh*0.7;
sig = sig+Mix.new(CombC.ar(sig,3,Lag2.kr(delay,lag)*[1/3,1/2,1/4],2));
sig = (sig * 1.2).tanh/2.5;
Out.ar(outBus,Pan2.ar(sig));
}).store;
SynthDef(\distortion, { arg inBus=0, gain = 3,cutoff=12000,q=0.1, wet=0.75;
Out.ar(
[0,1],
(In.ar(inBus) * (1-wet))+
(((RLPF.ar(In.ar(inBus),cutoff,q)*gain).tanh/4))
)
}).store;
SynthDef(\gateDistort, {
arg gain=3.3,
inBus=0,
outBus=0,
compGate=1.7,
lag=0.3;
var sig, env;
sig = In.ar(inBus);
sig = CompanderD.ar(sig,0.3,compGate);
sig = (sig*((Lag2.kr(gain,lag))*20)).distort.tanh;
sig = CompanderD.ar( sig, 0.4,0.6,0.7,0.01,0.3)/4;
ReplaceOut.ar(outBus,Pan2.ar(sig));
},
variants: (
overdrive: [gain: 0.1, compGate: 1.5],
hardcore: [gain: 83, compGate: 3.5],
extreme: [gain: 3330, compGate: 4.5],
crunch: [gain: 0.4, compGate: 2.9]
)
).store;
SynthDef(\simpleCompressor, {
arg
inBus=0, outBus=0, wet=1;
var sig = In.ar(inBus);
var dsp = CompanderD.ar(
sig,
0.9,
1,
0.8
);
var mix = (sig * (1-wet)) + (dsp * wet);
ReplaceOut.ar( outBus, Pan2.ar( mix, 0 ) );
}).store;
SynthDef(\hpf, { arg inBus=0, cutoff=70,q=0.3, wet=0.75;
Out.ar(
[0,1],
(In.ar(inBus) * (1-wet))+
(RHPF.ar(
In.ar(inBus), cutoff, q
)*wet);
)
}).store;
SynthDef(\lpf, { arg inBus=0,outBus=0, cutoff=777,q=0.1, wet=0.5;
ReplaceOut.ar(
outBus,
(In.ar(inBus).tanh * (1-wet))+
(RLPF.ar(
In.ar(inBus), cutoff, q
).tanh*wet);
)
}).store;
SynthDef(\moogFilter, { arg inBus=0, cutoff=1500,q=0.3, wet=0.25,lag=1;
ReplaceOut.ar(
[0,1],
(In.ar(inBus) * (1-wet))+
(((MoogFF.ar(
In.ar(inBus), Lag2.kr(cutoff,lag),3.5+(q*0.47)
)).tanh*1.5)*wet);
)
}).store;
SynthDef(\resonz, { arg inBus=0, cutoff=1500,q=0.3, wet=0.75;
Out.ar(
[0,1],
(In.ar(inBus) * (1-wet))+
(((Resonz.ar(
In.ar(inBus), cutoff, q
)*4).tanh*0.75)*wet);
)
}).store;
SynthDef(\ringMod, {
var sig, rmod, freq=700, inBus=0, outBus=0;
sig = In.ar(inBus);
rmod = sig * SinOsc.ar(freq);
Out.ar(outBus, Pan2.ar( rmod, 0 ));
}).store;
SynthDef(\pitchShift, {
arg gain=0.3,
inBus=0,
outBus=0,
compGate=1.7,
lag=1,
pitch;
var sig, env;
var targetPitch;
sig = In.ar(inBus);
// targetPitch = MouseX.kr(0,16);
//
// if( pitch.notNil, {
targetPitch=pitch;
// });
sig=PitchShift.ar(
sig,
0.1,
Lag2.kr(targetPitch*2,lag),
0, // pitch dispersion
0.004 // time dispersion
);
Out.ar(outBus,Pan2.ar(sig));
},
variants: (
overdrive: [gain: 0.1, compGate: 1.5],
hardcore: [gain: 83, compGate: 3.5],
extreme: [gain: 3330, compGate: 4.5],
crunch: [gain: 0.4, compGate: 2.9]
)
).store;
SynthDef(\delay1, { arg inBus=0, delay = 0.25, wet=0.75,lag=1.5;
Out.ar(
[0,1],
(In.ar(inBus) * (1-wet))+
((DelayN.ar(
In.ar(inBus),
8,
Lag2.kr(delay,lag)
)/2)*wet)
)
}).store;
SynthDef(\delay2, { arg inBus=0, delay=0.25, wet=0.75, lag=1.5;
var sig = In.ar(inBus);
sig = (In.ar(inBus) * (1-wet))+
(Mix.arFill(7, { CombC.ar(
sig, 8, Lag2.kr(delay,lag), 1
)/4;
})*wet);
Out.ar(
[0,1],
sig;
)
}).store;
SynthDef(\delay3, { arg inBus=0, delay = 5, wet=0.75, lag=1;
Out.ar(
[0,1],
(In.ar(inBus) * (1-wet))+
((CombC.ar(
In.ar(inBus), 8, LFNoise2.kr(0.3,0.4,0.5).range(0.1, Lag2.kr(delay,lag)), 1
))*wet);
)
}).store;
SynthDef(\reverb, {
arg
inBus=0,
outBus=0,
wet=0.5,
room=0.3,
damp=0.3,
amp=1;
var sig;
var targetRoom, targetDamp, lag=0.3;
var dsp, mix;
sig = In.ar(inBus) * 1.25;
dsp = FreeVerb.ar( sig, 1, room, damp );
mix = (sig * (1-wet)) + (dsp * wet);
ReplaceOut.ar( outBus, Pan2.ar( mix * amp.linlin(0,1,0,1.5), 0 ) );
}).store;
SynthDef(\eq, {
arg inBus=99,
outBus=99,
amp=1,
pan=0,
low=0.5,
middle=0.5,
high=0.5,
lowFreq=250,
middleFreq=1100,
highFreq=6500,
lowCut=1,
lowCutFreq=35;
var sig;
var dry;
var wet;
var dBsLow=low.max(0).min(1);
var dBsMiddle=middle.max(0).min(1);
var dBsHigh=high.max(0).min(1);
dBsLow = dBsLow.linlin(0,1,-24,24);
dBsMiddle = dBsMiddle.linlin(0,1,-24,24);
dBsHigh = dBsHigh.linlin(0,1,-24,24);
dry = In.ar(inBus) * amp;
wet = BLowShelf.ar(dry, lowFreq, 1, dBsLow);
wet = BPeakEQ.ar(wet, middleFreq, 1, dBsMiddle);
wet = BHiShelf.ar(wet, highFreq, 1, dBsHigh);
sig = (wet * (1 - lowCut)) + (HPF.ar(wet,lowCutFreq)*lowCut);
ReplaceOut.ar(outBus, Pan2.ar(sig,pan))
}).store;
SynthDef(\eq, {
arg inBus=99,
outBus=99,
amp=1,
pan=0,
low=0.5,
middle=0.5,
high=0.5,
lowFreq=250,
middleFreq=1100,
highFreq=6500,
lowCut=1,
lowCutFreq=35;
var sig;
var dry;
var wet;
var dBsLow=low.max(0).min(1);
var dBsMiddle=middle.max(0).min(1);
var dBsHigh=high.max(0).min(1);
dBsLow = dBsLow.linlin(0,1,-24,24);
dBsMiddle = dBsMiddle.linlin(0,1,-24,24);
dBsHigh = dBsHigh.linlin(0,1,-24,24);
dry = In.ar(inBus) * amp;
wet = BLowShelf.ar(dry, lowFreq, 1, dBsLow);
wet = BPeakEQ.ar(wet, middleFreq, 1, dBsMiddle);
wet = BHiShelf.ar(wet, highFreq, 1, dBsHigh);
sig = (wet * (1 - lowCut)) + (HPF.ar(wet,lowCutFreq)*lowCut);
ReplaceOut.ar(outBus, Pan2.ar(sig,pan))
}).store;
SynthDef(\fluteGlitch, {
arg
out=0,
freq=150,
gate=1;
var sig, env, brown;
brown = BrownNoise.kr;
sig = BPF.ar(WhiteNoise.ar(0.5) + SinOsc.ar(freq) * brown, freq, 10);
sig=sig.tanh;
env = EnvGen.kr(Env.adsr(0.5, 0.05, 1, 3),gate,doneAction:2);
Out.ar(out, (Pan2.ar(sig * env) / 2));
}).store;
SynthDef(\noiseLead_XY, {
arg
out=0,
freq=220,
pan=0,
amp=1;
var sig;
sig = Resonz.ar( GrayNoise.ar(0.5) + SinOsc.ar(freq, 0, 0.5) * MouseX.kr(1, 1000, 50), freq*[1,5],MouseY.kr(0.001,0.1,0.4,0.5))*100 ;
sig = Mix.new(sig.distort);
Out.ar(out, Pan2.ar( sig * amp, pan) / 2);
}).store;
SynthDef(\padCrickets, {
|freq=331.0, decayTime=0.5, amp=0.5, gate=1, out=0, done=2, pan=0, att=0.3, rel=1.3, q=0.06,legato=0.2|
var sig, env;
sig = Ringz.ar(Impulse.ar([12,16]),freq*[1/2,2,3],LFNoise0.kr([8,12],[0.2,0.05],[0.21,0.051]));
sig = sig * LFNoise2.kr(3,4,4.1);
sig = sig.tanh;
env = EnvGen.kr( Env.perc(att,rel), gate, doneAction: 2 );
sig = sig * (amp*env);
pan = SinOsc.kr(1/8);
sig = Mix.new(sig);
Out.ar( out, Pan2.ar( sig, pan ));
}).store;
SynthDef(\padShineDestroy, {
arg freq=440,
t_trig=1,
res=10,
att=1,
decay=3,
rel=6;
var sig, env, filter_env;
sig = LFPulse.ar(freq+[1,-1],[0,3]/8,LFSaw.kr(1).linlin(-1,1,0,1));
sig = sig + SinOsc.ar((freq)/2,0,0.6);
sig = sig + Saw.ar((freq)/2);
sig = (Mix.new(sig)*3.3).tanh;
filter_env = EnvGen.kr(Env.perc(att,decay/4),t_trig);
sig = Mix.new(RLPF.ar(sig,[freq*[3,4],filter_env.linlin(0,1,100,5000)],res.reciprocal*filter_env.linlin(0,1,0.1,1)));
env = EnvGen.kr(Env.adsr(att,decay,1,rel),t_trig,doneAction:2);
sig = sig * SinOsc.kr(4).linlin(-1,1,0.3,[1,1.3]);
sig = sig.tanh;
sig = sig * env;
sig = sig+Mix.new(CombC.ar(sig,3,[1/3,1/2,1/4],2));
sig = (sig * 1.2).tanh*8;
Out.ar(0,Pan2.ar(sig));
}).store;
SynthDef(\distPad1, {
|freq=440.0, decayTime=0.5, amp=0.2, temp=100, out=0, done=2, pan=0, att=1.5, sus=0.1, rel=3.5|
var sig, env;
sig = RLPF.ar(WhiteNoise.ar(LFNoise2.kr(3,3,100)).tanh,freq*4,0.05)/2;
sig = RLPF.ar(sig + ( LFSaw.ar(freq) * 33.33 ).tanh, freq*2, 0.35 ).tanh / 4;
env = EnvGen.kr( Env.perc(att,rel), doneAction: 2 );
sig = sig * env;
Out.ar( out, sig * amp );
}).store;
SynthDef(\distPad2, {
|freq=440.0, decayTime=0.5, amp=0.2, temp=100, out=0, done=2, pan=0, att=1.5, sus=0.1, rel=3.5|
var sig, env;
sig = RLPF.ar(WhiteNoise.ar(LFNoise2.kr(3,3,100)).tanh,freq*8,0.05)/2;
sig = RLPF.ar(( (sig + LFSaw.ar(freq)) * 333.33 ).tanh, freq, 0.05 );
sig = (sig*1.3).tanh / 3;
env = EnvGen.kr( Env.perc(att,rel), doneAction: 2 );
sig = sig * env;
Out.ar( out, sig * amp );
}).store;
SynthDef(\distPad3, {
|freq=440.0, decayTime=0.5, amp=0.2, temp=100, out=0, done=2, pan=0, att=1.5, sus=0.1, rel=3.5|
var sig, env;
sig = RLPF.ar(WhiteNoise.ar(LFNoise2.kr(3,3,100)).tanh,freq*4,0.05)/2;
sig = RLPF.ar(
(sig + LFSaw.ar(freq/4)),
freq, 0.05
);
sig = (sig * 1.33).tanh / 4;
env = EnvGen.kr( Env.perc(att,rel), doneAction: 2 );
sig = sig * env;
Out.ar( out, sig * amp );
}).store;

SynthDef(\chaosPerc,{|out=0,note=0,amp=0.5,modfactor=130,att=0.01,rel=1| var sig; var env; var freq; var modfreq;

freq = (note+1) * (103);

modfreq = (note+1)*modfactor;

sig = Ringz.ar( SinOsc.ar(freq*3), SinOsc.kr(SinOsc.kr(freq.reciprocal,0,modfreq,modfreq),0,modfreq*0.9,modfreq), 0.1 );
sig = RLPF.ar(sig,(1+note)*modfactor,0.1);
sig = HPF.ar((sig.abs*1.3).tanh,160);

env = EnvGen.kr(Env.perc(att,rel+note.reciprocal),doneAction:2);

sig = sig * env;
sig = sig * amp;

Out.ar(out,Pan2.ar(sig,0))

},variants:( hollow: [modfactor:100], glass: [modfactor:1200] )).store;

SynthDef(\distNote1, { |freq=440.0, decayTime=0.5, amp=0.2, gain=1, gain1=3, gain1LFORate=3, out=0, done=2, pan=0, att=0.001, sus=0.05, rel=0.6, q=0.01, q2=1,detune=0|

var sig, env;

sig = RLPF.ar(WhiteNoise.ar(LFNoise2.kr(gain1LFORate,gain1,3)).tanh,(freq+LFNoise2.kr(gain1LFORate,[3,5]*detune))*4*gain1,q);

sig = RLPF.ar(sig + ( LFSaw.ar(freq) * (3.33 * (gain*SinOsc.kr( gain1LFORate,0,0.5,0.5 ))) ).tanh, freq, q2 ).tanh / 2;

env = EnvGen.kr( Env.perc(att,rel), doneAction: 2 );

sig = sig * env;

Out.ar( out, sig * amp );

}).store;

SynthDef(\distNote2, { |freq=440.0, decayTime=0.5, amp=0.2, gain=1, out=0, done=2, pan=0, att=0.001, sus=0.05, rel=0.8, q=0.01|

var sig, env;

sig = RLPF.ar(WhiteNoise.ar(LFNoise2.kr(3,3,100)).tanh,freq*[4,6],q)/2;

sig = RLPF.ar(sig + ( LFSaw.ar(freq) * 1.33 * gain ).tanh, freq, 0.2 ).tanh / 4;

env = EnvGen.kr( Env.perc(att,rel), doneAction: 2 );

sig = sig * env;

Out.ar( out, sig * amp );

}).store;

SynthDef(\distNote3, { |freq=440.0, decayTime=0.5, amp=0.2, gain=1, out=0, done=2, pan=0, att=0.001, sus=0.05, rel=0.6, q=0.005|

var sig, env;

sig = RLPF.ar(WhiteNoise.ar(LFNoise2.kr(8,303,300)).tanh,freq*4,q)/2;

sig = RLPF.ar(sig + ( LFSaw.ar(freq) * 13.33 * gain ).tanh, freq, 0.95 ).tanh / 2;

env = EnvGen.kr( Env.perc(att,rel), doneAction: 2 );

sig = sig * env;

Out.ar( out, sig * amp );

}).store;

SynthDef(\distNote4, { |freq=440.0, decayTime=0.5, amp=0.2, out=0, done=2, pan=0, att=0.001, sus=0.05, rel=0.7|

var sig, env;

sig = Resonz.ar(WhiteNoise.ar(LFNoise2.kr(1,99,100)),freq*[1,1.5,2],SinOsc.kr(3,0,0.01,0.011))/[2,4,3] ! 2 ;

sig = RLPF.ar(sig + ( SinOsc.ar(freq,pi/2) * 3.33 ).tanh, freq*[2,4], 0.15 ).tanh / 4;

env = EnvGen.kr( Env.perc(att,rel), doneAction: 2 );

sig = sig * env;

Out.ar( out, sig * amp );

}).store;

SynthDef(\distRing, { |freq=440.0, decayTime=0.5, amp=0.2, out=0, done=2, pan=0, att=0.001, sus=0.05, rel=2.6|

var sig, env;

sig = RLPF.ar(WhiteNoise.ar(LFNoise2.kr(8,303,300)).tanh,LFNoise2.kr(6,[3,4])+freq*4,0.005)/2;

sig = RLPF.ar(sig + ( LFSaw.ar(LFNoise2.kr(6,[3,4])+freq) * 3333.33 ).tanh, LFNoise2.kr(6,[3,4])+freq, 0.95 ).tanh / 2;

env = EnvGen.kr( Env.perc(att,rel), doneAction: 2 );

sig = sig * env;

Out.ar( out, sig * amp );

}).store;

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment