( name: 'perc_gen', func: { |freq, gate| var pitchEnv = Env([0, \pitchMultiplier.kr(2.0), 1.0], [0, \pitchDecay.kr(0.01)], [-2]).kr(gate: gate); var f = freq * pitchEnv; var ff = f * (\fRatio1.kr(1) / \fRatio2.kr(1)); var mod = SinOsc.ar(ff) * f * \modIndex.kr(0.0); var body = SinOsc.ar(f + mod) * \toneGain.kr(1.0); var noise = WhiteNoise.ar; var noiseEnv = Env([0.0, 1.0, 0.0], [0, \noiseRelease.kr(0.01)], [-2]).kr(gate: gate); var tick = LPF.ar(noise * noiseEnv, \noiseFilter.kr(1000)) * \noiseGain.kr(-12.dbamp); var sig = Mix([body, tick]); sig; }, useSaturation: true, saturationSteps: 4, useEnv: true, defaults: (attack: 0.01, decay: 0.05, curve: -4), specs:( attack: [0.0, 1.0], envCurve: [-6, 6], noiseFilter: [80, 20000], noiseGain: [0.0, 1.0], noiseRelease: [0.01, 2.0], pitchDecay: [0.01, 4.0], pitchMultiplier: [0.01, 2.0], release: [0.01, 2.0], toneGain: [0.0, 1.0], fRatio1: [1.0, 10.0], fRatio2: [1.0, 10.0], modIndex: [0.0, 1.0] ) )