«Punchy break» by badnumbersmusic

on 05 Oct'19 19:32 in fmdrums

Breakbeat made of out FM-synthesized drums. A little too saturated but nice and punchy.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
s.boot;
TempoClock.default.tempo = 2;

(
SynthDef(\kick,
	{
		|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,
		fmenvatttime=0.001,fmenvattcurve=0,fmenvdectime=0.1,fmenvdeccurve=0.3,
		noiseenvatttime=0.001,noiseenvattcurve=1,noiseenvdectime=0.1,noiseenvdeccurve=0.3,
		thumpenvatttime=0.001,thumpenvattcurve=1,thumpenvdectime=0.1,thumpenvdeccurve=0.3,
		fm1freq=292,fm2freq=838,fm3freq=393,fm1amt = 0.8,fm2amt=0.8,fmenvtofreq=0,
		noiselpf=20000,noisehpf=400,thumpenvtofreq=1,thumpcutoffmin=80,thumpcutoffmax=300,thumpfreqmultiplier=25,thumpfreqoffset=18|
		var audio, switch, fmenv, fm1, fm2, fm3, noise, noiseenv, thump, thumpenv;
		switch = Env.cutoff.kr(Done.freeSelf, gate);
		fmenv = Env([0,1,0],[fmenvatttime,fmenvdectime],[fmenvattcurve,fmenvdeccurve]).kr(Done.none, t_trig, 1, amp * fmlevel);
		fm1 = SinOsc.ar(fm1freq) * fm1amt.clip(0,1);
		fm2 = SinOsc.ar(fm2freq * fm1.exprange(0.1,10)) * fm2amt.clip(0,1);
		fm3 = SinOsc.ar(fm3freq * (fmenv * fmenvtofreq + 1) * fm2.exprange(0.1,10));
		noiseenv = Env([0,1,0],[noiseenvatttime,noiseenvdectime],[noiseenvattcurve,noiseenvdeccurve]).kr(Done.none, t_trig, 1, amp * noiselevel);
		noise = WhiteNoise.ar(noiseenv);
		noise = LPF.ar(noise,noiselpf.clip(100,20000));
		noise = HPF.ar(noise,noisehpf.clip(100,20000));
		thumpenv = Env([0,1,0],[thumpenvatttime,thumpenvdectime],[thumpenvattcurve,thumpenvdeccurve]).kr(Done.none, t_trig, 1, amp * thumplevel);
		thump = Mix((1..5).collect({
			|num|
			SinOsc.ar(0, Phasor.ar(t_trig, (thumpfreqmultiplier * num * 2 * pi + thumpfreqoffset) * (thumpenv * thumpenvtofreq + 1)/SampleRate.ir, 0, 2*pi));
		}));
		thump = LPF.ar(thump, thumpenv * (thumpcutoffmax - thumpcutoffmin) + thumpcutoffmin);
		audio = (fm3 * fmenv) + noise + (thump * thumpenv);
		audio = (audio * boost).tanh * attenuation;
		audio = FreeVerb.ar(audio,revlevel,revroomsize,revdamping);
		audio = Pan2.ar(audio,pan);
		Out.ar(out,audio);
	}
).add;
SynthDef(\snare,
	{
		|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,
		noiselevel=0.5,revlevel=0.1,revroomsize=0.8,revdamping=0.5,
		fmAenvatttime=0.001,fmAenvattcurve=0,fmAenvdectime=0.1,fmAenvdeccurve= -3,
		fmA1freq=292,fmA2freq=838,fmA3freq=393,fmA1amt = 0.8,fmA2amt=0.8,
		fmBenvatttime=0.001,fmBenvattcurve=0,fmBenvdectime=0.1,fmBenvdeccurve= -3,
		fmB1freq=292,fmB2freq=838,fmB3freq=393,fmB1amt = 0.8,fmB2amt=0.8,
		noiseenvatttime=0.001,noiseenvattcurve=0,noiseenvdectime=0.1,noiseenvdeccurve= -3,
		noiselpf=20000,noisehpf=400,fmenvtofreq=0|
		var audio, switch, fmAenv, fmBenv, fmA1, fmA2, fmA3, fmB1, fmB2, fmB3, noise, noiseenv;
		fmA1freq = fmA1freq * fmAfreqscale;fmA2freq = fmA2freq * fmAfreqscale;fmA3freq = fmA3freq * fmAfreqscale;
		fmB1freq = fmB1freq * fmBfreqscale;fmB2freq = fmB2freq * fmBfreqscale;fmB3freq = fmB3freq * fmBfreqscale;
		switch = Env.cutoff.kr(Done.freeSelf, gate);
		fmAenv = Env([0,1,0],[fmAenvatttime,fmAenvdectime],[fmAenvattcurve,fmAenvdeccurve]).kr(Done.none, t_trig, 1, amp * fmAlevel);
		fmA1 = SinOsc.ar(fmA1freq) * fmA1amt.clip(0,1);
		fmA2 = SinOsc.ar(fmA2freq * fmA1.exprange(0.1,10)) * fmA2amt.clip(0,1);
		fmA3 = SinOsc.ar(fmA3freq * (fmAenv * fmenvtofreq + 1) * fmA2.exprange(0.1,10));
		fmBenv = Env([0,1,0],[fmBenvatttime,fmBenvdectime],[fmBenvattcurve,fmBenvdeccurve]).kr(Done.none, t_trig, 1, amp * fmBlevel);
		fmB1 = SinOsc.ar(fmB1freq) * fmB1amt.clip(0,1);
		fmB2 = SinOsc.ar(fmB2freq * fmB1.exprange(0.1,10)) * fmB2amt.clip(0,1);
		fmB3 = SinOsc.ar(fmB3freq * (fmBenv * fmenvtofreq + 1) * fmB2.exprange(0.1,10));
		noiseenv = Env([0,1,0],[noiseenvatttime,noiseenvdectime],[noiseenvattcurve,noiseenvdeccurve]).kr(Done.none, t_trig, 1, amp * noiselevel);
		noise = WhiteNoise.ar(noiseenv);
		noise = LPF.ar(noise,noiselpf.clip(100,20000));
		noise = HPF.ar(noise,noisehpf.clip(100,20000));
		audio = (fmA3 * fmAenv) + (fmB3 * fmBenv) + noise;
		audio = (audio * boost).tanh * attenuation;
		audio = FreeVerb.ar(audio,revlevel,revroomsize,revdamping);
		audio = Pan2.ar(audio,pan);
		Out.ar(out,audio);
	}
).add;
SynthDef(\hat,
	{
		|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,
		fmenvatttime=0.001,fmenvattcurve=0,fmenvdectime=0.1,fmenvdeccurve= -3,
		noiseenvattime=0.001,noiseenvattcurve=0,noiseenvdectime=0.1,noiseenvdeccurve= -3,
		fm1freq=292,fm2freq=838,fm3freq=393,fm1amt = 0.8,fm2amt=0.8,
		noiselpf=20000,noisehpf=400|
		var audio, switch, fmenv, fm1, fm2, fm3, noise, noiseenv;
		fm1freq = fm1freq * fmfreqscale;fm2freq = fm2freq * fmfreqscale;fm3freq = fm3freq * fmfreqscale;
		switch = Env.cutoff.kr(Done.freeSelf, gate);
		fmenv = Env([0,1,0],[fmenvatttime,fmenvdectime],[fmenvattcurve,fmenvdeccurve]).kr(Done.none, t_trig, 1, amp * fmlevel);
		fm1 = SinOsc.ar(fm1freq) * fm1amt.clip(0,1);
		fm2 = SinOsc.ar(fm2freq * fm1.exprange(0.1,10)) * fm2amt.clip(0,1);
		fm3 = SinOsc.ar(fm3freq * fm2.exprange(0.1,10));
		noiseenv = Env([0,1,0],[noiseenvattime,noiseenvdectime],[noiseenvattcurve,noiseenvdeccurve]).kr(Done.none, t_trig, 1, amp * noiselevel);
		noise = WhiteNoise.ar(noiseenv);
		noise = LPF.ar(noise,noiselpf.clip(100,20000));
		noise = HPF.ar(noise,noisehpf.clip(100,20000));
		audio = (fm3 * fmenv) + (noise * noiseenv);
		audio = (audio * boost).tanh * attenuation;
		audio = FreeVerb.ar(audio,revlevel,revroomsize,revdamping);
		audio = Pan2.ar(audio,pan);
		Out.ar(out,audio);
	}
).add;
)

