Skip to content

Instantly share code, notes, and snippets.

@catfact

catfact/gendr.scd Secret

Created Mar 16, 2019
Embed
What would you like to do?
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;
@shreeswifty

This comment has been minimized.

Copy link

@shreeswifty shreeswifty commented Dec 15, 2019

(

~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);
)

// 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