// title: techno kick // author: Thomas Legacy // description: // My first submission to this site, with hopefully many more to come. Here's one of the first real sounds I've synthesized that I've thought sounded good: a techno kick influenced by the style of artists like Introversion. // // Feedback appreciated! I'm still awfully new to all of this. // code: TempoClock.default.tempo_(140/60); ( SynthDef(\technokick, { | freq=51.913087197493, amp=0.5, rel=0.28571428571429, out=0, click=0.008, spread=0.1, damp=0.6 gate=1 | var sig, env1, aEnv, env2, wEnv, vEnv, low, high, dry, verb, verbHi, verbLo; // env.ar is really good for this since thie envelopes are so short env1 = EnvGen.ar(Env.adsr(0,0.1,0,0, curve: -4, bias: 1)); // initial attack env2 = EnvGen.ar(Env.adsr(0,click,0,0,32, bias:1)); // click adder aEnv = EnvGen.kr(Env.perc(0.005, rel/1.75, curve: 2)); // amplitude wEnv = EnvGen.ar(Env.adsr(0,0.01,0,0, curve: -4)); vEnv = EnvGen.kr(Env.adsr(rel, rel/2, 1, 0.01, curve: 3), gate, doneAction: Done.freeSelf); // for reverb // separate signals for extra processing low = SinOsc.ar(freq * env1 * env2); high = WhiteNoise.ar() * wEnv * 0.6; high = BBandPass.ar(high, 1000, 2); dry = Mix.new([low, high]) * aEnv; dry = CrossoverDistortion.ar(dry * 0.3, 0.9, 1); // dry = dry * 0.25; // equalizer dry = BPeakEQ.ar(dry, 5500, db: 10); dry = BPeakEQ.ar(dry, 360, db: -12, rq: 2); dry = BLowShelf.ar(dry, 300, db: 6).distort; // compression dry = Compander.ar(dry, dry, thresh: 0.5, slopeBelow: 1.75, slopeAbove: 0.75, clampTime: 0.002, relaxTime: 0.1, mul: 5); // finalize dry signal dry = Pan2.ar(dry * aEnv); // create reverb signal // verb = FreeVerb2.ar(dry[0],dry[1],mix: 1,room: 1, damp: 1).distort * vEnv; verb = GVerb.ar(dry, roomsize: 10, revtime: 5, damping: damp, drylevel: 0, earlyreflevel: 0.5, taillevel: 1, maxroomsize: 100, mul: 1) ; // Sum the double stereo output into a single stereo one verb = verb.sum; // eq verb = BLowPass.ar(verb, 400+freq,2); // Reduce stereo spread, and balance audio to be level no matter the spread (more or less) verbHi = BHiPass.ar(verb, 200); verbHi = Balance2.ar(verbHi[0] + (verbHi[1] * spread), // left verbHi[1] + (verbHi[0] * spread), level: 0.5 + (1-spread)); // right // Keep low frequencies in mono verbLo = BLowPass.ar(verb, 200); verbLo = Balance2.ar(verbLo[0] + verbLo[1], verbLo[1] + verbLo[0], level: 0.5); verb = verbHi + verbLo; verb = Compander.ar(verb,verb, thresh: 0.5, slopeBelow: 1.75, slopeAbove: 0.75, clampTime: 0.002, relaxTime: 0.1, mul: 0.25) * vEnv; // finalize signals sig = dry + verb; sig = Compander.ar(sig,sig, thresh: 0.5, slopeBelow: 0.59, slopeAbove: 1, clampTime: 0.002, relaxTime: 0.1, mul: 1); Out.ar(out, sig); }).add; ) ( ~kickIntro = Pbind(*[ instrument: \technokick, damp: 0.95, spread: Pseq([0.9,0.8,0.6,0]), click: Pwhite(0.006, 0.008, 4), dur: 1, midinote: Pseq([60,55,52.5,40]); ]); ~kick = Pbind(*[ instrument: \technokick, spread: Pseq([0.9,0.8,0.6,0], inf), click: Pwhite(0.006, 0.008, inf), dur: 2, legato: 1, midinote: Pseq([Pseq([32], 4), Pseq([28], 4)]); ]); ~song = Pseq([~kickIntro, ~kick]); ~song.play(quant: 4); )