(
~kickpatch = (
	noiseenvdectime: 0.082310089963034,
	attenuation: 0.22910061478615,
	fm1amt: 0.22018975019455,
	fm2amt: 0.1617539525032,
	thumpenvdectime: 0.096060367398437,
	revlevel: 0.046831969171762,
	fmenvtofreq: 0.02991867002122,
	boost: 4.4948384561961,
	thumplevel: 0.68209940195084,
	thumpenvdeccurve: 1.8052649497986,
	thumpenvtofreq: 0.66234208917665,
	thumpfreqoffset: 10.603728294373,
	fm3freq: 56.014459619136,
	revdamping: 0.9112092256546,
	fm2freq: 240.34838654631,
	noiseenvatttime: 0.02882155594665,
	noisehpf: 1957.5643831734,
	thumpcutoffmin: 459.57285712758,
	thumpfreqmultiplier: 19.783316850662,
	fmenvdectime: 0.37148556080558,
	noiselevel: 0.15430730581284,
	thumpenvatttime: 0.001,
	revroomsize: 0.71596258878708,
	fmlevel: 0.70129412412643,
	fmenvdeccurve: -3.5376764833927,
	thumpcutoffmax: 92.37343754883,
	fm1freq: 525.46488393532,
	noiseenvdeccurve: -3.7274378538132,
	noiselpf: 3060.9291005849
);
~snarepatch = (
	fmA1amt: 0.25185558199883,
	fmAfreqscale: 1.0504953073651,
	fmB1amt: 0.45330801606178,
	fmAlevel: 0.62608307600021,
	noiseenvdeccurve: -3.6571384966373,
	fmBenvdeccurve: -1.207347214222,
	fmA2freq: 103.80361514711,
	noisehpf: 3482.8808579243,
	fmB3freq: 87.961764307079,
	fmAenvdectime: 0.16059027158164,
	boost: 7.3301957098881,
	noiseenvdectime: 0.1206777957479,
	revdamping: 0.62858611345291,
	fmA3freq: 175.20096253367,
	fmBenvdectime: 0.089293047347157,
	fmB2freq: 70.818393507471,
	fmB2amt: 0.50210249423981,
	fmBfreqscale: 1.8168465878768,
	fmAenvdeccurve: -2.4535009264946,
	noiselpf: 5982.6825037192,
	noiseenvatttime: 0.0073936101820986,
	fmenvtofreq: 0.17540055065142,
	fmA1freq: 67.033367952364,
	fmBlevel: 0.55415153503418,
	revroomsize: 0.5787867307663,
	fmA2amt: 0.15265274047852,
	noiselevel: 0.6460028886795,
	fmB1freq: 470.81620150722,
	revlevel: 0.25108739733696,
	attenuation: 0.33438730239868
);
~hatpatch = (
	fm1amt: 0.25010031461716,
	fmfreqscale: 2.5124176161438,
	noiselpf: 20000.0,
	fmlevel: 0.15848658978939,
	noisehpf: 4743.8046187692,
	revroomsize: 0.19304300844669,
	fm2freq: 1338.7784155564,
	boost: 4.4979889479394,
	attenuation: 0.12104642391205,
	fmenvdeccurve: -4.5520303025842,
	noiseenvdectime: 0.12313126194395,
	fm1freq: 1220.1787917932,
	fm3freq: 1507.0961269746,
	noiseenvatttime: 0.001,
	noiseenvdeccurve: -2.4986642599106,
	fm2amt: 0.65971809625626,
	revdamping: 0.71325391530991,
	noiselevel: 1.0,
	revlevel: 0.15580302476883,
	fmenvdectime: 0.034721955338952
);
)

