Module: Musicality::SuperCollider::SynthDefs

Defined in:
lib/musicality/performance/supercollider/synthdefs.rb

Constant Summary collapse

VOLUME_CONTROL =
SynthDef.new(name: "volume_control", params: { :in => nil, :out => nil, :control => nil },
  body: "  Out.ar(out, In.ar(in) * In.kr(control));",
  credit: "James Tunnell",
)
VOLUME_CHANGE =
SynthDef.new(name: "volume_change", params: { :vol_bus => nil, :vol => nil, :dur => nil },
  body: "  Out.kr(vol_bus, Line.kr(In.kr(vol_bus), vol, dur));",
  credit: "James Tunnell",
)
KICK808 =
SynthDef.new(name: "kick808", params: { :out => 0 },
  body: "  var sig = LPF.ar(Ringz.ar(Impulse.ar(0), 60, 1), 500);\n  var cmp = CompanderD.ar(sig, -20.dbamp, 1, 0.3, 0.003, 0.08);\n\n  cmp = cmp * (10.dbamp);\n  Out.ar(out, cmp.dup);\n",
  source: "https://github.com/acarabott/roundhouse-synth-design-course-2014"
)
KICK2 =
SynthDef.new(name: "kick2", params: { :out => 0 },
  body: "  var env0, env1, env1m, sig;\n\n  env0 =  EnvGen.ar(\n    Env([0.5, 1, 0.5, 0], [0.005, 0.06, 0.26], [-4, -2, -4]), doneAction:2\n  );\n  env1 = EnvGen.ar(Env([110, 59, 29], [0.005, 0.29], [-4, -5]));\n  env1m = env1.midicps;\n\n  sig = LFPulse.ar(env1m, 0, 0.5, 1, -0.5);\n  sig = sig + WhiteNoise.ar(1);\n  sig = LPF.ar(sig, env1m * 1.5, env0);\n  sig = sig + SinOsc.ar(env1m, 0.5, env0);\n\n  sig = sig * 1.2;\n  sig = sig.clip2(1);\n\n  Out.ar(out, sig.dup * 0.1);\n",
  credit: "Reformatted for the Roundhouse Synth Design course from 08091500Acid309 by otophilia from SuperCollider/examples folder",
  source: "https://github.com/acarabott/roundhouse-synth-design-course-2014",
)
SNARE1 =
SynthDef.new(name: "snare1", params: { :out => 0, :amp => 0.8 },
  body: "  var env0, env1, env2, env1m, oscs, noise, sig;\n\n  env0 = EnvGen.ar(Env([0.5, 1, 0.5, 0], [0.005, 0.03, 0.10], [-4, -2, -4]));\n  env1 = EnvGen.ar(Env([110, 60, 49], [0.005, 0.1], [-4, -5]));\n  env1m = env1.midicps;\n  env2 = EnvGen.ar(Env([1, 0.4, 0], [0.05, 0.13], [-2, -2]), doneAction:2);\n\n  oscs = LFPulse.ar(env1m, 0, 0.5, 1, -0.5) +\n  LFPulse.ar(env1m * 1.6, 0, 0.5, 0.5, -0.25);\n  oscs = LPF.ar(oscs, env1m * 1.2, env0);\n  oscs = oscs + SinOsc.ar(env1m, 0.8, env0);\n\n  noise = WhiteNoise.ar(0.2);\n  noise = HPF.ar(noise, 200, 2);\n  noise = BPF.ar(noise, 6900, 0.6, 3) + noise;\n  noise = noise * env2;\n\n  sig = oscs + noise;\n  sig = sig.clip2(1) * amp;\n\n  Out.ar(out, sig.dup);\n",
  source: "https://github.com/acarabott/roundhouse-synth-design-course-2014",
)
CLAP1 =
SynthDef.new(name: "clap1", params: { :out => 0, :amp => 0.5 },
  body: "  var env1, env2, sig, noise1, noise2;\n\n  env1 = EnvGen.ar(Env(\n    [0, 1, 0, 1, 0, 1, 0, 1, 0],\n    [0.001, 0.013, 0, 0.01, 0, 0.01, 0, 0.03],\n    [0, -3, 0, -3, 0, -3, 0, -4]\n  ));\n  env2 = EnvGen.ar(Env([0, 1, 0], [0.02, 0.3], [0, -4]), doneAction:2);\n\n  noise1 = WhiteNoise.ar(env1);\n  noise1 = HPF.ar(noise1, 600);\n  noise1 = BPF.ar(noise1, 2000, 3);\n\n  noise2 = WhiteNoise.ar(env2);\n  noise2 = HPF.ar(noise2, 1000);\n  noise2 = BPF.ar(noise2, 1200, 0.7, 0.7);\n\n  sig = noise1 + noise2;\n  sig = sig * 2;\n  sig = sig.softclip * amp;\n\n  Out.ar(out, sig.dup);\n",
  source: "https://github.com/acarabott/roundhouse-synth-design-course-2014",
)
AXEL =
DEFAULT = SynthDef.new(name: "axel", params: { :freq => 440, :lpfreq => 12000, :rq => 0.2, :gate => 1, :out => 0 },
  body: "  var chorus = LFNoise2.ar(1).range(0.99, 1.01);\n  var saw1 = LFSaw.ar(freq * chorus, 0, 0.1);\n  var saw2 = LFSaw.ar((freq.cpsmidi - 0.1).midicps * chorus, 0, 0.1);\n  var tri = LFTri.ar(freq * chorus, 0, 0.1);\n  var mix = Mix([saw1, saw2, tri]);\n  var lpf = RLPF.ar(mix, lpfreq, rq);\n  var env = EnvGen.ar(Env.adsr(0.3, 0.6, 0.5, 0.25), gate, doneAction: 2);\n  Out.ar(out, Pan2.ar(lpf * env, 0));\n",
  credit: "By Arthur Carabott, based on Sound on Sound article",
  source: "https://github.com/acarabott/roundhouse-synth-design-course-2014",
)
BRASS =
SynthDef.new(name: "brass", params: { :freq => 220, :detune1 => 1, :detune2 => 0.5, :ffreq => 12000, :rq => 0.4,
    :pan => 0, :gate => 1, :out => 0 },
  body: "  var sig, env, fenv;\n\n  sig = Mix([freq, freq - detune1, freq + detune2, freq / 2].collect {|freq|\n    LFSaw.ar(freq);\n  });\n  fenv = EnvGen.kr(Env([ffreq, 0], [0.06], \\\\sin));\n  sig = RHPF.ar(sig, fenv, rq);\n  env = EnvGen.ar(Env.asr(0.01, 1, 0.1), gate, doneAction:2);\n\n  Out.ar(out, Pan2.ar(sig * env * 0.2, pan));\n",
  credit: "Based on Sound on Sound Synth Secrets Part 25 by Arthur Carabott",
  source: "https://github.com/acarabott/roundhouse-synth-design-course-2014",
)
RES =
SynthDef.new(name: "res", params: { :out => 0, :gate => 1, :freq => 440, :ffreq => 1500 },
  body: "  var aEnv, osc, flt;\n  aEnv = EnvGen.kr(Env.perc(0, 0.7), gate, doneAction: 2);\n  osc = Mix([Saw.ar(freq), Pulse.ar(freq / 2, 0.5)]);\n  flt = RLPF.ar(osc, ffreq, 0.1, aEnv);\n  Out.ar(out, Pan2.ar(flt, 0));\n",
  credit: "From the Kraftwerk 'Spacelab' example in SuperCollider/examples by jy",
  source: "https://github.com/acarabott/roundhouse-synth-design-course-2014",
)
POLY2 =
SynthDef.new(name: "poly2", params: { :out => 0, :gate => 1, :freq => 440 },
  body: "  var aEnv, fEnv, osc1, osc2, flt;\n  aEnv = EnvGen.kr(Env.asr(0.2, 1, 0.1), gate, doneAction: 2);\n  fEnv = EnvGen.kr(Env.asr(7, 1, 0.2), levelScale: 12000);\n  osc1 = Pulse.ar(freq * [1, 1.007], LFCub.kr(2, 0, 0.3, 0.5));\n  osc2 = Pulse.ar(freq / 2, 0.3);\n  flt = RLPF.ar(osc1 + osc2, fEnv, 0.9, aEnv);\n  Out.ar(out, flt);\n",
  credit: "From the Kraftwerk 'Spacelab' example in SuperCollider/examples by jy",
  source: "https://github.com/acarabott/roundhouse-synth-design-course-2014",
)
SOLO =
SynthDef.new(name: "solo", params: { :out => 0, :gate => 1, :freq => 440 },
  body: "  var aEnv, fEnv, osc, flt;\n  aEnv = EnvGen.kr(Env.asr(0.2, 1, 2), gate);\n  fEnv = EnvGen.kr(Env.adsr(0.4, 1.2, 0.7, 2), gate, 800);\n  osc = Saw.ar(Lag.kr(freq, 0.1) * [1, 1.005]);\n  flt = LPF.ar(osc, fEnv + 600, aEnv);\n  Out.ar(out, flt);\n",
  credit: "From the Kraftwerk 'Spacelab' example in SuperCollider/examples by jy",
  source: "https://github.com/acarabott/roundhouse-synth-design-course-2014",
)
STRING =
SynthDef.new(name: "string", params: { :out => 0, :gate => 1, :freq => 1000 },
  body: "  var aEnv, osc, flt;\n  aEnv = EnvGen.kr(Env.asr(0.2, 1, 0.5), gate, doneAction: 2);\n  osc = Saw.ar([\n    LFCub.kr(0.3, Rand(0, 1), freq * 0.003, freq),\n    freq,\n    LFCub.kr(0.7, Rand(0, 1), freq * 0.001, freq)\n  ]);\n  flt = LPF.ar(osc, 1500, aEnv);\n  Out.ar(out, flt);\n",
  credit: "From the Kraftwerk 'Spacelab' example in SuperCollider/examples by jy",
  source: "https://github.com/acarabott/roundhouse-synth-design-course-2014",
)
BASS4 =
SynthDef.new(name: "bass4", params: { :out => 0, :gate => 1, :freq => 440 },
  body: "  var aEnv, fEnv, osc, flt;\n  aEnv = EnvGen.kr(Env.asr(0, 1, 1), gate, doneAction: 2);\n  fEnv = EnvGen.kr(Env.perc(0, 3), levelScale: 6000);\n  osc = Mix([Saw.ar(freq * [1, 1.005]), Pulse.ar(freq / 2, 0.5)]);\n  flt = LPF.ar(osc, fEnv + 100, aEnv);\n  Out.ar(out, flt);\n",
  credit: "From the Kraftwerk 'Spacelab' example in SuperCollider/examples by jy",
  source: "https://github.com/acarabott/roundhouse-synth-design-course-2014",
)
ESM =
SynthDef.new(name: "esm", params: { :freq => 440, :mix => 0.5, :glide => 0, :cutoff => 20000, :rq => 1, :fdec => 0, :fint => 1,
  :vel => 1, :fvel => 1, :t_gate => 1, :vdec => 1, :vvel => 0, :od => 0, :mul => 0.1, :pan => 0, :out => 0 },
  body: "  var sig, saw, rect, fstart, fenv, vstart, venv;\n\n  freq = freq.lag(glide);\n\n  // oscillators\n  saw = LFSaw.ar(freq, 0, 1);\n  rect = LFPulse.ar(freq, 0, 0.5, 1);\n  sig = Mix([saw * (1-mix), rect * mix]);\n\n  // filter\n  fstart = vel.linlin(0, fvel, 0, fint).linexp(0, 1, cutoff, 20000);\n  fenv = EnvGen.kr(Env([fstart, fstart, cutoff], [0.001, fdec]), t_gate);\n  sig = LPF.ar(sig, fenv, rq);\n\n  // volume env\n  vstart = vel.linlin(0, vvel.max(10e-1), 0, 1);\n  venv = EnvGen.ar(Env([vstart, vstart, 0], [0.01, vdec], \\cub), t_gate);\n  sig = sig * venv;\n\n  // distortion\n  sig = sig * od.linlin(0, 1, 1, 100).clip2(mul);\n\n  Out.ar(out, Pan2.ar(sig, pan));\n",
  credit: "Emulations of two synths from Logic Pro X, by Arthur Carabott",
  source: "https://github.com/acarabott/roundhouse-synth-design-course-2014",
)
ROCKIT =
SynthDef.new(name: "rockit", params: { :freq => 440, :detune => 2, :gate => 1, :out => 0 },
  body: "  var osc1, osc2, pwm, mix, env;\n\n  // envelope for pulse width\n  pwm = EnvGen.kr(Env([0, 0.5, 0], [0.1, 0.3], ['lin', -1]));\n\n  // two oscillators, slightly detuned\n  osc1 = LFPulse.ar(freq, 0, pwm);\n  osc2 = LFPulse.ar(freq - detune, 0, pwm);\n\n  // mixdown  oscillators\n  mix = Mix([osc1, osc2]);\n\n  // amplitude envelope\n  env = EnvGen.ar(Env.asr(0.001, 1, 0.05), gate, doneAction:2);\n  mix = mix * env;\n\n  Out.ar(out, Pan2.ar(mix, 0));\n",
  credit: "From the 'Emulating Video Game Sounds' recipe, page 78 of 'Steal This Sound' by Mitchell Sigman, Adapted by Arthur Carabott",
  source: "https://github.com/acarabott/roundhouse-synth-design-course-2014",
)
SNARE2 =
SynthDef.new(name: "snare2", params: { :sfreq => 1500, :out => 0 },
  body: "  var tri = Mix([LFTri.ar([111, 175, 224])]) * 0.5;\n  var sine = Mix([SinOsc.ar([330, 180])]) * 0.5;\n  var env = EnvGen.ar(Env.perc(0.01, 0.2), doneAction:2);\n  var snares = WhiteNoise.ar(1);\n  var snareEnv = EnvGen.ar(Env.perc(0.01, 0.2));\n\n  snares = HPF.ar(snares, sfreq);\n  snares = snares * snareEnv;\n\n  Out.ar(out, Mix([tri, sine, snares]) * env);\n",
  credit: "Based on Sound on Sound Synth Secrets 35, by Arthur Carabott",
  source: "https://github.com/acarabott/roundhouse-synth-design-course-2014",
)
PROPHET5_STRINGS =
SynthDef.new(name: "prophet5pwmstrings", params: { :out => 0, :freq => 440, :amp => 0.8, 
    :gate => 1, :lforate => 3, :lfowidth => 0.1, :cutoff => 12000, :rq => 0.5, :pan => 0.0 },
  body: "  var lfo, pulse, filter, env;\n\n  lfo = LFTri.kr(lforate*[1,1.01],Rand(0,2.0)!2);\n  pulse = Pulse.ar(freq*[1,1.01],lfo*lfowidth+0.5);\n  filter = RLPF.ar(pulse,cutoff,rq);\n  env = EnvGen.ar(Env.adsr(0.01,0.0,1.0,0.5),gate,doneAction:2);\n\n  Out.ar(out,Pan2.ar(Mix(filter)*env*amp*0.5,pan));\n",
  credit: "Sound recipes from:\nMitchell Sigman (2011) Steal this Sound. Milwaukee, WI: Hal Leonard Books\nadapted for SuperCollider and elaborated by Nick Collins (http://www.sussex.ac.uk/Users/nc81/index.html)\nunder GNU GPL 3  as per SuperCollider license\n",
  source: "https://github.com/acarabott/roundhouse-synth-design-course-2014",
)
OSC_WOBBLE =
SynthDef.new(name: "singleoscillatorwobble", params: { :out => 0, :freq => 440, :amp => 0.8, 
    :gate => 1, :lforate => 10, :lfowidth => 0.5, :cutoff => 12000, :rq => 0.5, :pan => 0.0 },
  body: "  var lfo, pulse, filter, env;\n\n  lfo = LFTri.kr(lforate,Rand(0,2.0)!2);\n  pulse = Pulse.ar(freq*(1.0+(lfowidth*lfo)),0.5);\n  filter = RLPF.ar(pulse,cutoff,rq);\n  env = EnvGen.ar(Env.adsr(0.01,0.0,1.0,0.5),gate,doneAction:2);\n\n  Out.ar(out,Pan2.ar(filter*env*amp*0.5,pan));\n",
  credit: "Sound recipes from:\nMitchell Sigman (2011) Steal this Sound. Milwaukee, WI: Hal Leonard Books\nadapted for SuperCollider and elaborated by Nick Collins (http://www.sussex.ac.uk/Users/nc81/index.html)\nunder GNU GPL 3  as per SuperCollider license\n",
  source: "https://github.com/acarabott/roundhouse-synth-design-course-2014",
)
TRI_BELLS =
SynthDef.new(name:"trianglewavebells", params: { :out => 0, :freq => 440, :amp => 0.8, :gate => 1, 
    :lforate => 10, :lfowidth => 0.0, :cutoff => 100, :rq => 0.5, :pan => 0.0 },
  body: "  var osc1, osc2, vibrato, filter, env;\n\n  vibrato = SinOsc.ar(lforate,Rand(0,2.0));\n  osc1 = Saw.ar(freq*(1.0+(lfowidth*vibrato)),0.75);\n  //Saw a bit rough, possibly slighter smoother:\n  //osc1 = DPW4Saw.ar(freq*(1.0+(lfowidth*vibrato)),0.5);\n  osc2 = Mix(LFTri.ar((freq.cpsmidi+[11.9,12.1]).midicps));\n  //filter = (osc1+(osc2*0.5))*0.5; //no filter version\n  filter = RHPF.ar((osc1+(osc2*0.5))*0.5,cutoff,rq);\n  env = EnvGen.ar(Env.adsr(0.01,0.1,1.0,0.5),gate,doneAction:2);\n\n  Out.ar(out,Pan2.ar(filter*env*amp,pan));\n",
  credit: "Sound recipes from:\nMitchell Sigman (2011) Steal this Sound. Milwaukee, WI: Hal Leonard Books\nadapted for SuperCollider and elaborated by Nick Collins (http://www.sussex.ac.uk/Users/nc81/index.html)\nunder GNU GPL 3  as per SuperCollider license\n",
  source: "https://github.com/acarabott/roundhouse-synth-design-course-2014",
)
LASER_BEAM =
SynthDef.new(name: "laserbeam", params: { :out => 0, :freq => 440, :amp => 0.8, :attackTime => 0.04, :gate => 1, :pan => 0.0 },
  body: "  var osc1, freqenv, env;\n\n  freqenv = EnvGen.ar(Env([4,0.5,1,1],[attackTime,0.01,1.0]));\n\n  osc1 = LFTri.ar(freq*freqenv);\n\n  env = EnvGen.ar(Env.adsr(0.01,0.0,1.0,0.1),gate,doneAction:2);\n  //no gate, fixed envelope size\n  //env = EnvGen.ar(Env([0,1,0.5,0.0],[0.02,0.2,0.1]),doneAction:2);\n\n  Out.ar(out,Pan2.ar(osc1*env*amp,pan));\n",
  credit: "Sound recipes from:\nMitchell Sigman (2011) Steal this Sound. Milwaukee, WI: Hal Leonard Books\nadapted for SuperCollider and elaborated by Nick Collins (http://www.sussex.ac.uk/Users/nc81/index.html)\nunder GNU GPL 3  as per SuperCollider license\n",
  source: "https://github.com/acarabott/roundhouse-synth-design-course-2014",
)
MOOG_BASS =
SynthDef.new(name: "moogbass", params: { :out => 0, :freq => 440, :amp => 0.8, :gate => 1, 
    :cutoff => 1000, :gain => 2.0, :lagamount => 0.01, :pan => 0.0 },
  body: "  var osc, filter, env, filterenv;\n\n  osc = Mix(VarSaw.ar(freq.lag(lagamount)*[1.0,1.001,2.0],Rand(0.0,1.0)!3,Rand(0.5,0.75)!3,0.33));\n  filterenv = EnvGen.ar(Env.adsr(0.2,0.0,1.0,0.2),gate,doneAction:2);\n  filter =  MoogFF.ar(osc,cutoff*(1.0+(0.5*filterenv)),gain);\n  env = EnvGen.ar(Env.adsr(0.001,0.3,0.9,0.2),gate,doneAction:2);\n\n  Out.ar(out,Pan2.ar((0.7*filter+(0.3*filter.distort))*env*amp*1.5,pan));\n",
  credit: "Sound recipes from:\nMitchell Sigman (2011) Steal this Sound. Milwaukee, WI: Hal Leonard Books\nadapted for SuperCollider and elaborated by Nick Collins (http://www.sussex.ac.uk/Users/nc81/index.html)\nunder GNU GPL 3  as per SuperCollider license\n",
  source: "https://github.com/acarabott/roundhouse-synth-design-course-2014",
)
MOOG_BASS2 =
SynthDef.new(name: "moogbass2", params: { :out => 0, :freq => 440, :amp => 0.8, :gate => 1, 
    :attackTime => 0.2, :fenvamount => 0.5, :cutoff => 1000, :gain => 2.0, :pan => 0.0 },
  body: "  var osc, filter, env, filterenv;\n\n  //alternative: richer source\n  osc = Mix(Pulse.ar(freq.lag(0.05)*[1.0,1.001,2.0],Rand(0.45,0.5)!3,0.33));\n  filterenv = EnvGen.ar(Env.adsr(attackTime,0.0,1.0,0.2),gate,doneAction:2);\n  filter =  MoogFF.ar(osc,cutoff*(1.0+(fenvamount*filterenv)),gain);\n  env = EnvGen.ar(Env.adsr(0.001,0.3,0.9,0.2),gate,doneAction:2);\n\n  Out.ar(out,Pan2.ar((0.7*filter+(0.3*filter.distort))*env*amp,pan));\n",
  credit: "Sound recipes from:\nMitchell Sigman (2011) Steal this Sound. Milwaukee, WI: Hal Leonard Books\nadapted for SuperCollider and elaborated by Nick Collins (http://www.sussex.ac.uk/Users/nc81/index.html)\nunder GNU GPL 3  as per SuperCollider license\n",
  source: "https://github.com/acarabott/roundhouse-synth-design-course-2014",
)
PLASTICKY_STRINGS =
SynthDef.new(name: "plastickystrings", params: { :out => 0, :freq => 440, :amp => 0.8, :gate => 1, 
    :lforate => 5900, :lfowidth => 0.01, :cutoff => 12000, :rq => 0.5, :pan => 0.0 },
  body: "  var lfo, saw, filter, env;\n\n  lfo = LFTri.ar(lforate,Rand(0,2.0));\n  saw = Saw.ar(freq*(1.0+(lfowidth*lfo)),0.5);\n  //filter = BBandPass.ar(saw,freq,4);\n  filter = BHiPass.ar(saw,freq,rq);   //or using cutoff\n  env = EnvGen.ar(Env.adsr(0.4,0.0,1.0,1.0),gate,doneAction:2);\n\n  Out.ar(out,Pan2.ar(filter*env*amp,pan));\n",
  credit: "Sound recipes from:\nMitchell Sigman (2011) Steal this Sound. Milwaukee, WI: Hal Leonard Books\nadapted for SuperCollider and elaborated by Nick Collins (http://www.sussex.ac.uk/Users/nc81/index.html)\nunder GNU GPL 3  as per SuperCollider license\n",
  source: "https://github.com/acarabott/roundhouse-synth-design-course-2014",
)
BASS_FOUNDATION =
SynthDef.new(name: "bassfoundation", params: { :out => 0, :freq => 440, :amp => 0.8, :gate => 1, 
    :cutoff => 1000, :rq => 0.5, :pan => 0.0 },
  body: "  var osc, filter, env, filterenv;\n\n  osc = Saw.ar(freq);\n  filterenv = EnvGen.ar(Env.adsr(0.0,0.5,0.2,0.2),gate,doneAction:2);\n  filter =  RLPF.ar(osc,cutoff*filterenv+100,rq);\n  env = EnvGen.ar(Env.adsr(0.01,0.0,0.9,0.05),gate,doneAction:2);\n\n  Out.ar(out,Pan2.ar(filter*env*amp*2,pan));\n",
  credit: "Sound recipes from:\nMitchell Sigman (2011) Steal this Sound. Milwaukee, WI: Hal Leonard Books\nadapted for SuperCollider and elaborated by Nick Collins (http://www.sussex.ac.uk/Users/nc81/index.html)\nunder GNU GPL 3  as per SuperCollider license\n",
  source: "https://github.com/acarabott/roundhouse-synth-design-course-2014",
)
BASS_HIGHEND =
SynthDef.new(name: "basshighend", params: { :out => 0, :freq => 440, :amp => 0.8, :gate => 1, 
    :cutoff => 3000, :rq => 0.1, :drive => 2.0, :pan => 0.0 },
  body: "  var osc, filter, env, filterenv;\n  var ab;\n\n  //osc = Mix(VarSaw.ar(freq*[0.25,1,1.5],Rand(0.0,1.0)!3,0.9,[0.5,0.4,0.1]));\n  osc = Mix(Saw.ar(freq*[0.25,1,1.5],[0.5,0.4,0.1]));\n  //osc = Mix(DPW4Saw.ar(freq*[0.25,1,1.5],[0.5,0.4,0.1]));\n  filterenv = EnvGen.ar(Env.adsr(0.0,0.5,0.2,0.2),gate,doneAction:2);\n  filter =  RLPF.ar(osc,cutoff*filterenv+100,rq);\n\n  //distortion\n  //filter = filter.distort.softclip;\n\n  ab = abs(filter);\n  filter = (filter*(ab + drive)/(filter ** 2 + (drive - 1) * ab + 1));\n\n  //remove low end\n  filter = BLowShelf.ar(filter,300,1.0,-12);\n  //dip at 1600Hz\n  filter = BPeakEQ.ar(filter,1600,1.0,-6);\n\n  env = EnvGen.ar(Env.adsr(0.01,0.0,0.9,0.05),gate,doneAction:2);\n\n  Out.ar(out,Pan2.ar(filter*env*amp*2,pan));\n",
  credit: "Sound recipes from:\nMitchell Sigman (2011) Steal this Sound. Milwaukee, WI: Hal Leonard Books\nadapted for SuperCollider and elaborated by Nick Collins (http://www.sussex.ac.uk/Users/nc81/index.html)\nunder GNU GPL 3  as per SuperCollider license\n",
  source: "https://github.com/acarabott/roundhouse-synth-design-course-2014",
)
WINWOOD_LEAD =
SynthDef.new(name: "winwoodlead", params: { :out => 0, :freq => 440, :amp => 0.8, :gate => 1, 
    :cutoff => 8000, :rq => 0.8, :lfowidth => 0.01, :lforate => 8, :lagamount => 0.01, :pan => 0.0 },
  body: "  var pulse, filter, env, lfo;\n\n  lfo = LFTri.kr(lforate,Rand(0,2.0)!2);\n  pulse = Mix(Pulse.ar((freq.lag(lagamount))*[1,1.001]*(1.0+(lfowidth*lfo)),[0.2,0.19]))*0.5;\n  filter =  RLPF.ar(pulse,cutoff,rq);\n  //remove low end\n  filter = BLowShelf.ar(filter,351,1.0,-9);\n  env = EnvGen.ar(Env.adsr(0.01,0.0,0.9,0.05),gate,doneAction:2);\n\n  Out.ar(out,Pan2.ar(filter*env*amp,pan));\n",
  credit: "Sound recipes from:\nMitchell Sigman (2011) Steal this Sound. Milwaukee, WI: Hal Leonard Books\nadapted for SuperCollider and elaborated by Nick Collins (http://www.sussex.ac.uk/Users/nc81/index.html)\nunder GNU GPL 3  as per SuperCollider license\n",
  source: "https://github.com/acarabott/roundhouse-synth-design-course-2014",
)
SITUATION_SYNTH =
SynthDef.new(name: "situationsynth", params: { :out => 0, :freq => 440, :amp => 0.1, :gate => 1, 
    :cutoff => 8000, :rq => 0.8, :lfowidth => 0.001, :lforate => 3.3, :pan => -0.1 },
  body: "  var pulse, filter, env, filterenv, lfo;\n\n  lfo = LFTri.kr(lforate,Rand(0,2.0)!2);\n  pulse = Mix(Pulse.ar((((freq.cpsmidi)+[0,0.14])+(lfo*lfowidth)).midicps,[0.5,0.51]+(lfowidth*lfo)))*0.5;\n  filterenv = EnvGen.ar(Env([0.0,1.0,0.3,0.0],[0.005,0.57,0.1],-3));\n  filter =  RLPF.ar(pulse,100+(filterenv*cutoff),rq);\n  env = EnvGen.ar(Env.adsr(0.002,0.57,1.0,0.3),gate,doneAction:2);\n\n  Out.ar(out,Pan2.ar(filter*env*amp,pan));\n",
)
RES_SQUARES =
SynthDef.new(name: "ressquares", params: { :out => 0, :freq => 440, :amp => 0.1, :gate => 1, 
    :cutoff => 8000, :rq => 0.8, :pan => -0.1 },
  body: "  var pulse, filter, env;\n\n  //2 cents detune for second oscillator\n  pulse = Mix(Pulse.ar( ((freq.cpsmidi)+[0,0.02]).midicps, 0.5))*0.5;\n  filter =  BLowPass.ar(pulse,100+cutoff,rq);\n  env = EnvGen.ar(Env.adsr(0.002,0.1,1.0,0.2),gate,doneAction:2);\n\n  Out.ar(out,Pan2.ar(filter*env*amp,pan));\n",
  credit: "Sound recipes from:\nMitchell Sigman (2011) Steal this Sound. Milwaukee, WI: Hal Leonard Books\nadapted for SuperCollider and elaborated by Nick Collins (http://www.sussex.ac.uk/Users/nc81/index.html)\nunder GNU GPL 3  as per SuperCollider license\n",
  source: "https://github.com/acarabott/roundhouse-synth-design-course-2014",
)
EIGHTTOEIGHT_KICK =
SynthDef.new(name: "eightoeightkick", params: { :out => 0, :freq => 440, :amp => 0.1, 
    :ringTime => 10.0, :releaseTime => 1.0, :distortion => 0.1, :pan => -0.1 },
  body: "  var impulse, filter, env;\n\n  impulse = Impulse.ar(0);\n  filter = Ringz.ar(impulse,XLine.ar(freq,60,0.1),ringTime);\n  env = EnvGen.ar(Env.perc(0.001,releaseTime),doneAction:2);\n  filter = (1.0-distortion)*filter + (distortion*(filter.distort));\n\n  Out.ar(out,Pan2.ar(filter*env*amp,pan));\n",
  credit: "Sound recipes from:\nMitchell Sigman (2011) Steal this Sound. Milwaukee, WI: Hal Leonard Books\nadapted for SuperCollider and elaborated by Nick Collins (http://www.sussex.ac.uk/Users/nc81/index.html)\nunder GNU GPL 3  as per SuperCollider license\n",
  source: "https://github.com/acarabott/roundhouse-synth-design-course-2014",
)
TONEWHEEL_TWO =
SynthDef.new(name: "tonewheeltwo", params: { :out => 0, :freq => 440, :amp => 0.1, :gate => 1, 
    :lforate => 4.85, :lfowidth => 0.1, :cutoff => 5000, :rq => 0.25, :pan => 0.0 },
  body: "  //tone wheel organ emulation via two oscillators pp. 50-51\n\n  var lfo, pulse, filter, env;\n\n  lfo = LFTri.kr(lforate*[1,1.01],Rand(0,2.0)!2);\n  pulse = Pulse.ar( (((freq*[1,3]).cpsmidi) + (lfo*lfowidth)).midicps,[0.5,0.51],[0.4,0.6]);\n  env = EnvGen.ar(Env.adsr(0.0,0.0,1.0,0.1),gate,doneAction:2);\n  filter = BLowPass4.ar(pulse,cutoff,rq);\n  filter = BPeakEQ.ar(filter,500,1.0,3);\n\n  Out.ar(out,Pan2.ar(Mix(filter)*env*amp,pan));\n",
  credit: "Sound recipes from:\nMitchell Sigman (2011) Steal this Sound. Milwaukee, WI: Hal Leonard Books\nadapted for SuperCollider and elaborated by Nick Collins (http://www.sussex.ac.uk/Users/nc81/index.html)\nunder GNU GPL 3  as per SuperCollider license\n",
  source: "https://github.com/acarabott/roundhouse-synth-design-course-2014",
)
EVERYTHING_RHODES =
SynthDef.new(name: "everythingrhodes", params: { :out => 0, :freq => 440, :amp => 0.1, :gate => 1, 
    :lforate => 1.85, :lfowidth => 0.5, :cutoff => 2000, :rq => 0.2, :pan => 0.0 },
  body: "  var pulse, filter, env;\n\n  pulse = Pulse.ar(freq*[1,33.5.midiratio],[0.2,0.1],[0.7,0.3]);\n  env = EnvGen.ar(Env.adsr(0.0,1.0,0.8,3.0),gate,doneAction:2);\n  //keyboard tracking filter cutoff\n  filter = BLowPass4.ar(pulse,(cutoff*(env.squared))+200+freq,rq);\n\n  Out.ar(out,Pan2.ar(Mix(filter)*env*amp,pan));\n",
  credit: "Sound recipes from:\nMitchell Sigman (2011) Steal this Sound. Milwaukee, WI: Hal Leonard Books\nadapted for SuperCollider and elaborated by Nick Collins (http://www.sussex.ac.uk/Users/nc81/index.html)\nunder GNU GPL 3  as per SuperCollider license\n",
  source: "https://github.com/acarabott/roundhouse-synth-design-course-2014",
)
SPACE_THEREMIN =
SynthDef.new(name: "spacetheremin", params: { :out => 0, :freq => 440, :amp => 0.1, 
    :gate => 1, :lforate => 6, :lfowidth => 0.5, :cutoff => 4000, :rq => 0.25, :lagTime => 0.1, :pan => 0.0 },
  body: "  var lfo, osc, filter, env;\n\n  lfo = LFTri.kr(lforate+(LFNoise1.kr(5,0.3,0.3)),Rand(0,2.0));\n  osc = Saw.ar((freq.lag(lagTime).cpsmidi+(lfo*lfowidth)).midicps,0.5);\n  filter = BLowPass4.ar(osc,cutoff.lag(lagTime*4),rq);\n  env = EnvGen.ar(Env.adsr(0.6,0.0,1.0,0.05),gate,doneAction:2);\n\n  Out.ar(out,Pan2.ar(filter*env*amp.lag(lagTime*4),pan));\n",
  credit: "Sound recipes from:\nMitchell Sigman (2011) Steal this Sound. Milwaukee, WI: Hal Leonard Books\nadapted for SuperCollider and elaborated by Nick Collins (http://www.sussex.ac.uk/Users/nc81/index.html)\nunder GNU GPL 3  as per SuperCollider license\n",
  source: "https://github.com/acarabott/roundhouse-synth-design-course-2014",
)
FAT_VELOCITY_BASS =
SynthDef.new(name: "fatvelocitybass", params: { :out => 0, :freq => 440, :amp => 0.5, 
    :gate => 1, :cutoff => 2000, :rq => 0.15, :lagTime => 0.01, :pan => 0.0 },
  body: "  var lfo, osc, filter, env;\n\n  var basefreq =  ((freq.lag(lagTime).cpsmidi)+[0,11.95,31.03]).midicps;\n  osc = Saw.ar(basefreq,[0.5,0.4,0.1]); //+PinkNoise.ar(Line.kr(1.0,0,0.03));\n  env = EnvGen.ar(Env.adsr(0.01,1.0,1.0,0.25),gate,doneAction:2);\n  filter = BLowPass4.ar(osc,100+((amp.squared)*(freq+cutoff)),rq);\n\n  Out.ar(out,Pan2.ar(Mix(filter)*env*amp*0.8,pan));\n",
  credit: "Sound recipes from:\nMitchell Sigman (2011) Steal this Sound. Milwaukee, WI: Hal Leonard Books\nadapted for SuperCollider and elaborated by Nick Collins (http://www.sussex.ac.uk/Users/nc81/index.html)\nunder GNU GPL 3  as per SuperCollider license\n",
  source: "https://github.com/acarabott/roundhouse-synth-design-course-2014",
)
PMC_ROTALE =
SynthDef.new(name: "PMCrotale", params: { :out => 0, :freq => 261, :tone => 3, :art => 1, :amp => 0.8, :pan => 0 },
  body: "  var env, mod, sig;\n\n  env = Env.perc(0, art);\n  mod = 5 + (1/IRand(2, 6));\n\n  sig = PMOsc.ar(freq, mod*freq,\n    pmindex: EnvGen.kr(env, timeScale: art, levelScale: tone),\n    mul: EnvGen.kr(env, timeScale: art, levelScale: 0.3));\n\n  sig = Pan2.ar(sig, pan);\n\n  sig = sig * EnvGen.kr(env, timeScale: 1.3*art,\n    levelScale: Rand(0.1, 0.5), doneAction:2);\n  Out.ar(out, sig*amp);\n",
  source: "From https://github.com/brunoruviaro/SynthDefs-for-Patterns",
)
KICK3 =
SynthDef.new(name: "kick3", params: { :out => 0, :punch => 1, :amp => 1 },
  body: "  var freq = EnvGen.kr(Env([400, 66], [0.08], -3)),\n  sig = Normalizer.ar(SinOsc.ar(freq, 0.5pi, punch).distort, 1) * amp\n            * EnvGen.kr(Env([0, 1, 0.8, 0], [0.01, 0.1, 0.2]), doneAction: 2);\n    Out.ar(out, sig ! 2);\n",
  source: "From https://github.com/brunoruviaro/SynthDefs-for-Patterns",
)
RING_KICK =
SynthDef.new(name: "ringkick", params: { :out => 0, :freq => 40, :decay => 0.25, :amp => 1 },
  body: "  var snd;\n  snd = Ringz.ar(\n    in: LPF.ar(\n      in: Impulse.ar(0),\n      freq: 1000),\n    freq: freq,\n    decaytime: decay,\n    mul: 7 * amp).tanh.sin*2;\n  Out.ar(out, snd!2);\n",
  source: "From https://github.com/brunoruviaro/SynthDefs-for-Patterns",
)
BASS1 =
SynthDef.new(name: "bass1", params: { :out => 0, :freq => 440, :gate => 1, :amp => 0.5, :slideTime => 0.17, :ffreq => 1100, :width => 0.15, :detune => 1.005, :preamp => 4 },
  body: "    var sig, env;\n  env = Env.adsr(0.01, 0.3, 0.4, 0.1);\n    freq = Lag.kr(freq, slideTime);\n    sig = Mix(VarSaw.ar([freq, freq * detune], 0, width, preamp)).distort;\n  sig = sig * amp * EnvGen.kr(env, gate, doneAction: 2);\n    sig = LPF.ar(sig, ffreq);\n    Out.ar(out, sig ! 2)\n",
  source: "From https://github.com/brunoruviaro/SynthDefs-for-Patterns",
)
KIK =
SynthDef.new(name: "kik", params: { :out => 0, :basefreq => 50, :ratio => 7, :sweeptime => 0.05, :preamp => 1, :amp => 1, :decay1 => 0.3, :decay1L => 0.8, :decay2 => 0.15 },
  body: "    var fcurve = EnvGen.kr(Env([basefreq * ratio, basefreq], [sweeptime], \\exp)),\n        env = EnvGen.kr(Env([1, decay1L, 0], [decay1, decay2], -4), doneAction: 2),\n        sig = SinOsc.ar(fcurve, 0.5pi, preamp).distort * env * amp;\n    Out.ar(out, sig ! 2)\n",
  source: "From https://github.com/brunoruviaro/SynthDefs-for-Patterns",
)
KRAFTY_SNR =
SynthDef.new(name: "kraftySnr", params: { :out => 0, :amp => 1, :freq => 2000, :rq => 3, :decay => 0.3, :pan => 0 },
  body: "  var sig = PinkNoise.ar(amp),\n  env = EnvGen.kr(Env.perc(0.01, decay), doneAction: 2);\n  sig = BPF.ar(sig, freq, rq, env);\n  Out.ar(out, Pan2.ar(sig, pan))\n",
  source: "From https://github.com/brunoruviaro/SynthDefs-for-Patterns",
)
SILLY_VOICE =
SynthDef.new(name: "sillyVoice", params: { :out => 0, :freq => 220, :amp => 0.5, :vibratoSpeed => 6, :vibratoDepth => 4, :vowel => 0, :att => 0.01, :rel => 0.1, :lag => 1, :gate => 1 },
  body: "  var in, vibrato, env, va, ve, vi, vo, vu, snd;\n\n  vibrato = SinOsc.kr(vibratoSpeed, mul: vibratoDepth);\n  in = Saw.ar(Lag.kr(freq, lag) + vibrato);\n  env = EnvGen.kr(Env.asr(att, 1, rel), gate, doneAction: 2);\n\n  va = BBandPass.ar(\n    in: in,\n    freq: [ 600, 1040, 2250, 2450, 2750 ],\n    bw: [ 0.1, 0.067307692307692, 0.048888888888889, 0.048979591836735, 0.047272727272727 ],\n    mul: [ 1, 0.44668359215096, 0.35481338923358, 0.35481338923358, 0.1 ]);\n\n  ve = BBandPass.ar(\n    in: in,\n    freq: [ 400, 1620, 2400, 2800, 3100 ] ,\n    bw: [ 0.1, 0.049382716049383, 0.041666666666667, 0.042857142857143, 0.038709677419355 ],\n    mul: [ 1, 0.25118864315096, 0.35481338923358, 0.25118864315096, 0.12589254117942 ]);\n\n  vi = BBandPass.ar(\n    in: in,\n    freq: [ 250, 1750, 2600, 3050, 3340 ] ,\n    bw: [ 0.24, 0.051428571428571, 0.038461538461538, 0.039344262295082, 0.035928143712575 ],\n    mul: [ 1, 0.031622776601684, 0.15848931924611, 0.079432823472428, 0.03981071705535 ] );\n\n  vo = BBandPass.ar(\n    in: in,\n    freq:[ 400, 750, 2400, 2600, 2900 ] ,\n    bw: [ 0.1, 0.10666666666667, 0.041666666666667, 0.046153846153846, 0.041379310344828 ],\n    mul: [ 1, 0.28183829312645, 0.089125093813375, 0.1, 0.01 ]);\n\n  vu = BBandPass.ar(\n    in: in,\n    freq: [ 350, 600, 2400, 2675, 2950 ],\n    bw: [ 0.11428571428571, 0.13333333333333, 0.041666666666667, 0.044859813084112, 0.040677966101695 ],\n    mul: [ 1, 0.1, 0.025118864315096, 0.03981071705535, 0.015848931924611 ]);\n\n  snd = SelectX.ar(Lag.kr(vowel, lag), [va, ve, vi, vo, vu]);\n  snd = Mix.new(snd);\n  Out.ar(out, snd!2 * env * amp);\n",
  source: "From https://github.com/brunoruviaro/SynthDefs-for-Patterns",
)
PLUCKING =
SynthDef.new(name: "plucking", params: { :out => 0, :amp => 0.1, :freq => 440, :decay => 5, :coef => 0.1 },
  body: "var env, snd;\nenv = EnvGen.kr(Env.linen(0, decay, 0), doneAction: 2);\nsnd = Pluck.ar(\n        in: WhiteNoise.ar(amp),\n        trig: Impulse.kr(0),\n\n        maxdelaytime: 0.1,\n        delaytime: freq.reciprocal,\n        decaytime: decay,\n        coef: coef);\n    Out.ar(out, [snd, snd]);\n",
  source: "From https://github.com/brunoruviaro/SynthDefs-for-Patterns",
)
TRIG_DEMO =
SynthDef.new(name: "trig_demo", params: { :out => 0, :freq => 440, :gate => 1, :t_trig => 1 },
  body: "    var env, sig;\n  env = Decay2.kr(t_trig, 0.01, 0.1);\n    sig = SinOsc.ar(freq, 0, env);\n  sig = sig * Linen.kr(gate, 0.01, 0.1, 0.1, doneAction: 2);\n    Out.ar(out, sig ! 2)\n",
  source: "From https://github.com/brunoruviaro/SynthDefs-for-Patterns",
)
SINE_WLFO =
SynthDef.new(name: "sineWlfo", params: { :out => 0, :rate => 0.5, :freqlo => 150, :freqhi => 300, :amp => 0.1 },
  body: "  var sig, lfo, rms;\n  lfo = SinOsc.kr(rate).range(freqlo, freqhi);\n  sig = SinOsc.ar(lfo);\n  sig = sig*amp.dbamp;\n  Out.ar(out, sig)\n",
  source: "From https://github.com/elosine/synthdefs",
)
NOISE_BURST =
SynthDef.new(name: "noiseBurst", params: { :out => 0, :rate => 1.0, :atk => 0.03, :decay => 0.75, :amp => 0 },
  body: "    var sig;\n    sig = PinkNoise.ar(0.5) * Decay2.ar( Impulse.ar(rate), atk, decay );\n    sig = sig*amp.dbamp;\n    Out.ar(out, sig)\n",
  source: "From https://github.com/elosine/synthdefs",
)
DRUM_KICK =
SynthDef.new(name: "drum_kick", params: { :out => 0, :freq => 440, :gate => 1, :amp => 0.8, :source => nil,:pan => 0.0 },
  body: "  var x1, x2, x3;\n\n  x1 = SinOsc.ar(EnvGen.kr(Env.perc(0.0001, 1.5, 1, -200), gate, 1000, 45, doneAction:2), 1, 1);\n  x2 = ((BPF.ar([GrayNoise.ar(6),GrayNoise.ar(6)],EnvGen.kr(Env.perc(0.001, 0.3, 1, -200), gate, 6000, 70), 1.5)).distort * Line.kr(0.3,0,0.1));\n  x3 = EnvGen.kr(Env.perc(0.0001, 0.09, amp, 8));\n  source = Pan2.ar(x1 + x2 * x3, 0);\n  Out.ar(out, source);\n",
  source: "https://github.com/willieavendano/SC-SynthDefs/blob/master/DrumMachines",
)
CHORD_BASS =
SynthDef.new(name: "chord_bass", params: { :out => 0, :amp => 0.5, :sustain => 0.1, :freq => 90, :filtfreq1 => 7000, :filtfreq2 => 1000, :releaseTime => 0.5, :reverb => 0.1,:rq => 0.99 },
  body: "  var env, sound;\n  env=EnvGen.ar(Env.perc(releaseTime:releaseTime),doneAction:2);\n  sound=FreeVerb.ar(RLPF.ar(LFSaw.ar(freq,0,amp),Line.kr(filtfreq1, filtfreq2,0.1),rq), reverb, 0.2, 0.5);\n  Out.ar(out,Pan2.ar(sound*env, 0.0))\n",
  source: "https://github.com/willieavendano/SC-SynthDefs/blob/master/DrumMachines",
)
MY_BASS =
SynthDef.new(name: "my_bass", params: { :out => 0, :amp => 1, :sustain => 0.3, :freq => 90, :filtfreq1 => 7000, :filtfreq2 => 1000, :releaseTime => 0.5, :reverb => 0.3, :rq => 0.99 },
  body: "  var env, sound;\n  env=EnvGen.ar(Env.perc(releaseTime:releaseTime),doneAction:2);\n  sound=FreeVerb.ar(RLPF.ar(LFTri.ar(freq,0,amp*2),Line.kr(filtfreq1, filtfreq2,0.1),rq) ,reverb, 0.2 ,0.5);\n  Out.ar(out,Pan2.ar(sound*env, 0.0))\n",
  source: "https://github.com/willieavendano/SC-SynthDefs/blob/master/DrumMachines",
)
SOS_SNARE =
SynthDef.new(name: "SOSsnare", params: { :out => 0, :decay => 0.12, :drum_mode_level => 0.25, :snare_level => 40, :snare_tightness => 3000, :freq => 405, :amp => 0.8 },
  body: "  var drum_mode_sin_1, drum_mode_sin_2, drum_mode_pmosc, drum_mode_mix,\ndrum_mode_env;\n  var snare_noise, snare_brf_1, snare_brf_2, snare_brf_3, snare_brf_4,\nsnare_reson;\n  var snare_env;\n  var snare_drum_mix;\n\n  drum_mode_env = EnvGen.ar(Env.perc(0.005, decay), 1.0, doneAction: 2);\n  drum_mode_sin_1 = SinOsc.ar(freq*0.53, 0, drum_mode_env * 0.5);\n  drum_mode_sin_2 = SinOsc.ar(freq, 0, drum_mode_env * 0.5);\n  drum_mode_pmosc = PMOsc.ar( Saw.ar(freq*0.85), 184, 0.5/1.3, mul: drum_mode_env*5, add: 0);\n  drum_mode_mix = Mix.new([drum_mode_sin_1, drum_mode_sin_2, drum_mode_pmosc]) * drum_mode_level;\n\n  // choose either noise source below\n  //  snare_noise = Crackle.ar(2.01, 1);\n  snare_noise = LFNoise0.ar(20000, 0.1);\n  snare_env = EnvGen.ar(Env.perc(0.005, decay, curve:-5), 1.0, doneAction: 2);\n  snare_brf_1 = BRF.ar(in: snare_noise, freq: 8000, mul: 0.5, rq: 0.1);\n  snare_brf_2 = BRF.ar(in: snare_brf_1, freq: 5000, mul: 0.5, rq: 0.1);\n  snare_brf_3 = BRF.ar(in: snare_brf_2, freq: 3600, mul: 0.5, rq: 0.1);\n  snare_brf_4 = BRF.ar(in: snare_brf_3, freq: 2000, mul: snare_env, rq: 0.0001);\n  snare_reson = Resonz.ar(snare_brf_4, snare_tightness, mul: snare_level) ;\n  snare_drum_mix = Mix.new([drum_mode_mix, snare_reson]) * 5 * amp;\n  Out.ar(out, [snare_drum_mix, snare_drum_mix])\n",
  credit: "recipe basically from Gordon Reid
http://www.soundonsound.com/sos/Mar02/articles/synthsecrets0302.asp
programmed by Renick Bell, renick_at_gmail.com",
  source: "https://github.com/willieavendano/SC-SynthDefs/blob/master/DrumMachines",
)
CLOSED_HAT =
SynthDef.new(name: "closedhat", params: { :out => 0 },
  body: "  var hatosc, hatenv, hatnoise, hatoutput;\n\n  hatnoise = {LPF.ar(WhiteNoise.ar(1),8000)};\n\n  hatosc = {HPF.ar(hatnoise,2400)};\n  hatenv = {Line.ar(1, 0, 0.1)};\n\n  hatoutput = (0.5 * hatosc * hatenv);\n\n  Out.ar(out, Pan2.ar(hatoutput, 0));\n",
  source: "https://github.com/willieavendano/SC-SynthDefs/blob/master/DrumMachines",
)
ACID_OTO_309 =
SynthDef.new(name: "acid_oto309", params: { :out => 0, :gate => 1, :freq => 440, :amp => 0.1, :pan => 0 },
  body: "  var env1, env2, son, pitch;\n  pitch = freq.cpsmidi;\n  pitch = Lag.kr(pitch, 0.12 * (1-Trig.kr(gate, 0.001)) * gate);\n  env1 = EnvGen.ar(Env.new([0, 1.0, 0, 0], [0.001, 2.0, 0.04], [0, -4, -4], 2), gate, amp);\n  env2 = EnvGen.ar(Env.adsr(0.001, 0.8, 0, 0.8, 70, -4), gate);\n  son = LFPulse.ar(pitch.midicps, 0.0, 0.51, 2, -1);\n\n  son = RLPF.ar(son, (pitch + env2).midicps, 0.3);\n  son = son * env1;\n\n  Out.ar(out, Pan2.ar(son, pan));\n",
  credit: "from 08091500Acid309 by_otophilia",
  source: "https://github.com/supercollider-quarks/SynthDefPool",
)
APAD_MH =
SynthDef.new(name: "apad_mh", params: { :freq => 880, :amp => 0.5, :attack => 0.4, :decay => 0.5, :sustain => 0.8, :release => 1.0, :gate => 1, :out => 0 },
  body: "  var env,sig,mod1,mod2,mod3;\n  env=EnvGen.kr(Env.adsr(attack,decay,sustain,release),gate,levelScale:amp,doneAction:2);\n  mod1=SinOsc.kr(6).range(freq*0.99,freq*1.01);\n  mod2=LFNoise2.kr(1).range(0.2,1);\n  mod3=SinOsc.kr(rrand(4.0,6.0)).range(0.5,1);\n  sig=SinOsc.ar([freq,mod1],0,env).distort;\n  sig=sig*mod2*mod3;\n  Out.ar(out,sig);\n",
  credit: "A simple sustained sound with vibrato --Mike Hairston",
  source: "https://github.com/supercollider-quarks/SynthDefPool",
)
CHEAP_PIANO =
SynthDef.new(name: "cheappiano", params: { :out => 0, :freq => 440, :amp => 1, :dur => 1, :gate => 1, :pan => 0 },
  body: "  var sig, in, n = 6, max = 0.04, min = 0.01, delay, pitch, detune, hammer;\n  freq = freq.cpsmidi;\n  hammer = Decay2.ar(Impulse.ar(0.001), 0.008, 0.04, LFNoise2.ar([2000,4000].asSpec.map(amp), 0.25));\n  sig = Mix.ar(Array.fill(3, { arg i;\n      detune = #[-0.04, 0, 0.03].at(i);\n      delay = (1/(freq + detune).midicps);\n      CombL.ar(hammer, delay, delay, 50 * amp)\n    }) );\n\n  sig = HPF.ar(sig,50) * EnvGen.ar(Env.perc(0.0001,dur, amp * 4, -1), gate: gate, doneAction:2);\n  Out.ar(out, Pan2.ar(sig, pan));\n",
  credit: "based on something posted 2008-06-17 by jeff, based on an old example by james mcc",
  source: "https://github.com/supercollider-quarks/SynthDefPool",
)
CLAP_OTO_309 =
SynthDef.new(name: "clap_oto309", params: { :out => 0, :amp => 0.6, :pan => 0 },
  body: "  var env1, env2, son, noise1, noise2;\n\n  env1 = EnvGen.ar(Env.new([0, 1, 0, 1, 0, 1, 0, 1, 0], [0.001, 0.013, 0, 0.01, 0, 0.01, 0, 0.03], [0, -3, 0, -3, 0, -3, 0, -4]));\n  env2 = EnvGen.ar(Env.new([0, 1, 0], [0.02, 0.3], [0, -4]), doneAction:2);\n\n  noise1 = WhiteNoise.ar(env1);\n  noise1 = HPF.ar(noise1, 600);\n  noise1 = BPF.ar(noise1, 2000, 3);\n\n  noise2 = WhiteNoise.ar(env2);\n  noise2 = HPF.ar(noise2, 1000);\n  noise2 = BPF.ar(noise2, 1200, 0.7, 0.7);\n\n  son = noise1 + noise2;\n  son = son * 2;\n  son = son.softclip * amp;\n\n  Out.ar(out, Pan2.ar(son, pan));\n",
  credit: "from 08091500Acid309 by_otophilia",
  source: "https://github.com/supercollider-quarks/SynthDefPool",
)
CS80_LEAD_MH =
SynthDef.new(name: "cs80lead_mh", params: { :freq => 880, :amp => 0.5, :att => 0.75, :decay => 0.5, 
    :sus => 0.8, :rel => 1.0, :fatt => 0.75, :fdecay => 0.5, :fsus => 0.8, :frel => 1.0, :cutoff => 200, :pan => 0,
    :dtune => 0.002, :vibrate => 4, :vibdepth => 0.015, :gate => 1, :ratio => 1,:out => 0 },
  body: "  var env,fenv,vib,ffreq,sig;\n  cutoff=1000;\n  env=EnvGen.kr(Env.adsr(att,decay,sus,rel),gate,levelScale:1,doneAction:2);\n  fenv=EnvGen.kr(Env.adsr(fatt,fdecay,fsus,frel,curve:2),gate,levelScale:1,doneAction:2);\n  vib=SinOsc.kr(vibrate).range(-1*vibdepth,vibdepth)+1;\n  freq=Line.kr(freq,freq*ratio,5);\n  freq=freq*vib;\n  sig=Mix.ar(Saw.ar([freq,freq*(1+dtune)],mul:env*amp));\n  // keep this below nyquist!!\n  ffreq=max(fenv*freq*12,cutoff)+100;\n  sig=LPF.ar(sig,ffreq);\n  Out.ar(out, Pan2.ar(sig,pan) );\n",
  credit: "Vangelis/Blade Runner lead sound, based on tutorial by meastempo @ http://www.youtube.com/watch?v=Fne0oIEv-WI",
  source: "https://github.com/supercollider-quarks/SynthDefPool",
)
CYMBAL_808 =
SynthDef.new(name: "cymbal808", params: { :out => 0, :baseFreq => 300, :time => 250, :amp => 0.1 },
  body: "  //var freqs = [baseFreq, baseFreq*1.3420, baseFreq*1.2312, baseFreq*1.6532, baseFreq*1.9523, baseFreq*2.1523];\n  //var freqs = [78.6, 140.44, 123.87, 219.4, 787.5, 531.3];\n  //var freqs = [205.35, 254.29, 294.03, 304.41, 369.64, 522.71];\n  var freqs = [205.35, 304.41, 369.64, 522.71, 540.54, 812.21];\n  var signal, pulseEnv;\n\n  pulseEnv = EnvGen.ar(Env.new([1.0, 0.6], [time], [-0.5]), timeScale:(1/1000));\n  signal = Mix.new(LFPulse.ar(freqs * 4.09));\n  signal = (BinaryOpUGen('==', signal, 6.0) * 0.6) + (BinaryOpUGen('==', signal, 2.0) * 0.2) + (BinaryOpUGen('==', signal, 1.0) * 0.9); // XOR\n  signal = (signal * pulseEnv) + (Mix.new(LFPulse.ar(freqs, width:0.55)) * 0.9);\n  signal = RLPF.ar(signal, 7000, 0.6);\n  signal = RHPF.ar(signal, 6800, 1.5);\n  signal = RHPF.ar(signal, 6800, 1.5);\n  signal = RHPF.ar(signal, 1200, 1.5);\n  signal = signal + FreeVerb.ar(signal);\n  signal = signal * EnvGen.ar(Env.new([0, 1, 0.4, 0, 0], [2, time, 50, 500], [0, -0.5, 0, -50]), timeScale:(1/1000), doneAction:2);\n  signal = [signal, DelayN.ar(signal, 0.005, 0.005)];\n  OffsetOut.ar(out, signal*4*amp);\n",
  credit: "Published on sc-users 2007-08-25 by Ryan Brown",
  source: "https://github.com/supercollider-quarks/SynthDefPool",
)
CYMBALIC_MCLD =
SynthDef.new(name: "cymbalic_mcld", params: { :out => 0, :pan => 0, :amp => 0.1 },
  body: "  var lodriver, locutoffenv, hidriver, hicutoffenv, freqs, res, thwack;\n\n  locutoffenv = EnvGen.ar(Env.perc(0.5, 5)) * 20000 + 10;\n  lodriver = LPF.ar(WhiteNoise.ar(0.1), locutoffenv);\n\n  hicutoffenv = 10001 - (EnvGen.ar(Env.perc(1, 3)) * 10000);\n  hidriver = HPF.ar(WhiteNoise.ar(0.1), hicutoffenv);\n  hidriver = hidriver * EnvGen.ar(Env.perc(1, 2, 0.25));\n\n  thwack = EnvGen.ar(Env.perc(0.001,0.001,1));\n\n  // This bit will regenerate new freqs every time you evaluate the SynthDef!\n  freqs  = {exprand(300, 20000)}.dup(100);\n\n  res    = Ringz.ar(lodriver + hidriver + thwack, freqs).mean;\n\n  Out.ar(out, Pan2.ar(((res * 1) + (lodriver * 2) + thwack) * amp, pan));\n",
  credit: "Based on the example at http://www.mcld.co.uk/cymbalsynthesis/ published 2008 by Dan Stowell",
  source: "https://github.com/supercollider-quarks/SynthDefPool",
)
KICK_CHIRP =
SynthDef.new(name: "kick_chrp", params: { :out => 0, :amp => 1, :pan => 0 },
  body: "  // a kick made using what radio folks would call a \"chirp\"\n  var ampenv, pitchenv;\n\n  ampenv   = EnvGen.ar(Env.perc(0, 0.2, curve: 0), doneAction: 2);\n  pitchenv = EnvGen.ar(Env.perc(0, 0.1, curve: -20).exprange(0, 1000), doneAction: 0);\n\n  Out.ar(out, Pan2.ar(SinOsc.ar(pitchenv) * amp, pan));\n",
  credit: "by dan stowell. public domain",
  source: "https://github.com/supercollider-quarks/SynthDefPool",
)
KICK_OTO_309 =
SynthDef.new(name: "kick_oto309", params: { :out => 0, :amp => 0.1, :pan => 0 },
  body: "  var env0, env1, env1m, son;\n\n  env0 =  EnvGen.ar(Env.new([0.5, 1, 0.5, 0], [0.005, 0.06, 0.26], [-4, -2, -4]), doneAction:2);\n  env1 = EnvGen.ar(Env.new([110, 59, 29], [0.005, 0.29], [-4, -5]));\n  env1m = env1.midicps;\n\n  son = LFPulse.ar(env1m, 0, 0.5, 1, -0.5);\n  son = son + WhiteNoise.ar(1);\n  son = LPF.ar(son, env1m*1.5, env0);\n  son = son + SinOsc.ar(env1m, 0.5, env0);\n\n  son = son * 1.2;\n  son = son.clip2(1);\n\n  Out.ar(out, Pan2.ar(son * amp));\n",
  credit: "from 08091500Acid309 by_otophilia",
  source: "https://github.com/supercollider-quarks/SynthDefPool",
)
ONECLAP =
SynthDef.new(name: "oneclap", params: { :out => 0, :amp => 0.1, :filterfreq => 100, :rq => 0.1, :pan => 0 },
  body: "var env, signal, attack, noise, hpf1, hpf2;\n  noise = WhiteNoise.ar(1)+SinOsc.ar([filterfreq/2,filterfreq/2+4 ], pi*0.5, XLine.kr(1,0.01,4));\n  //noise = PinkNoise.ar(1)+SinOsc.ar([(filterfreq)*XLine.kr(1,0.01,3), (filterfreq+4)*XLine.kr(1,0.01,3) ], pi*0.5, XLine.kr(1,0.01,4));\n  //signal = signal * SinOsc.ar(1,0.75);\n  hpf1 = RLPF.ar(noise, filterfreq, rq);\n  hpf2 = RHPF.ar(noise, filterfreq/2, rq/4);\n  env = EnvGen.kr(Env.perc(0.003, 0.00035));\n  signal = (hpf1+hpf2) * env;\n  signal = CombC.ar(signal, 0.5, 0.03, 0.031)+CombC.ar(signal, 0.5, 0.03016, 0.06);\n  //signal = Decay2.ar(signal, 0.5);\n  signal = FreeVerb.ar(signal, 0.23, 0.15, 0.2);\n  Out.ar(out, Pan2.ar(signal * amp, pan));\n  DetectSilence.ar(signal, doneAction:2);\n",
  credit: "published on the sc-users list 2009-01-08 by thor",
  source: "https://github.com/supercollider-quarks/SynthDefPool",
)
PING_MH =
SynthDef.new(name: "ping_mh", params: { :freq => 440,:amp => 0.2,:dur => 1,:attack => 0.001,:pan => 0,:out => 0 },
  body: "    var sig,freq2;\n    freq=freq*rrand(1,1.01);\n    freq2=freq*rrand(1,1.01);\n    e=EnvGen.ar(Env.perc(attack,dur,curve:-4),doneAction:2);\n    sig=SinOsc.ar([freq,freq2],0,amp*e);\n    sig=Pan2.ar(sig,pan);\n    Out.ar(out,sig)\n",
  credit: "Your basic percussive synth instrument, a good default sound for testing patterns, etc.",
  source: "https://github.com/supercollider-quarks/SynthDefPool",
)
SNARE_OTO_309 =
SynthDef.new(name: "snare_oto309", params: { :out => 0, :amp => 0.1, :pan => 0 },
  body: "  var env0, env1, env2, env1m, oscs, noise, son;\n\n  env0 = EnvGen.ar(Env.new([0.5, 1, 0.5, 0], [0.005, 0.03, 0.10], [-4, -2, -4]));\n  env1 = EnvGen.ar(Env.new([110, 60, 49], [0.005, 0.1], [-4, -5]));\n  env1m = env1.midicps;\n  env2 = EnvGen.ar(Env.new([1, 0.4, 0], [0.05, 0.13], [-2, -2]), doneAction:2);\n\n  oscs = LFPulse.ar(env1m, 0, 0.5, 1, -0.5) + LFPulse.ar(env1m * 1.6, 0, 0.5, 0.5, -0.25);\n  oscs = LPF.ar(oscs, env1m*1.2, env0);\n  oscs = oscs + SinOsc.ar(env1m, 0.8, env0);\n\n  noise = WhiteNoise.ar(0.2);\n  noise = HPF.ar(noise, 200, 2);\n  noise = BPF.ar(noise, 6900, 0.6, 3) + noise;\n  noise = noise * env2;\n\n  son = oscs + noise;\n  son = son.clip2(1) * amp;\n\n  Out.ar(out, Pan2.ar(son, pan));\n",
  credit: "from 08091500Acid309 by_otophilia",
  source: "https://github.com/supercollider-quarks/SynthDefPool",
)
SNARE_STEIN =
SynthDef.new(name: "snare_stein", params: { :out => 0, :amp => 0.1, :pan => 0 },
  body: "  var snare, filtWhite;\n\n  filtWhite = LPF.ar(WhiteNoise.ar(1), 7040, 1);\n\n  snare = (SinOsc.ar(330,0,0.25) * EnvGen.ar(Env.perc(0.0005,0.055))) + (SinOsc.ar(185,0,0.25) * EnvGen.ar(Env.perc(0.0005,0.075))) + (filtWhite * EnvGen.ar(Env.perc(0.0005,0.2), doneAction: 2) * 0.2) + (HPF.ar(filtWhite, 523, 1) * EnvGen.ar(Env.perc(0.0005,0.183)) * 0.2);\n  Out.ar(out, Pan2.ar(snare * amp * 10, pan));\n",
  credit: "Snare written by Esben Stein, I believe",
  source: "https://github.com/supercollider-quarks/SynthDefPool",
)
SOS_BELL =
SynthDef.new(name: "sos_bell", params: { :freq => 440, :out => 0, :amp => 0.1, :pan => 0 },
  body: "  var son, strike, hum;\n\n  // Stretched harmonic series\n  son = SinOsc.ar(#[2, 3, 4.1, 5.43, 6.8, 8.21] * freq, 0,\n     #[1, 0.9, 0.8, 0.7, 0.6, 0.5] * 0.1);\n\n  son = son * EnvGen.ar(Env.new([0,1,0.3, 0.2, 0], [0, 0.3, 0.3, 0.3]));\n\n  // A bit of FM adds 'warble'\n  son = son * LFTri.ar({Rand(1.0, 1.8)}.dup(6), 1, 0.3, 0.7);\n\n  // Mix down the partials in the main sound\n  son = son.mean;\n\n  strike = SinOsc.ar(LFNoise1.ar(freq * 36, 100, freq*8), 1, 0.1) *\n      EnvGen.ar(Env.new([0,1,0.2, 0.1, 0], [0, 0.01, 0, 0.04]));\n\n  hum = SinOsc.ar([freq*1.01, freq*0.47], 0, EnvGen.ar(Env.new([0,0.05,0.05,0], [0.5,0.5,1]), doneAction:2)).mean;\n\n  Out.ar(out, Pan2.ar((son + strike + hum) * 4 * amp, pan));\n",
  credit: "by dan stowell. based on a sound-on-sound 'synth secrets' tutorial",
  source: "https://github.com/supercollider-quarks/SynthDefPool",
)
KRGN_GEN_FMDEVIL =
SynthDef.new(name: "krgn_gen_fmdevil", params: { :out => 0, :freq => 440, :amp => 1.0, :index => 3, :detune => 1.02, :gate => 1 },
  body: "  var mod1, mod2, mod3, car, idx, env;\n  env = EnvGen.ar(Env.adsr(0,0.4,0.3,0.2),gate: gate, levelScale: amp, doneAction: 2);\n  idx = EnvGen.ar(Env.adsr(0,0.8,0.0,0.8),gate: gate, levelScale: index);\n  mod1 = SinOsc.ar((freq / 12) * 2, LocalIn.ar(2), idx);\n  mod2 = SinOsc.ar((freq / 12) * 6, mod1, idx);\n  mod3 = SinOsc.ar([(freq / 12) * (9 * detune.neg), (freq / 12) * (9*detune)], mod2, idx);\n  LocalOut.ar( mod3 * 0.25);\n  car = SinOsc.ar(freq, mod3, env);\n  Out.ar(out!2,car)\n",
  source: "https://github.com/mtytel/supersongs/",
)
BOOP =
SynthDef.new(name: "boop", params: { :out => 0, :dur => 1.0, :amp => 1.0, :freq => 440 },
  body: "  var env, sig;\n  env = EnvGen.ar(Env.new([1, 0.1, 0], [0.06, dur - 0.06]), doneAction: 2);\n  sig = LFTri.ar([freq * 0.995, freq * 1.005], 0, env * amp);\n  Out.ar(out, sig ! 2);\n",
  source: "https://github.com/mtytel/supersongs/",
)
MARIO =
SynthDef.new(name: "mario", params: { :out => 0, :freq => 440, :length => 0.1, :dur => 0.2 },
  body: "  var snd, amp;\n  snd = LFPulse.ar(freq)!2;\n  amp = LFTri.ar(freq/50)!2;\n  snd = snd * EnvGen.ar(Env.linen(0.001, length * dur, 0.03), doneAction:2);\n  OffsetOut.ar(out, snd*amp);\n",
  source: "https://github.com/mtytel/supersongs/",
)
MARIO_BASS =
SynthDef.new(name: "mariobass", params: { :out => 0, :amp => 1.0, :freq => 440, :length => 0.1, :dur => 0.2 },
  body: "  var snd;\n  snd = LFTri.ar(freq)!2;\n  snd = snd * EnvGen.ar(Env.linen(0.001, length * dur, 0.03), doneAction:2);\n  OffsetOut.ar(out, snd*amp);\n",
  source: "https://github.com/mtytel/supersongs/",
)
BEAT =
SynthDef.new(name: "beat", params: { :out => 0, :amp => 1.0, :sustain => 0.1, :dur => 0.1 },
  body: "  var snd;\n  snd = BrownNoise.ar()!2;\n  snd = HPF.ar(snd, 2000);\n  snd = snd * EnvGen.ar(Env.linen(0.005, dur * sustain, 0.01), doneAction:2);\n  OffsetOut.ar(out, snd*amp);\n",
  source: "https://github.com/mtytel/supersongs/",
)
BASS2 =
SynthDef.new(name: "bass2", params: { :out => 0, :freq => 440, :gate => 1, :amp => 1.0, :slideTime => 0.17, :ffreq => 1100, :width => 0.15, :detune => 1.005, :preamp => 4, :dur => 0.2, :length => 0.2 },
  body: "  var sig,\n    env = Env.adsr(0.01, 0.3, 0.4, 0.1);\n  freq = Lag.kr(freq, slideTime);\n  sig = Mix(VarSaw.ar([freq, freq * detune], 0, width, preamp)).distort * amp\n    * EnvGen.kr(env, gate * dur * length , doneAction: 2);\n  sig = LPF.ar(sig, ffreq);\n  Out.ar(out, sig ! 2)\n",
  source: "https://github.com/mtytel/supersongs/",
)
DROPLET =
SynthDef.new(name: "droplet", params: { :amp => 0.2, :out => 0, :freq => 3000, :dur => 1, :rate => 1 },
  body: "  /**\n  * No.2 - Droplet\n  *\n  * pitch envelope-based synth\n  */\n\n  var sound,volEnv,pitchEnv, gate;\n  gate = Pulse.kr(rate);\n  pitchEnv=EnvGen.ar(Env.new([0.9,0.7,1,1],[0.06,0.05,0.89]*dur,\\exponential), gate);\n  volEnv=EnvGen.ar(Env.new([0,1,0.8,0.0],[0.2,0.05,0.75]*dur),gate);\n  sound=SinOsc.ar(freq*pitchEnv,mul:volEnv);\n  Out.ar(out, Pan2.ar(sound) * amp);\n",
  source: "https://github.com/johncburnett/Matrix",
)
PHASE_MOD =
SynthDef.new(name: "phaseMod", params: { :amp => 0.2, :out => 0, :freq => 30, :gate => 1 },
  body: "  /**\n  * No.4 - phaseMod\n  *\n  * Phase modulation\n  */\n\n  var fund, oscA, oscB, pm, env, sig;\n  fund = freq;\n  oscA = PMOsc.ar(fund, fund / 2.05, 2pi * 0.1);\n  oscB = SinOsc.ar(fund / 2.01, oscA * 2pi * 0.5);\n  pm = SinOsc.ar(fund / 2.02, oscB * 2pi * 0.8);\n  env = EnvGen.ar(Env.adsr, gate: gate);\n  sig = env * pm;\n  Out.ar(out, (amp*sig)!2);\n",
  source: "https://github.com/johncburnett/Matrix",
)
NOISE =
SynthDef.new(name: "noise", params: { :amp => 0.2, :out => 0 },
  body: "  /**\n  * No.5 - noise\n  *\n  */\n\n  var noise = HenonN.ar(SampleRate.ir/4, Rand(1,1.4), Rand(0,0.3)) * 0.2;\n  Out.ar(out, noise!2 * amp);\n",
  source: "https://github.com/johncburnett/Matrix",
)
NS_STATIC =
SynthDef.new(name: "nsStatic", params: { :amp => 0.2, :out => 0,:mix => 0.9 },
  body: "  /**\n  * No.6 - nsSTatic\n  *\n  */\n\n  var sound, sound2, stereo, dummy, dummy2;\n  dummy = Rand(0.2, 2.01);\n  //dummy2 = 0.01*Rand(0, 100);\n  dummy2 = mix;\n  sound = Crackle.ar(dummy, 0.5, 0.5);//chaosParam val ~0.95 -> ~2.05\n  sound2 = PitchShift.ar(sound, 0.2, 0.249, 0.02,2);\n  mix = sound*dummy2 + (sound2*(1.0+(-1*dummy2)));\n  stereo = Limiter.ar(Pan2.ar(mix), 0.5);\n  Out.ar(out,stereo*amp);\n",
  source: "https://github.com/johncburnett/Matrix",
)
POOM =
SynthDef.new(name: "poom", params: { :out => 0, :freq => 400, :level => 0.1 },
  body: "  var env       = Env.perc(level: level);\n  var envgen      = EnvGen.kr(env, doneAction: 2);\n  var sin       = SinOsc.ar([freq, freq + 0.1], mul: envgen);\n  var sin2      = SinOsc.ar([freq, freq + 0.1] * 17, mul: envgen / 17);\n  Out.ar(out, sin + sin2);\n",
  source: "https://github.com/philthomson/imp",
)
SINTH =
SynthDef.new(name: "sinth", params: { :out => 0, :curve => 0, :dur => 1, :freq => 400, :level => 0.1 },
  body: "  var env         = Env.perc(releaseTime: dur, level: level, curve: curve);\n  var envgen        = EnvGen.kr(env, doneAction: 2);\n  var sin         = SinOsc.ar([freq, freq + 0.1], mul: envgen);\n  var sin2        = SinOsc.ar([freq, freq + 0.1] * 2.01, mul: envgen / 8);\n  var sin3        = SinOsc.ar([freq, freq * 0.1] * 20.1, mul: envgen / 32);\n  Out.ar(out, sin + sin2 + sin3);\n",
  source: "https://github.com/philthomson/imp",
)
AEOLIAN_STRINGS =
SynthDef.new(name: "aeolian_strings", params: { :out => 0 },
  body: "  // aeolian strings\n  var sig = Mix.fill(9,{i=Dust.ar(0.4)!2;CombC.ar(i,1,Select.ar(TIRand.kr(0,7,i),(55+Scale.aeolian.degrees).collect{|x|DC.ar(1/x.midicps)}),3)});\n  Out.ar(out,sig);\n",
  source: "https://github.com/thormagnusson/sctweets",
)
BONFIRE_NIGHT =
SynthDef.new(name: "bonfire_night", params: { :out => 0 },
  body: "  // the sound of new years eve in frosty Reykjavik\n  var x=Decay;\n  var d=Dust.ar(4);\n  var sig = FreeVerb.ar(LPF.ar(x.ar(d,0.5,WhiteNoise.ar),2000)+x.ar(d,0.15,SinOsc.ar([40,47],pi,5)), 0.4,0.6,TRand.ar(0,1,d));\n  Out.ar(out, sig);\n",
  source: "https://github.com/thormagnusson/sctweets",
)
THAT_CLUB =
SynthDef.new(name: "thatclub", params: { :out => 0 },
  body: "  // the nightclub downstairs\n  var x =SinOsc;\n  var y =LFNoise0;\n  var a = y.ar(8);\n  var sig = x.ar(Pulse.ar(1)*24)+x.ar(90+(a*90))+MoogFF.ar(Saw.ar(y.ar(4,333,666)),a*XLine.ar(1,39,99,99,0,2));\n  Out.ar(out, sig!2/3);\n",
  source: "https://github.com/thormagnusson/sctweets",
)
DRUNK_DRUMMER =
SynthDef.new(name: "drunk_drummer", params: { :out => 0 },
  body: "  var i=Dust.ar(4), a=0.5, b=5e-3, q=Decay2, p=PulseDivider, n=WhiteNoise.ar;\n  var sig = (SinOsc.ar(80)*q.ar(p.ar(i,2),a,b)+(n*q.ar(p.ar(i,4),b,a)));\n  Out.ar(out,sig!2);\n",
  source: "https://github.com/thormagnusson/sctweets",
)
EIGHTBIT_FUNK =
SynthDef.new(name: "eightbit_funk", params: { :out => 0 },
  body: "  // 8-bit funk\n  var o=LFSaw.ar(LFSaw.kr(0.0005,-1).range(0.5,1)).abs*40;\n  var sig = (o*15&(o>>5))|(o*100&(o>>1)&(o<<2))|(o*1e3&(o>>[1,2])&(LFSaw.kr(0.01).abs*5).ceil);\n  Out.ar(out,sig!2);\n",
  source: "https://github.com/thormagnusson/sctweets",
)
TWO_TIMPANIS =
SynthDef.new(name: "two_timpanis", params: { :out => 0 },
  body: "  var x=LFNoise0.ar(1)>0;\n  var sig = SinOsc.ar(Spring.ar(x,4,3e-05)*(70.rand+190)+(30.rand+90))*EnvGen.kr(Env.perc(0.001,5),x);\n  Out.ar(out, sig!2);\n",
  source: "https://github.com/thormagnusson/sctweets",
)
TWO_TIMPANIS2 =
SynthDef.new(name: "two_timpanis2", params: { :out => 0 },
  body: "  var x=LFNoise0.ar(1)>0;\n  var sig = SinOsc.ar(Spring.ar(x,4,3e-05)*(70.rand+190)+LFNoise2.ar(1).range(90,120))*EnvGen.kr(Env.perc(0.001,5),x);\n  Out.ar(out, sig!2);\n",
  source: "https://github.com/thormagnusson/sctweets",
)
FM_TOM =
SynthDef.new(name: "fmtom", params: { :out => 0, :freq => 200, :gate => 1, :vol => 0.5 },
  body: "  var tom = PMOsc.ar(freq, 280, Line.kr(0.0, 12, 1), mul: EnvGen.ar(Env.adsr(0.003,0.2,0,0), gate, levelScale: 0.3, doneAction: 2));\n  Out.ar(out, tom * vol ! 2);\n",
  source: "https://github.com/mattvears/supercollider-stuff",
)
BASS_303 =
SynthDef.new(name: "bass303", params: { :out => 0, :freq => 440, :gate => 1, :lpf => 1000, :res => 0.8, :width => 0.05, :amp => 1, :vol => 0.5 },
  body: "  var sig, env;\n  var sig2, env2;\n\n  // ghetto 303\n  env = Env.adsr(0.05, 2, 0, 0.3, 0.8, -12);\n  sig = LFPulse.ar(freq, width: width) + Pulse.ar(freq, width: 0.9);\n  sig = sig * EnvGen.ar(env, gate, amp, doneAction: 2);\n  sig = RLPF.ar(sig, lpf, res);\n\n  env2 = Env.adsr(0.03, 2, 0, 0.3, 0.8, -13);\n  sig2 = LFPulse.ar(freq, width: width)  + Pulse.ar(freq, width: 0.9);\n  sig2 = FreqShift.ar(sig2, 3);\n  sig2 = sig2 * EnvGen.ar(env2, gate, amp, doneAction: 2);\n  sig2 = RLPF.ar(sig2, lpf, res);\n\n\n  Out.ar(out, [sig * vol, sig2 * vol]);\n\n",
  source: "https://github.com/mattvears/supercollider-stuff",
)
SNARE_909 =

