gendr
| /* | |
| testing the Gendy ugen in scide first | |
| */ | |
| Routine { | |
| // our synthdef: | |
| // gendy oscillator, | |
| // distribution parameter modulated by ADC and sine oscillator, | |
| // followed by resonant lowpass, pan, envelope | |
| ~def = SynthDef.new(\gendr, { | |
| // basic parameters | |
| arg out=0, gate=0, fadeTime=0.1, | |
| amp=0, pan=0, | |
| // gendy parameters | |
| 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, | |
| // modulation parameters | |
| osc_hz=10, | |
| mod_osc=0.0, mod_adc=0.0, | |
| // filter parameters | |
| svf_hz=880, svf_res=0.0, | |
| svf_lp=1, svf_bp=0, svf_hp=0, svf_notch=0, svf_peak=0; | |
| var adc, osc, gen, snd, env; | |
| 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); | |
| env = EnvGen.ar(Env.asr(attackTime:fadeTime, releaseTime:fadeTime), gate); | |
| Out.ar(out, Pan2.ar(snd * env * amp, pan); | |
| }); | |
| ~def.send(s); | |
| s.sync; | |
| // 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); | |
| }); | |
| }.defer; | |
| }.play; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This comment has been minimized.
~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;
sig = SVF.ar(
LFSaw.ar(LFSaw.kr(2).range(110,35)), // signal
MouseX.kr(20,20000,'exponential'), // cutoff
MouseY.kr(1.0,0,'linear'), // q
low, band, high, notch, peak); // levels
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);
)
}.play;