| ( | |
| ~def = SynthDef(\gendr, { arg low=0.1, band=0.0, high=0.0, notch=0.0, peak=0.0, out=0, gate=0, fadeTime=0.1,amp=0, pan=0,amp_dist=1, dur_dist=1,ad_param=1.0, dd_param=1.0,hz_min=440, hz_max=660,amp_scale= 0.5, dur_scale=0.5,init_cp= 12,osc_hz=10,mod_osc=0.0, mod_adc=0.0,svf_hz=880, svf_res=0.0,svf_lp=1, svf_bp=0, svf_hp=0, svf_notch=0, svf_peak=0; | |
| var sig, adc, osc, gen, snd, env; | |
| env = EnvGen.ar(Env.asr(attackTime:fadeTime, releaseTime:fadeTime), gate); | |
| adc = SoundIn.ar(0); | |
| osc = SinOsc.ar(osc_hz); | |
| ad_param = K2A.ar(ad_param) + (adc * mod_adc) + (osc * mod_osc); | |
| snd = Gendy2.ar(amp_dist, dur_dist, ad_param, dd_param,hz_min, hz_max, amp_scale, dur_scale, init_cp); | |
| snd = SVF.ar(snd, svf_hz, svf_res, svf_lp, svf_bp, svf_hp, svf_notch, svf_peak); | |
| Out.ar(out, Pan2.ar(snd * env * amp, pan)); | |
| //Out.ar(0, sig ! 2); | |
| }).play(addAction: \addToTail); | |
| ) | |
| // create the synth | |
| ~syn = Synth.new(\gendr); | |
| // create control specs for the parameters | |
| ~specs = [ | |
| (name: \gate, spec: ControlSpec(0, 1, \lin, default: 0, units: "")), | |
| (name: \fadeTime, spec: ControlSpec(0, 10, \lin, default: 0, units: "Sec")), | |
| (name: \amp, spec: ControlSpec(0, 1, \lin, default: 0, units: "")), | |
| (name: \pan, spec: ControlSpec(-1, 1, \lin, default: 0, units: "")), | |
| (name: \amp_dist, spec: ControlSpec(0, 6, \lin, default: 0, units: "")), | |
| (name: \dur_dist, spec: ControlSpec(0, 6, \lin, default: 0, units: "")), | |
| (name: \ad_param, spec: ControlSpec(0.0001, 1, \lin, default: 0, units: "")), | |
| (name: \dd_param, spec: ControlSpec(0.0001, 1, \lin, default: 0, units: "")), | |
| (name: \hz_min, spec: ControlSpec(1, 10000, \exp, default: 220, units: "Hz")), | |
| (name: \hz_max, spec: ControlSpec(1, 10000, \exp, default: 330, units: "Hz")), | |
| (name: \amp_scale, spec: ControlSpec(0, 1, \lin, default: 0, units: "")), | |
| (name: \dur_scale, spec: ControlSpec(0, 1, \lin, default: 0, units: "")), | |
| (name: \init_cp, spec: ControlSpec(1, 20, \lin, default: 12, units: "")), | |
| (name: \osc_hz, spec: ControlSpec(0.01, 10000, \exp, default: 10, units: "Hz")), | |
| (name: \mod_osc, spec: ControlSpec(0, 1, \lin, default: 0, units: "")), | |
| (name: \mod_adc, spec: ControlSpec(0, 1, \lin, default: 0, units: "")), | |
| (name: \svf_hz, spec: ControlSpec(10, 10000, \exp, default: 880, units: "Hz")), | |
| (name: \svf_res, spec: ControlSpec(0, 1, \lin, default: 0, units: "")), | |
| (name: \svf_lp, spec: ControlSpec(0, 1, \lin, default: 0, units: "")), | |
| (name: \svf_bp, spec: ControlSpec(0, 1, \lin, default: 0, units: "")), | |
| (name: \svf_hp, spec: ControlSpec(0, 1, \lin, default: 0, units: "")), | |
| (name: \svf_notch, spec: ControlSpec(0, 1, \lin, default: 0, units: "")), | |
| (name: \svf_peak, spec: ControlSpec(0, 1, \lin, default: 0, units: "")), | |
| ]; | |
| // (to generate the above table:) | |
| /* | |
| ~def.allControlNames.do({ arg ctl; | |
| post("(name:\\"); | |
| post(ctl.name); | |
| postln(", spec: ControlSpec(0, 1, \\lin, default: 0, units: \"\")),"); | |
| }); | |
| */ | |
| // make a test UI | |
| { | |
| ~ui = Window.new("gendr", Rect(0, 0, 840, 800)); | |
| ~ui.front; | |
| ~ui.addFlowLayout(10@10, 10@10); | |
| ~specs.do( { | |
| arg spec; | |
| EZSlider(~ui, 800 @ 20, spec.name, spec.spec, { |sl| ~syn.set(spec.name, sl.value); }, labelWidth:80); | |
| }); | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This comment has been minimized.
example from ezra to learn norns stuff