Out.ar(out, Mix.new([sig1, sig2, sig3]) ! 2); SCLANG

source: "https://github.com/mattvears/supercollider-stuff",

)

SynthDef.new(name: "snare909", params: { :out => 0, :lpFreq => 1000, :vol => 1, :gate => 1 },
  body: "  var sig1, sig2;\n  var triEnv;\n  var shifted1;\n  var shifted2;\n  var sinEnv;\n  var sin1, sin2;\n  var mixed;\n  var sig3;\n  var noiseEnv;\n\n  // tri -> final mixer\n  triEnv = Env.adsr(0, 0.4, 0, 0, curve: -4,  peakLevel: 0.5);\n  sig1 = LFTri.ar(111, 0, 0.5) * EnvGen.kr(triEnv, gate: gate, doneAction: 2);\n  shifted1 = FreqShift.ar(sig1, 175);\n  shifted2 = FreqShift.ar(sig1, 224);\n  sig1 = Mix.new([shifted1, shifted2]);\n\n  // sines -> final mixer\n  sin1 = SinOsc.ar(330, mul: 0.2);\n  sin2 = SinOsc.ar(180, mul: 0.2);\n  sinEnv = Env.adsr(0, 0.2, 0, 0);\n  sig2 = Mix.new([sin1, sin2]) * EnvGen.kr(sinEnv, gate: gate, doneAction: 2);\n\n  // noise -> final mixer\n  noiseEnv = Env.adsr(0, 0.3, 0, 0);\n  sig3 = LPF.ar(WhiteNoise.ar() * EnvGen.kr(noiseEnv, gate: gate, doneAction: 2), 1000);\n  sig3 = HPF.ar(sig3, 600);\n\n  mixed = Mix.new([sig1, sig2, sig3]);\n  mixed = LPF.ar(mixed, lpFreq) * vol;\n  Out.ar(out, mixed  ! 2);\n",
  source: "https://github.com/mattvears/supercollider-stuff",
)
HOOVER =
SynthDef.new(name: "hoover", params: { :freq => 220, :amp => 0.1, :lgu => 0.1, :lgd => 1, :gate => 1 },
  body: "var pwm, mix, env;\n\nfreq = freq.cpsmidi.lag(lgu,lgd).midicps;\nfreq = SinOsc.kr( { 2.9 rrand: 3.1 }!3, {2pi.rand}!3 ).exprange( 0.995, 1.005 ) * freq;\npwm = SinOsc.kr( {2.0 rrand: 4.0}!3 ).range(0.125,0.875);\n\n// the saw/pulses\nmix = (LFSaw.ar( freq * [0.25,0.5,1], 1 ).range(0,1)\n    * (1 - LFPulse.ar(freq * [0.5,1,2], 0, pwm))).sum * 0.1;\n\n// the bass\nmix = mix + LFPar.ar( freq * 0.25, 0, 0.1 );\n\n// eq for extra sharpness\nmix = BPeakEQ.ar( mix, 6000, 1, 3 );\nmix = BPeakEQ.ar( mix, 3500, 1, 6 );\n\n// kind of chorus\nmix = mix + CombC.ar( mix.dup, 1/200,\n      SinOsc.kr( 3, [0.5pi, 1.5pi] ).range(1/300,1/200),\n    0.0 ) * 0.5;\n\nenv = EnvGen.kr( Env.asr, gate );\n\nOut.ar( 0, mix * env * amp );\n",
  source: "https://github.com/rukano/scprivatepool",
)