{
   "description" : "Breakbeat made of out FM-synthesized drums. A little too saturated but nice and punchy.",
   "ancestor_list" : [],
   "name" : "Punchy break",
   "author" : "badnumbersmusic",
   "code" : "s.boot;\r\nTempoClock.default.tempo = 2;\r\n\r\n(\r\nSynthDef(\\kick,\r\n\t{\r\n\t\t|gate=1,t_trig=1,out=0,pan=0,amp=0.1,boost=4,attenuation=1,fmlevel = 0.5, noiselevel = 0.5, thumplevel=0.5,revlevel=0.1,revroomsize=0.8,revdamping=0.5,\r\n\t\tfmenvatttime=0.001,fmenvattcurve=0,fmenvdectime=0.1,fmenvdeccurve=0.3,\r\n\t\tnoiseenvatttime=0.001,noiseenvattcurve=1,noiseenvdectime=0.1,noiseenvdeccurve=0.3,\r\n\t\tthumpenvatttime=0.001,thumpenvattcurve=1,thumpenvdectime=0.1,thumpenvdeccurve=0.3,\r\n\t\tfm1freq=292,fm2freq=838,fm3freq=393,fm1amt = 0.8,fm2amt=0.8,fmenvtofreq=0,\r\n\t\tnoiselpf=20000,noisehpf=400,thumpenvtofreq=1,thumpcutoffmin=80,thumpcutoffmax=300,thumpfreqmultiplier=25,thumpfreqoffset=18|\r\n\t\tvar audio, switch, fmenv, fm1, fm2, fm3, noise, noiseenv, thump, thumpenv;\r\n\t\tswitch = Env.cutoff.kr(Done.freeSelf, gate);\r\n\t\tfmenv = Env([0,1,0],[fmenvatttime,fmenvdectime],[fmenvattcurve,fmenvdeccurve]).kr(Done.none, t_trig, 1, amp * fmlevel);\r\n\t\tfm1 = SinOsc.ar(fm1freq) * fm1amt.clip(0,1);\r\n\t\tfm2 = SinOsc.ar(fm2freq * fm1.exprange(0.1,10)) * fm2amt.clip(0,1);\r\n\t\tfm3 = SinOsc.ar(fm3freq * (fmenv * fmenvtofreq + 1) * fm2.exprange(0.1,10));\r\n\t\tnoiseenv = Env([0,1,0],[noiseenvatttime,noiseenvdectime],[noiseenvattcurve,noiseenvdeccurve]).kr(Done.none, t_trig, 1, amp * noiselevel);\r\n\t\tnoise = WhiteNoise.ar(noiseenv);\r\n\t\tnoise = LPF.ar(noise,noiselpf.clip(100,20000));\r\n\t\tnoise = HPF.ar(noise,noisehpf.clip(100,20000));\r\n\t\tthumpenv = Env([0,1,0],[thumpenvatttime,thumpenvdectime],[thumpenvattcurve,thumpenvdeccurve]).kr(Done.none, t_trig, 1, amp * thumplevel);\r\n\t\tthump = Mix((1..5).collect({\r\n\t\t\t|num|\r\n\t\t\tSinOsc.ar(0, Phasor.ar(t_trig, (thumpfreqmultiplier * num * 2 * pi + thumpfreqoffset) * (thumpenv * thumpenvtofreq + 1)/SampleRate.ir, 0, 2*pi));\r\n\t\t}));\r\n\t\tthump = LPF.ar(thump, thumpenv * (thumpcutoffmax - thumpcutoffmin) + thumpcutoffmin);\r\n\t\taudio = (fm3 * fmenv) + noise + (thump * thumpenv);\r\n\t\taudio = (audio * boost).tanh * attenuation;\r\n\t\taudio = FreeVerb.ar(audio,revlevel,revroomsize,revdamping);\r\n\t\taudio = Pan2.ar(audio,pan);\r\n\t\tOut.ar(out,audio);\r\n\t}\r\n).add;\r\nSynthDef(\\snare,\r\n\t{\r\n\t\t|gate=1,t_trig=1,out=0,pan=0,amp=0.1,boost=4,attenuation=1,fmAlevel=0.5,fmBlevel=0.5,fmAfreqscale=1,fmBfreqscale=1,\r\n\t\tnoiselevel=0.5,revlevel=0.1,revroomsize=0.8,revdamping=0.5,\r\n\t\tfmAenvatttime=0.001,fmAenvattcurve=0,fmAenvdectime=0.1,fmAenvdeccurve= -3,\r\n\t\tfmA1freq=292,fmA2freq=838,fmA3freq=393,fmA1amt = 0.8,fmA2amt=0.8,\r\n\t\tfmBenvatttime=0.001,fmBenvattcurve=0,fmBenvdectime=0.1,fmBenvdeccurve= -3,\r\n\t\tfmB1freq=292,fmB2freq=838,fmB3freq=393,fmB1amt = 0.8,fmB2amt=0.8,\r\n\t\tnoiseenvatttime=0.001,noiseenvattcurve=0,noiseenvdectime=0.1,noiseenvdeccurve= -3,\r\n\t\tnoiselpf=20000,noisehpf=400,fmenvtofreq=0|\r\n\t\tvar audio, switch, fmAenv, fmBenv, fmA1, fmA2, fmA3, fmB1, fmB2, fmB3, noise, noiseenv;\r\n\t\tfmA1freq = fmA1freq * fmAfreqscale;fmA2freq = fmA2freq * fmAfreqscale;fmA3freq = fmA3freq * fmAfreqscale;\r\n\t\tfmB1freq = fmB1freq * fmBfreqscale;fmB2freq = fmB2freq * fmBfreqscale;fmB3freq = fmB3freq * fmBfreqscale;\r\n\t\tswitch = Env.cutoff.kr(Done.freeSelf, gate);\r\n\t\tfmAenv = Env([0,1,0],[fmAenvatttime,fmAenvdectime],[fmAenvattcurve,fmAenvdeccurve]).kr(Done.none, t_trig, 1, amp * fmAlevel);\r\n\t\tfmA1 = SinOsc.ar(fmA1freq) * fmA1amt.clip(0,1);\r\n\t\tfmA2 = SinOsc.ar(fmA2freq * fmA1.exprange(0.1,10)) * fmA2amt.clip(0,1);\r\n\t\tfmA3 = SinOsc.ar(fmA3freq * (fmAenv * fmenvtofreq + 1) * fmA2.exprange(0.1,10));\r\n\t\tfmBenv = Env([0,1,0],[fmBenvatttime,fmBenvdectime],[fmBenvattcurve,fmBenvdeccurve]).kr(Done.none, t_trig, 1, amp * fmBlevel);\r\n\t\tfmB1 = SinOsc.ar(fmB1freq) * fmB1amt.clip(0,1);\r\n\t\tfmB2 = SinOsc.ar(fmB2freq * fmB1.exprange(0.1,10)) * fmB2amt.clip(0,1);\r\n\t\tfmB3 = SinOsc.ar(fmB3freq * (fmBenv * fmenvtofreq + 1) * fmB2.exprange(0.1,10));\r\n\t\tnoiseenv = Env([0,1,0],[noiseenvatttime,noiseenvdectime],[noiseenvattcurve,noiseenvdeccurve]).kr(Done.none, t_trig, 1, amp * noiselevel);\r\n\t\tnoise = WhiteNoise.ar(noiseenv);\r\n\t\tnoise = LPF.ar(noise,noiselpf.clip(100,20000));\r\n\t\tnoise = HPF.ar(noise,noisehpf.clip(100,20000));\r\n\t\taudio = (fmA3 * fmAenv) + (fmB3 * fmBenv) + noise;\r\n\t\taudio = (audio * boost).tanh * attenuation;\r\n\t\taudio = FreeVerb.ar(audio,revlevel,revroomsize,revdamping);\r\n\t\taudio = Pan2.ar(audio,pan);\r\n\t\tOut.ar(out,audio);\r\n\t}\r\n).add;\r\nSynthDef(\\hat,\r\n\t{\r\n\t\t|gate=1,t_trig=1,out=0,pan=0,amp=0.1,boost=4,attenuation=1,fmlevel = 0.5, fmfreqscale=1,noiselevel = 0.5, revlevel=0.1,revroomsize=0.8,revdamping=0.5,\r\n\t\tfmenvatttime=0.001,fmenvattcurve=0,fmenvdectime=0.1,fmenvdeccurve= -3,\r\n\t\tnoiseenvattime=0.001,noiseenvattcurve=0,noiseenvdectime=0.1,noiseenvdeccurve= -3,\r\n\t\tfm1freq=292,fm2freq=838,fm3freq=393,fm1amt = 0.8,fm2amt=0.8,\r\n\t\tnoiselpf=20000,noisehpf=400|\r\n\t\tvar audio, switch, fmenv, fm1, fm2, fm3, noise, noiseenv;\r\n\t\tfm1freq = fm1freq * fmfreqscale;fm2freq = fm2freq * fmfreqscale;fm3freq = fm3freq * fmfreqscale;\r\n\t\tswitch = Env.cutoff.kr(Done.freeSelf, gate);\r\n\t\tfmenv = Env([0,1,0],[fmenvatttime,fmenvdectime],[fmenvattcurve,fmenvdeccurve]).kr(Done.none, t_trig, 1, amp * fmlevel);\r\n\t\tfm1 = SinOsc.ar(fm1freq) * fm1amt.clip(0,1);\r\n\t\tfm2 = SinOsc.ar(fm2freq * fm1.exprange(0.1,10)) * fm2amt.clip(0,1);\r\n\t\tfm3 = SinOsc.ar(fm3freq * fm2.exprange(0.1,10));\r\n\t\tnoiseenv = Env([0,1,0],[noiseenvattime,noiseenvdectime],[noiseenvattcurve,noiseenvdeccurve]).kr(Done.none, t_trig, 1, amp * noiselevel);\r\n\t\tnoise = WhiteNoise.ar(noiseenv);\r\n\t\tnoise = LPF.ar(noise,noiselpf.clip(100,20000));\r\n\t\tnoise = HPF.ar(noise,noisehpf.clip(100,20000));\r\n\t\taudio = (fm3 * fmenv) + (noise * noiseenv);\r\n\t\taudio = (audio * boost).tanh * attenuation;\r\n\t\taudio = FreeVerb.ar(audio,revlevel,revroomsize,revdamping);\r\n\t\taudio = Pan2.ar(audio,pan);\r\n\t\tOut.ar(out,audio);\r\n\t}\r\n).add;\r\n)\r\n\r\n(\r\n~kickpatch = (\r\n\tnoiseenvdectime: 0.082310089963034,\r\n\tattenuation: 0.22910061478615,\r\n\tfm1amt: 0.22018975019455,\r\n\tfm2amt: 0.1617539525032,\r\n\tthumpenvdectime: 0.096060367398437,\r\n\trevlevel: 0.046831969171762,\r\n\tfmenvtofreq: 0.02991867002122,\r\n\tboost: 4.4948384561961,\r\n\tthumplevel: 0.68209940195084,\r\n\tthumpenvdeccurve: 1.8052649497986,\r\n\tthumpenvtofreq: 0.66234208917665,\r\n\tthumpfreqoffset: 10.603728294373,\r\n\tfm3freq: 56.014459619136,\r\n\trevdamping: 0.9112092256546,\r\n\tfm2freq: 240.34838654631,\r\n\tnoiseenvatttime: 0.02882155594665,\r\n\tnoisehpf: 1957.5643831734,\r\n\tthumpcutoffmin: 459.57285712758,\r\n\tthumpfreqmultiplier: 19.783316850662,\r\n\tfmenvdectime: 0.37148556080558,\r\n\tnoiselevel: 0.15430730581284,\r\n\tthumpenvatttime: 0.001,\r\n\trevroomsize: 0.71596258878708,\r\n\tfmlevel: 0.70129412412643,\r\n\tfmenvdeccurve: -3.5376764833927,\r\n\tthumpcutoffmax: 92.37343754883,\r\n\tfm1freq: 525.46488393532,\r\n\tnoiseenvdeccurve: -3.7274378538132,\r\n\tnoiselpf: 3060.9291005849\r\n);\r\n~snarepatch = (\r\n\tfmA1amt: 0.25185558199883,\r\n\tfmAfreqscale: 1.0504953073651,\r\n\tfmB1amt: 0.45330801606178,\r\n\tfmAlevel: 0.62608307600021,\r\n\tnoiseenvdeccurve: -3.6571384966373,\r\n\tfmBenvdeccurve: -1.207347214222,\r\n\tfmA2freq: 103.80361514711,\r\n\tnoisehpf: 3482.8808579243,\r\n\tfmB3freq: 87.961764307079,\r\n\tfmAenvdectime: 0.16059027158164,\r\n\tboost: 7.3301957098881,\r\n\tnoiseenvdectime: 0.1206777957479,\r\n\trevdamping: 0.62858611345291,\r\n\tfmA3freq: 175.20096253367,\r\n\tfmBenvdectime: 0.089293047347157,\r\n\tfmB2freq: 70.818393507471,\r\n\tfmB2amt: 0.50210249423981,\r\n\tfmBfreqscale: 1.8168465878768,\r\n\tfmAenvdeccurve: -2.4535009264946,\r\n\tnoiselpf: 5982.6825037192,\r\n\tnoiseenvatttime: 0.0073936101820986,\r\n\tfmenvtofreq: 0.17540055065142,\r\n\tfmA1freq: 67.033367952364,\r\n\tfmBlevel: 0.55415153503418,\r\n\trevroomsize: 0.5787867307663,\r\n\tfmA2amt: 0.15265274047852,\r\n\tnoiselevel: 0.6460028886795,\r\n\tfmB1freq: 470.81620150722,\r\n\trevlevel: 0.25108739733696,\r\n\tattenuation: 0.33438730239868\r\n);\r\n~hatpatch = (\r\n\tfm1amt: 0.25010031461716,\r\n\tfmfreqscale: 2.5124176161438,\r\n\tnoiselpf: 20000.0,\r\n\tfmlevel: 0.15848658978939,\r\n\tnoisehpf: 4743.8046187692,\r\n\trevroomsize: 0.19304300844669,\r\n\tfm2freq: 1338.7784155564,\r\n\tboost: 4.4979889479394,\r\n\tattenuation: 0.12104642391205,\r\n\tfmenvdeccurve: -4.5520303025842,\r\n\tnoiseenvdectime: 0.12313126194395,\r\n\tfm1freq: 1220.1787917932,\r\n\tfm3freq: 1507.0961269746,\r\n\tnoiseenvatttime: 0.001,\r\n\tnoiseenvdeccurve: -2.4986642599106,\r\n\tfm2amt: 0.65971809625626,\r\n\trevdamping: 0.71325391530991,\r\n\tnoiselevel: 1.0,\r\n\trevlevel: 0.15580302476883,\r\n\tfmenvdectime: 0.034721955338952\r\n);\r\n)\r\n\r\n(\r\nPdef(\\kick,\r\n\tPmono(\r\n\t\t\\kick,\r\n\t\t\\amp, Pseq([100,0,80,0, 0,0,0,0, 100,0,80,0, 0,0,0,20],inf),\r\n\t\t\\amp, Pkey(\\amp) / 100,\r\n\t\t\\trig, Pif(Pkey(\\amp) > 0, 1, 0),\r\n\t\t\\dur, 0.25,\r\n\t\t\\timingOffset, Pseg(Pseq([0,0.05],inf),Pseq([0.5,0.5],inf),\\sine,inf)\r\n\t)\r\n).play(protoEvent: ~kickpatch);\r\nPdef(\\snare,\r\n\tPmono(\r\n\t\t\\snare,\r\n\t\t\\amp, Pseq([0,0,0,0, 100,0,0,1, 0,25,0,2, 100,0,0,0],inf),\r\n\t\t\\amp, Pkey(\\amp) / 100,\r\n\t\t\\trig, Pif(Pkey(\\amp) > 0, 1, 0),\r\n\t\t\\dur, 0.25,\r\n\t\t\\timingOffset, Pseg(Pseq([0,0.05],inf),Pseq([0.5,0.5],inf),\\sine,inf)\r\n\t)\r\n).play(protoEvent: ~snarepatch);\r\nPdef(\\hat,\r\n\tPmono(\r\n\t\t\\hat,\r\n\t\t\\amp, Pseq([60,0,60,0, 60,0,100,20, 60,0,60,0, 60,0,60,10,20],inf),\r\n\t\t\\amp, Pkey(\\amp) / 100,\r\n\t\t\\trig, Pif(Pkey(\\amp) > 0, 1, 0),\r\n\t\t\\dur, Pseq([0.25,0.25,0.25,0.25, 0.25,0.25,0.25,0.25, 0.25,0.25,0.25,0.25, 0.25,0.25,1/6,1/6,1/6],inf),\r\n\t\t\\timingOffset, Pseg(Pseq([0,0.05],inf),Pseq([0.5,0.5],inf),\\sine,inf)\r\n\t)\r\n).play(protoEvent: ~hatpatch);\r\n)\r\n[\\kick,\\snare,\\hat].do({|pat|Pdef(pat).stop;});",
   "is_private" : null,
   "id" : "1-5bW",
   "labels" : [
      "fm",
      "drums"
   ]
}
