унифицировал обработку

spectral-algs
Arseniusz 17 hours ago
parent 8d2c2e887a
commit 2fd31d158a

@ -1,29 +1,89 @@
NodeDictionary : IdentityDictionary { NodeDictionary : IdentityDictionary {
getDefaultOr { getDefaultOr {
| key, defaultValue | | key, defaultValue |
if(this[\defaults][key].isNil, { if(this[\defaults][key].isNil, {
^defaultValue ^defaultValue
}, { }, {
^this[\defaults][key] ^this[\defaults][key]
}); });
} }
makeAnalysysNdef { processSig {
^Ndef(this[\name], { | sig, gate |
var input = SoundIn.ar(\bus.kr(0));
var signal = SynthDef.wrap( var releaseNode = if (
func: this[\func], this[\sustained].asBoolean,
prependArgs: [input] { 2 },
); { nil }
);
if(this[\convertToKr].isNil.not
and: var envDoneAction = if (
this[\convertToKr] == true, this[\sustained].asBoolean,
{ { 0 },
A2K.kr(signal); { 2 }
}, { );
signal;
}); 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.getDefaultOr(\saturationSteps, 4).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(envDoneAction, 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)); }
);
});
if(this[\postAmp].asBoolean, {
signal = signal * \postAmp.kr(1);
});
// if(this[\detectSilence].asBoolean, {
// FreeSelf.kr(
// DetectSilence.ar(
// [signal[0], signal[1]] + Impulse.ar(0)
// ).product)
// });
if(this[\limitDuration].asBoolean, {
Line.kr(0, 1, \dur.kr(1), doneAction: 2);
});
signal = signal * \amp.kr(1);
^signal;
}
} }

@ -1,18 +1,19 @@
+ NodeDictionary { + NodeDictionary {
makeBufferProcessingNdef { makeBufferProcessingNdef {
| name, buf, quant = 1.0 | | name |
var internalName = if(name.isNil, {this[\name]}, {name}); var internalName = if(name.isNil, {this[\name]}, {name});
Ndef(internalName, { Ndef(internalName, {
var freq, signal, env, gate; var signal, gate;
signal = SynthDef.wrap( gate = \gate.tr(0);
func: this[\func],
prependArgs: [buf]
);
signal * \amp.kr(1); signal = SynthDef.wrap(
}); func: this[\func],
} );
this.processSig(signal, gate);
});
}
} }

@ -1,32 +1,18 @@
+ NodeDictionary { + NodeDictionary {
makeBufferProcessingSynthDef { makeBufferProcessingSynthDef {
SynthDef(this[\name], { SynthDef(this[\name], {
var buf = \buf.kr; var signal, gate;
var signal = SynthDef.wrap(
func: this[\func],
prependArgs: [buf]
);
signal = Pan2.ar( gate = \gate.tr(0);
signal * \amp.kr(1),
\pan.kr(0)
);
if(this[\detectSilence].asBoolean, { signal = SynthDef.wrap(
FreeSelf.kr( func: this[\func],
DetectSilence.ar( );
[signal[0], signal[1]] + Impulse.ar(0)
).product)
});
if(this[\limitDuration].asBoolean, { Out.ar(
Line.kr(0, 1, \dur.kr(1), doneAction: 2); \out.kr(0),
}); this.processSig(signal, gate);
);
Out.ar( });
\out.kr(0), }
signal
);
}).add;
}
} }

@ -1,74 +1,24 @@
+ NodeDictionary { + NodeDictionary {
makeSourceNdef { makeSourceNdef {
| name | | name |
var internalName = if(name.isNil, {this[\name]}, {name}); var internalName = if(name.isNil, {this[\name]}, {name});
Ndef(internalName, { Ndef(internalName, {
var freq, signal, env, gate; var freq, signal, gate;
var releaseNode = if ( gate = \gate.tr(0);
this[\sustained].asBoolean, freq = \freq.kr(220);
{ 2 },
{ nil } if(this[\useFreqLag].asBoolean, {
); freq = Lag.kr(freq, \freqLag.kr(0.5));
});
gate = \gate.tr(0);
freq = \freq.kr(220); signal = SynthDef.wrap(
func: this[\func],
if(this[\useFreqLag].asBoolean, { prependArgs: [freq, gate]
freq = Lag.kr(freq, \freqLag.kr(0.5)); );
});
this.processSig(signal, gate);
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);
});
}
} }

@ -1,84 +1,24 @@
+ NodeDictionary { + NodeDictionary {
makeSourceSynthDef { makeSourceSynthDef {
^SynthDef(this[\name], { ^SynthDef(this[\name], {
var freq, signal, env, gate; var freq, signal, gate;
var releaseNode = if ( gate = \gate.tr(0);
this[\sustained].asBoolean, freq = \freq.kr(220);
{ 2 },
{ nil } if(this[\useFreqLag].asBoolean, {
); freq = Lag.kr(freq, \freqLag.kr(0.5));
});
var envDoneAction = if (
this[\sustained].asBoolean, signal = SynthDef.wrap(
{ 0 }, func: this[\func],
{ 2 } prependArgs: [freq, gate]
); );
gate = \gate.tr(0); Out.ar(
freq = \freq.kr(220); \out.kr(0),
signal,
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,
);
});
}
} }
Loading…
Cancel
Save