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.
74 lines
1.5 KiB
74 lines
1.5 KiB
+ NodeDictionary {
|
|
makeSourceNdef {
|
|
| name |
|
|
var internalName = if(name.isNil, {this[\name]}, {name});
|
|
|
|
Ndef(internalName, {
|
|
var freq, signal, env, gate;
|
|
|
|
var releaseNode = if (
|
|
this[\sustained].asBoolean,
|
|
{ 2 },
|
|
{ nil }
|
|
);
|
|
|
|
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)],
|
|
[0, \attackCurve.kr(curve), \releaseCurve.kr(curve)],
|
|
releaseNode: releaseNode,
|
|
).kr(0, gate: gate);
|
|
|
|
signal = signal * env;
|
|
});
|
|
|
|
if(this[\usePan].asBoolean, {
|
|
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)); },
|
|
\pan, { signal = Pan2.ar(signal, \pan.kr(0)); }
|
|
);
|
|
});
|
|
|
|
signal * \amp.kr(1);
|
|
});
|
|
}
|
|
} |