(
Pdef(\kick,
	Pmono(
		\kick,
		\amp, Pseq([100,0,80,0, 0,0,0,0, 100,0,80,0, 0,0,0,20],inf),
		\amp, Pkey(\amp) / 100,
		\trig, Pif(Pkey(\amp) > 0, 1, 0),
		\dur, 0.25,
		\timingOffset, Pseg(Pseq([0,0.05],inf),Pseq([0.5,0.5],inf),\sine,inf)
	)
).play(protoEvent: ~kickpatch);
Pdef(\snare,
	Pmono(
		\snare,
		\amp, Pseq([0,0,0,0, 100,0,0,1, 0,25,0,2, 100,0,0,0],inf),
		\amp, Pkey(\amp) / 100,
		\trig, Pif(Pkey(\amp) > 0, 1, 0),
		\dur, 0.25,
		\timingOffset, Pseg(Pseq([0,0.05],inf),Pseq([0.5,0.5],inf),\sine,inf)
	)
).play(protoEvent: ~snarepatch);
Pdef(\hat,
	Pmono(
		\hat,
		\amp, Pseq([60,0,60,0, 60,0,100,20, 60,0,60,0, 60,0,60,10,20],inf),
		\amp, Pkey(\amp) / 100,
		\trig, Pif(Pkey(\amp) > 0, 1, 0),
		\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),
		\timingOffset, Pseg(Pseq([0,0.05],inf),Pseq([0.5,0.5],inf),\sine,inf)
	)
).play(protoEvent: ~hatpatch);
)
[\kick,\snare,\hat].do({|pat|Pdef(pat).stop;});
raw 9222 chars (focus & ctrl+a+c to copy)
reception
comments
user user 05 Nov'19 22:52

those numbers, defined inside the patches, where do you pick them from?