You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
bmSClib/NodeDictionary/makeSourceSynthDef.sc

84 lines
1.6 KiB

+ NodeDictionary {
makeSourceSynthDef {
^SynthDef(this[\name], {
var freq, signal, env, gate;
var releaseNode = if (
this[\sustained].asBoolean,
{ 2 },
{ nil }
);
var envDoneAction = if (
this[\sustained].asBoolean,
{ 0 },
{ 2 }
);
gate = \gate.tr(0);
freq = \freq.kr(220);
if(this[\useFreqLag].asBoolean, {
freq = Lag.kr(freq, \freqLag.kr(0.5));
});
signal = SynthDef.wrap(
func: this[\func],
prependArgs: [freq, gate]
);
if(this[\useLfo].asBoolean, {
var lfo = switch(this[\lfoWave])
{ \sin } { SinOsc }
{ \saw } { Saw }
{ \tri } { LFTri }
{ \pulse } { Pulse }
? SinOsc;
signal = signal * lfo.kr(
\lfoFreq.kr(1)
).range(
1 - \lfoGain.kr(0.5), 1
);
});
if(this[\useSaturation].asBoolean, {
this[\saturationSteps].do {
signal = signal.tanh;
}
});
if(this[\useEnv].asBoolean, {
var att = this.getDefaultOr(\attack, 0.1);
var rel = this.getDefaultOr(\release, 0.1);
var curve = this.getDefaultOr(\curve, 1);
var env = Env(
[0, 0, 1, 0],
[0, \attack.kr(att), \release.kr(rel)],
\envCurve.kr(curve),
releaseNode: releaseNode,
).kr(envDoneAction, gate: gate);
signal = signal * env;
});
switch(this[\panning],
\splay, { signal = Splay.ar(signal, \spread.kr(1), center: \pan.kr(0)); },
\splayAz, { signal = SplayAz.ar(this[\panningChannels], signal, orientation: \orientation.kr(0.5)); },
nil, { signal = Pan2.ar(signal, \pan.kr(0)); }
);
signal = signal * \amp.kr(1);
if(this[\postAmp].asBoolean, {
signal = signal * \postAmp.kr(1);
});
Out.ar(
\out.kr(0),
signal,
);
});
}
}