commit
0278f19a9d
@ -0,0 +1,9 @@
|
|||||||
|
(
|
||||||
|
name: "BmDspAlgs",
|
||||||
|
summary: "WIP! Collection of dictionaries, describing synth nodes.",
|
||||||
|
version: "0.1.0",
|
||||||
|
schelp: "BmDspalgs",
|
||||||
|
dependencies: ["NodeDictionary"],
|
||||||
|
license: "GPL",
|
||||||
|
copyright: "Bjornmossa 2023"
|
||||||
|
)
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
BmDspAlgs {
|
||||||
|
*getDict {
|
||||||
|
| relPath |
|
||||||
|
var path = PathName(relPath.resolveRelative);
|
||||||
|
var file = path.fullPath.load;
|
||||||
|
^NodeDictionary.newFrom(file);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,14 @@
|
|||||||
|
* Bjornmossa DSP algorythms library
|
||||||
|
This repo contains SC code for synthesis, processing and analysys algorythms.
|
||||||
|
* Installation
|
||||||
|
- Put in startup file: "SC_ALGS_PATH".setenv("path to library".standardizePath);
|
||||||
|
- install NodeDictionary extention
|
||||||
|
|
||||||
|
#+BEGIN_SRC sclang
|
||||||
|
(
|
||||||
|
var s = (("SC_ALGS_PATH".getenv) +/+ "synths/substractive/sin.instr.scd").load;
|
||||||
|
var d = NodeDictionary.newFrom(s);
|
||||||
|
|
||||||
|
d.makeSourceSynthDef();
|
||||||
|
)
|
||||||
|
#+END_SRC
|
||||||
@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
|freq|
|
||||||
|
|
||||||
|
var pitchEnv = Env([0, \pitchMultiplier.kr(2.0), 1.0], [0, \pitchDecay.kr(0.01)], [-2]).kr(gate: Impulse.kr(1));
|
||||||
|
var body = SinOsc.ar(freq * pitchEnv) * \toneGain.kr(1.0);
|
||||||
|
var noise = WhiteNoise.ar;
|
||||||
|
var noiseEnv = Env([0.0, 1.0, 0.0], [0, \noiseRelease.kr(0.01)], [-2]).kr(gate: Impulse.kr(1));
|
||||||
|
var tick = LPF.ar(noise * noiseEnv, \noiseFilter.kr(1000)) * \noiseGain.kr(-12.dbamp);
|
||||||
|
var sig = Mix([body, tick]);
|
||||||
|
|
||||||
|
sig;
|
||||||
|
}
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
///// NdefPreset('ping') settings:
|
||||||
|
List[
|
||||||
|
('curr' -> [ [ 'freq', 1351.9506519141 ], [ 'lol', 46.544517498748 ] ]),
|
||||||
|
('set_2' -> [ [ 'freq', 1324.340488568 ], [ 'lol', 62.413186126389 ] ]),
|
||||||
|
('set_3' -> [ [ 'freq', 1351.9506519141 ], [ 'lol', 46.544517498748 ] ]),
|
||||||
|
('set_4' -> [ [ 'freq', 2336.4021164021 ], [ 'lol', 161.92380952381 ] ])
|
||||||
|
]
|
||||||
@ -0,0 +1,6 @@
|
|||||||
|
///// NdefPreset('ping') settings:
|
||||||
|
List[
|
||||||
|
('curr' -> [ [ 'freq', 1351.9506519141 ], [ 'lol', 46.544517498748 ] ]),
|
||||||
|
('set_2' -> [ [ 'freq', 1324.340488568 ], [ 'lol', 62.413186126389 ] ]),
|
||||||
|
('set_3' -> [ [ 'freq', 1351.9506519141 ], [ 'lol', 46.544517498748 ] ])
|
||||||
|
]
|
||||||
@ -0,0 +1,6 @@
|
|||||||
|
///// NdefPreset('t') settings:
|
||||||
|
List[
|
||||||
|
('curr' -> [ [ 'amp', 0.035950781975341 ], [ 'attack', 0 ], [ 'envCurve', 0 ], [ 'freq', 48.025153769689 ], [ 'noiseFilter', 0 ], [ 'noiseGain', 0 ], [ 'noiseRelease', 0 ], [ 'pan', -0.20283582266837 ], [ 'pitchDecay', 0 ], [ 'pitchMultiplier', 0 ], [ 'release', 0 ], [ 'toneGain', 0 ], [ 'wet1', 0 ] ]),
|
||||||
|
('sub_kick' -> [ [ 'amp', 0.035950781975341 ], [ 'attack', 0 ], [ 'envCurve', 0 ], [ 'freq', 48.025153769689 ], [ 'noiseFilter', 0 ], [ 'noiseGain', 0 ], [ 'noiseRelease', 0 ], [ 'pan', -0.20283582266837 ], [ 'pitchDecay', 0 ], [ 'pitchMultiplier', 0 ], [ 'release', 0 ], [ 'toneGain', 0 ], [ 'wet1', 0 ] ]),
|
||||||
|
('metallic_click' -> [ [ 'amp', 0.035950781975341 ], [ 'attack', 0 ], [ 'envCurve', 0 ], [ 'freq', 48.025153769689 ], [ 'noiseFilter', 0 ], [ 'noiseGain', 0 ], [ 'noiseRelease', 0 ], [ 'pan', -0.20283582266837 ], [ 'pitchDecay', 0 ], [ 'pitchMultiplier', 0 ], [ 'release', 0 ], [ 'toneGain', 0 ], [ 'wet1', 0 ] ])
|
||||||
|
]
|
||||||
@ -0,0 +1,5 @@
|
|||||||
|
///// NdefPreset('t') settings:
|
||||||
|
List[
|
||||||
|
('curr' -> [ [ 'amp', 0.035950781975341 ], [ 'attack', 0 ], [ 'envCurve', 0 ], [ 'freq', 48.025153769689 ], [ 'noiseFilter', 0 ], [ 'noiseGain', 0 ], [ 'noiseRelease', 0 ], [ 'pan', -0.20283582266837 ], [ 'pitchDecay', 0 ], [ 'pitchMultiplier', 0 ], [ 'release', 0 ], [ 'toneGain', 0 ], [ 'wet1', 0 ] ]),
|
||||||
|
('sub_kick' -> [ [ 'amp', 0.035950781975341 ], [ 'attack', 0 ], [ 'envCurve', 0 ], [ 'freq', 48.025153769689 ], [ 'noiseFilter', 0 ], [ 'noiseGain', 0 ], [ 'noiseRelease', 0 ], [ 'pan', -0.20283582266837 ], [ 'pitchDecay', 0 ], [ 'pitchMultiplier', 0 ], [ 'release', 0 ], [ 'toneGain', 0 ], [ 'wet1', 0 ] ])
|
||||||
|
]
|
||||||
@ -0,0 +1,12 @@
|
|||||||
|
(
|
||||||
|
name: 'Amplitude_Analyzer',
|
||||||
|
func: {
|
||||||
|
| in |
|
||||||
|
Amplitude.ar(in, \attackTime.kr(0.01), \releaseTime.kr(0.01));
|
||||||
|
},
|
||||||
|
specs:(
|
||||||
|
attackTime: [0.01, 1.0],
|
||||||
|
releaseTime: [0.01, 1.0]
|
||||||
|
),
|
||||||
|
convertToKr: true
|
||||||
|
)
|
||||||
@ -0,0 +1,12 @@
|
|||||||
|
(
|
||||||
|
name: 'Tartini_Analyzer',
|
||||||
|
func: {
|
||||||
|
| in |
|
||||||
|
var freq, hasFreq;
|
||||||
|
# freq, hasFreq = Tartini.kr(in, \threshold.kr(0.93));
|
||||||
|
freq;
|
||||||
|
},
|
||||||
|
specs:(
|
||||||
|
threshold: [0.01, 1.0]
|
||||||
|
)
|
||||||
|
)
|
||||||
@ -0,0 +1,120 @@
|
|||||||
|
s.boot;
|
||||||
|
|
||||||
|
// load instrument and presets
|
||||||
|
(
|
||||||
|
var perc_gen_source = (("SC_ALGS_PATH".getenv)+/+"synths/perc_gen/instr.scd").load;
|
||||||
|
~perc_gen_dict = NodeDictionary.newFrom(perc_gen_source);
|
||||||
|
~perc_gen_presets = (("SC_ALGS_PATH".getenv)+/+"synths/perc_gen/presets.scd").load;
|
||||||
|
)
|
||||||
|
|
||||||
|
~perc_gen_presets.do({
|
||||||
|
|preset|
|
||||||
|
preset.key.postln;
|
||||||
|
// Make Ndef with same name as preset name
|
||||||
|
~perc_gen_dict.makeSourceNDef(preset.key);
|
||||||
|
// Apply settings
|
||||||
|
preset.value.do({|v| Ndef(preset.key).set(v[0], v[1])});
|
||||||
|
Ndef(preset.key).play;
|
||||||
|
});
|
||||||
|
|
||||||
|
// add some Tdefs
|
||||||
|
Tdef(\kick, {
|
||||||
|
loop{
|
||||||
|
Ndef(~perc_gen_presets[0].key).set(\amp, 8.dbamp);
|
||||||
|
Ndef(~perc_gen_presets[0].key).set(\gate, 1);
|
||||||
|
1.wait;
|
||||||
|
}
|
||||||
|
}).play;
|
||||||
|
|
||||||
|
Tdef(\kick2, {
|
||||||
|
(1/3).wait;
|
||||||
|
loop{
|
||||||
|
Ndef(~perc_gen_presets[0].key).set(\amp, 4.dbamp);
|
||||||
|
Ndef(~perc_gen_presets[0].key).set(\gate, 1);
|
||||||
|
1.wait;
|
||||||
|
}
|
||||||
|
}).play;
|
||||||
|
|
||||||
|
Tdef(\hat, {
|
||||||
|
var amps = Pseq([1, 1, 0, 1, 0, 1]).loop.asStream;
|
||||||
|
loop{
|
||||||
|
Ndef(~perc_gen_presets[1].key).set(\gate, 1);
|
||||||
|
Ndef(~perc_gen_presets[1].key).set(\amp, -6.dbamp * amps.next);
|
||||||
|
(1/6).wait;
|
||||||
|
}
|
||||||
|
}).play;
|
||||||
|
|
||||||
|
Tdef(\snare, {
|
||||||
|
loop{
|
||||||
|
Ndef(~perc_gen_presets[4].key).set(\amp, -8.dbamp);
|
||||||
|
Ndef(~perc_gen_presets[4].key).set(\gate, 1);
|
||||||
|
(4/3).wait;
|
||||||
|
}
|
||||||
|
}).play;
|
||||||
|
|
||||||
|
Tdef(\wood, {
|
||||||
|
var amps = Pbjorklund(4, 7).loop.asStream;
|
||||||
|
loop{
|
||||||
|
Ndef(~perc_gen_presets[3].key).set(\gate, 1);
|
||||||
|
Ndef(~perc_gen_presets[3].key).set(\amp, -6.dbamp * amps.next);
|
||||||
|
(1/8).wait;
|
||||||
|
}
|
||||||
|
}).play;
|
||||||
|
|
||||||
|
Ndef(\fx).ar(2);
|
||||||
|
Ndef(\fx, {
|
||||||
|
var in = \in.ar([0, 0]);
|
||||||
|
var t1 = \t1.kr(0.5);
|
||||||
|
var t2 = \t2.kr(0.5);
|
||||||
|
[in[0] + CombC.ar(in[0], 1.0, t1, 2.0), in[1] + CombC.ar(in[1], 1.0, t2, 2.0)];
|
||||||
|
});
|
||||||
|
|
||||||
|
Ndef(\fx).play;
|
||||||
|
|
||||||
|
(
|
||||||
|
// WORKS ONLY FOR LAST!
|
||||||
|
[0, 1, 3, 4].do({
|
||||||
|
|index|
|
||||||
|
Ndef(\fx) <<>.in Ndef(~perc_gen_presets[index].key);
|
||||||
|
});
|
||||||
|
)
|
||||||
|
|
||||||
|
// constrol fx delay time
|
||||||
|
Tdef(\fxdelay, {
|
||||||
|
var dTimes1 = Pseq([1/8, 1/16, 1/3]).loop.asStream;
|
||||||
|
var dTimes2 = Pseq([1/16, 1/3, 1/8]).loop.asStream;
|
||||||
|
loop{
|
||||||
|
Ndef(\fx).set(\t1, dTimes1);
|
||||||
|
Ndef(\fx).set(\t2, dTimes2);
|
||||||
|
(4/3).wait;
|
||||||
|
}
|
||||||
|
}).play;
|
||||||
|
|
||||||
|
(
|
||||||
|
Ndef(\fx2).ar(2);
|
||||||
|
Ndef(\fx2, {
|
||||||
|
var in = \in.ar([0, 0]);
|
||||||
|
var sig = PitchShift.ar(in, 0.2, Lag.kr(LFSaw.kr(0.1).range(0.2, 0.25)), 1/2);
|
||||||
|
sig = DiodeRingMod.ar(sig, LFPulse.ar(160));
|
||||||
|
FreeVerb.ar(sig, 0.8, 1.0, 0.25) * 10;
|
||||||
|
});
|
||||||
|
|
||||||
|
Ndef(\fx2).play;
|
||||||
|
)
|
||||||
|
|
||||||
|
Ndef(\fx2) <<>.in Ndef(~perc_gen_presets[1].key)
|
||||||
|
|
||||||
|
Tdef(\fxswitch, {
|
||||||
|
var source = Pseq([1, 3]).loop.asStream;
|
||||||
|
loop{
|
||||||
|
Ndef(\fx2) <<>.in Ndef(~perc_gen_presets[source.next].key);
|
||||||
|
6.wait;
|
||||||
|
}
|
||||||
|
}).play;
|
||||||
|
|
||||||
|
Tdef(\fxswitch).stop
|
||||||
|
|
||||||
|
(
|
||||||
|
Ndef.clear;
|
||||||
|
Tdef.clear;
|
||||||
|
)
|
||||||
@ -0,0 +1,10 @@
|
|||||||
|
///// NdefPreset('perc_gen') settings:
|
||||||
|
List[
|
||||||
|
('curr' -> [ [ 'amp', 1.0 ], [ 'attack', 0.0016867298746493 ], [ 'envCurve', -3.0996058378609 ], [ 'freq', 783.00516829582 ], [ 'noiseFilter', 17183.641205923 ], [ 'noiseGain', 0.50243244202976 ], [ 'noiseRelease', 0.065719434679166 ], [ 'pan', 0.0 ], [ 'pitchDecay', 0.13666666666667 ], [ 'pitchMultiplier', 1.123646709989 ], [ 'release', 0.041551969035191 ], [ 'toneGain', 0.29721955896453 ] ]),
|
||||||
|
('subkick' -> [ [ 'amp', 1 ], [ 'attack', 0.015291005291005 ], [ 'envCurve', -5.1111111111111 ], [ 'freq', 41.542278519329 ], [ 'noiseFilter', 1555.5555555556 ], [ 'noiseGain', 0.031746031746032 ], [ 'noiseRelease', 0.020529100529101 ], [ 'pan', 0 ], [ 'pitchDecay', 0.052222222222222 ], [ 'pitchMultiplier', 1.2524338624339 ], [ 'release', 0.041587301587302 ], [ 'toneGain', 1.0 ] ]),
|
||||||
|
('clicky_hat' -> [ [ 'amp', 1 ], [ 'attack', 0.0 ], [ 'envCurve', -3.0793650793651 ], [ 'freq', 9283.1776672256 ], [ 'noiseFilter', 9565.7142857143 ], [ 'noiseGain', 0.1957671957672 ], [ 'noiseRelease', 0.01 ], [ 'pan', 0 ], [ 'pitchDecay', 0.052222222222222 ], [ 'pitchMultiplier', 1.8631216931217 ], [ 'release', 0.01 ], [ 'toneGain', 0.31746031746032 ] ]),
|
||||||
|
('noisy_snare' -> [ [ 'amp', 1 ], [ 'attack', 0.026455026455026 ], [ 'envCurve', -3.3968253968254 ], [ 'freq', 321.64677553341 ], [ 'noiseFilter', 14519.365079365 ], [ 'noiseGain', 0.34391534391534 ], [ 'noiseRelease', 0.88391534391534 ], [ 'pan', 0 ], [ 'pitchDecay', 0.13666666666667 ], [ 'pitchMultiplier', 0.77862433862434 ], [ 'release', 0.50486772486772 ], [ 'toneGain', 0.0 ] ]),
|
||||||
|
('wood_1' -> [ [ 'amp', 1 ], [ 'attack', 0.0 ], [ 'envCurve', -3.0793650793651 ], [ 'freq', 831.91243261437 ], [ 'noiseFilter', 17365.079365079 ], [ 'noiseGain', 0.51322751322751 ], [ 'noiseRelease', 0.01 ], [ 'pan', 0 ], [ 'pitchDecay', 0.13666666666667 ], [ 'pitchMultiplier', 1.1471428571429 ], [ 'release', 0.01 ], [ 'toneGain', 0.31746031746032 ] ]),
|
||||||
|
('noisy_wood' -> [ [ 'amp', 1.0 ], [ 'attack', 0.0016867298746493 ], [ 'envCurve', -3.0996058378609 ], [ 'freq', 783.00516829582 ], [ 'noiseFilter', 17183.641205923 ], [ 'noiseGain', 0.50243244202976 ], [ 'noiseRelease', 0.065719434679166 ], [ 'pan', 0.0 ], [ 'pitchDecay', 0.13666666666667 ], [ 'pitchMultiplier', 1.123646709989 ], [ 'release', 0.041551969035191 ], [ 'toneGain', 0.29721955896453 ] ]),
|
||||||
|
('laser_click' -> [ [ 'amp', 1.0 ], [ 'attack', 0.00020376602512542 ], [ 'envCurve', -3.0818102716666 ], [ 'freq', 6885.8872393363 ], [ 'noiseFilter', 10486.000759297 ], [ 'noiseGain', 0.23281400404053 ], [ 'noiseRelease', 0.016731206873993 ], [ 'pan', 0.0 ], [ 'pitchDecay', 0.062423564504101 ], [ 'pitchMultiplier', 1.7737891448238 ], [ 'release', 0.013811647265996 ], [ 'toneGain', 0.31501512515881 ] ])
|
||||||
|
]
|
||||||
@ -0,0 +1,9 @@
|
|||||||
|
///// NdefPreset('perc_gen') settings:
|
||||||
|
List[
|
||||||
|
('curr' -> [ [ 'amp', 1.0 ], [ 'attack', 0.0016867298746493 ], [ 'envCurve', -3.0996058378609 ], [ 'freq', 783.00516829582 ], [ 'noiseFilter', 17183.641205923 ], [ 'noiseGain', 0.50243244202976 ], [ 'noiseRelease', 0.065719434679166 ], [ 'pan', 0.0 ], [ 'pitchDecay', 0.13666666666667 ], [ 'pitchMultiplier', 1.123646709989 ], [ 'release', 0.041551969035191 ], [ 'toneGain', 0.29721955896453 ] ]),
|
||||||
|
('subkick' -> [ [ 'amp', 1 ], [ 'attack', 0.015291005291005 ], [ 'envCurve', -5.1111111111111 ], [ 'freq', 41.542278519329 ], [ 'noiseFilter', 1555.5555555556 ], [ 'noiseGain', 0.031746031746032 ], [ 'noiseRelease', 0.020529100529101 ], [ 'pan', 0 ], [ 'pitchDecay', 0.052222222222222 ], [ 'pitchMultiplier', 1.2524338624339 ], [ 'release', 0.041587301587302 ], [ 'toneGain', 1.0 ] ]),
|
||||||
|
('clicky_hat' -> [ [ 'amp', 1 ], [ 'attack', 0.0 ], [ 'envCurve', -3.0793650793651 ], [ 'freq', 9283.1776672256 ], [ 'noiseFilter', 9565.7142857143 ], [ 'noiseGain', 0.1957671957672 ], [ 'noiseRelease', 0.01 ], [ 'pan', 0 ], [ 'pitchDecay', 0.052222222222222 ], [ 'pitchMultiplier', 1.8631216931217 ], [ 'release', 0.01 ], [ 'toneGain', 0.31746031746032 ] ]),
|
||||||
|
('noisy_snare' -> [ [ 'amp', 1 ], [ 'attack', 0.026455026455026 ], [ 'envCurve', -3.3968253968254 ], [ 'freq', 321.64677553341 ], [ 'noiseFilter', 14519.365079365 ], [ 'noiseGain', 0.34391534391534 ], [ 'noiseRelease', 0.88391534391534 ], [ 'pan', 0 ], [ 'pitchDecay', 0.13666666666667 ], [ 'pitchMultiplier', 0.77862433862434 ], [ 'release', 0.50486772486772 ], [ 'toneGain', 0.0 ] ]),
|
||||||
|
('wood_1' -> [ [ 'amp', 1 ], [ 'attack', 0.0 ], [ 'envCurve', -3.0793650793651 ], [ 'freq', 831.91243261437 ], [ 'noiseFilter', 17365.079365079 ], [ 'noiseGain', 0.51322751322751 ], [ 'noiseRelease', 0.01 ], [ 'pan', 0 ], [ 'pitchDecay', 0.13666666666667 ], [ 'pitchMultiplier', 1.1471428571429 ], [ 'release', 0.01 ], [ 'toneGain', 0.31746031746032 ] ]),
|
||||||
|
('noisy_wood' -> [ [ 'amp', 1.0 ], [ 'attack', 0.0016867298746493 ], [ 'envCurve', -3.0996058378609 ], [ 'freq', 783.00516829582 ], [ 'noiseFilter', 17183.641205923 ], [ 'noiseGain', 0.50243244202976 ], [ 'noiseRelease', 0.065719434679166 ], [ 'pan', 0.0 ], [ 'pitchDecay', 0.13666666666667 ], [ 'pitchMultiplier', 1.123646709989 ], [ 'release', 0.041551969035191 ], [ 'toneGain', 0.29721955896453 ] ])
|
||||||
|
]
|
||||||
@ -0,0 +1,31 @@
|
|||||||
|
s.boot;
|
||||||
|
|
||||||
|
// load instrument and create NDef
|
||||||
|
(
|
||||||
|
var perc_gen_source = (("SC_ALGS_PATH".getenv)+/+"synths/perc_gen/instr.scd").load;
|
||||||
|
~perc_gen_dict = NodeDictionary.newFrom(perc_gen_source);
|
||||||
|
~perc_gen_dict.makeSourceNDef();
|
||||||
|
)
|
||||||
|
|
||||||
|
// apply specs from dictionary
|
||||||
|
~perc_gen_dict[\specs].keysValuesDo({|k, v| Ndef(~perc_gen_dict[\name]).addSpec(k, v);});
|
||||||
|
|
||||||
|
Ndef(~perc_gen_dict[\name]).edit;
|
||||||
|
Ndef(~perc_gen_dict[\name]).play;
|
||||||
|
|
||||||
|
p = NdefPreset(Ndef(~perc_gen_dict[\name]));
|
||||||
|
w = Window("Preset test", Rect(200, 200, 420, 350)).front;
|
||||||
|
w.addFlowLayout;
|
||||||
|
g = ProxyPresetGui(p, parent: w);
|
||||||
|
b = NdefGui(Ndef(~perc_gen_dict[\name]), 8, parent: w);
|
||||||
|
|
||||||
|
// Run periodical trigger
|
||||||
|
Tdef(\t, {
|
||||||
|
loop {
|
||||||
|
Ndef(~perc_gen_dict[\name]).set(\gate, 1);
|
||||||
|
1.wait;
|
||||||
|
}
|
||||||
|
}).play;
|
||||||
|
|
||||||
|
Ndef.clear;
|
||||||
|
Tdef.clear;
|
||||||
@ -0,0 +1,36 @@
|
|||||||
|
(
|
||||||
|
name: 'granular_looper',
|
||||||
|
func: {
|
||||||
|
| buf |
|
||||||
|
var frames = BufFrames.kr(buf);
|
||||||
|
var tFreq = \trgFreq.kr(100);
|
||||||
|
var trg = Impulse.ar(tFreq);
|
||||||
|
var overlap = \overlap.kr(2);
|
||||||
|
var resetPos = \resetPos.kr(0);
|
||||||
|
var resetTrig = Changed.kr(resetPos, 1);
|
||||||
|
var pos = Phasor.ar(
|
||||||
|
trig: resetTrig,
|
||||||
|
rate: BufRateScale.kr(buf) * \direction.kr(1),
|
||||||
|
start: \start.kr(0),
|
||||||
|
end: \end.kr(1.0) * frames,
|
||||||
|
resetPos: resetPos
|
||||||
|
);
|
||||||
|
|
||||||
|
GrainBuf.ar(
|
||||||
|
numChannels:2,
|
||||||
|
trigger: trg,
|
||||||
|
dur: overlap / tFreq,
|
||||||
|
sndbuf: buf,
|
||||||
|
rate: BufRateScale.kr(buf) * \rate.kr(1),
|
||||||
|
pos: pos / frames,
|
||||||
|
interp: 2,
|
||||||
|
pan: \pan.kr(0),
|
||||||
|
envbufnum: -1,
|
||||||
|
);
|
||||||
|
},
|
||||||
|
limitDuration: true,
|
||||||
|
specs:(
|
||||||
|
rate: [-10,0, 10.0],
|
||||||
|
pan: [-1.0, 1.0]
|
||||||
|
)
|
||||||
|
)
|
||||||
@ -0,0 +1,48 @@
|
|||||||
|
(
|
||||||
|
name: 'granular_sampler',
|
||||||
|
func: {
|
||||||
|
| freq, gate |
|
||||||
|
var buf = \buf.kr;
|
||||||
|
var trigger = gate;
|
||||||
|
var bufFrames = BufFrames.kr(buf);
|
||||||
|
var grainTriggerFreq = \grainTriggerFreq.kr(20);
|
||||||
|
|
||||||
|
var positionRamp = Phasor.ar(
|
||||||
|
trigger,
|
||||||
|
rate: BufRateScale.kr(buf) * \rate.kr(1),
|
||||||
|
start: \sampleStart.kr(0),
|
||||||
|
end: \sampleEnd.kr(1),
|
||||||
|
) * \direction.kr(1);
|
||||||
|
|
||||||
|
var envelope = EnvGen.kr(
|
||||||
|
Env([0, 1, 1, 0], [0, BufDur.kr(buf) - 0.01, 0]),
|
||||||
|
trigger
|
||||||
|
);
|
||||||
|
|
||||||
|
GrainBuf.ar(
|
||||||
|
numChannels: 2,
|
||||||
|
trigger: Impulse.ar(grainTriggerFreq),
|
||||||
|
dur: \density.kr(2) / grainTriggerFreq,
|
||||||
|
sndbuf: buf,
|
||||||
|
rate: \grainRate.kr(1),
|
||||||
|
pos: positionRamp / bufFrames,
|
||||||
|
interp: 0,
|
||||||
|
pan: \pan.kr(0),
|
||||||
|
envbufnum: -1,
|
||||||
|
) * envelope;
|
||||||
|
},
|
||||||
|
specs:(
|
||||||
|
density: [0.1, 10.0, \lin ,0.1, 2],
|
||||||
|
direction: [-1, 1, \lin, 1, 1],
|
||||||
|
grainRate: [0.1, 2, \lin, 0.1, 1],
|
||||||
|
grainTriggerFreq: [0.1, 200, \lin, 0.1, 20],
|
||||||
|
pan: [-1.0, 1.0, \lin, 0.1, 0],
|
||||||
|
rate: [0.1, 2, \lin, 0.01, 1],
|
||||||
|
),
|
||||||
|
useEnv: true,
|
||||||
|
defaults:(
|
||||||
|
attack: 0.01,
|
||||||
|
release: 0.1,
|
||||||
|
curve: 1
|
||||||
|
),
|
||||||
|
)
|
||||||
@ -0,0 +1,50 @@
|
|||||||
|
(
|
||||||
|
name: 'granular_sampler_stereo',
|
||||||
|
func: {
|
||||||
|
| freq, gate |
|
||||||
|
var bufL = \bufL.kr;
|
||||||
|
var bufR= \bufR.kr;
|
||||||
|
var trigger = gate;
|
||||||
|
var bufFrames = BufFrames.kr(bufL);
|
||||||
|
var grainTriggerFreq = \grainTriggerFreq.kr(5);
|
||||||
|
|
||||||
|
var positionRamp = Phasor.ar(
|
||||||
|
trigger,
|
||||||
|
rate: BufRateScale.kr(bufL) * \rate.kr(1),
|
||||||
|
start: bufFrames * \sampleStart.kr(0),
|
||||||
|
end: bufFrames * \sampleEnd.kr(1),
|
||||||
|
) * \direction.kr(1);
|
||||||
|
|
||||||
|
var envelope = EnvGen.kr(
|
||||||
|
Env([0, 1, 1, 0], [0, BufDur.kr(bufL) - 0.01, 0]),
|
||||||
|
trigger
|
||||||
|
);
|
||||||
|
|
||||||
|
GrainBuf.ar(
|
||||||
|
numChannels: 1,
|
||||||
|
trigger: Impulse.ar(grainTriggerFreq),
|
||||||
|
dur: \density.kr(2) / grainTriggerFreq,
|
||||||
|
sndbuf: [bufL,bufR],
|
||||||
|
rate: \grainRate.kr(1),
|
||||||
|
pos: positionRamp / bufFrames ,
|
||||||
|
interp: 2,
|
||||||
|
envbufnum: -1,
|
||||||
|
) * envelope;
|
||||||
|
},
|
||||||
|
specs:(
|
||||||
|
density: [0.1, 10.0, \lin ,0.1, 2],
|
||||||
|
direction: [-1, 1, \lin, 1, 1],
|
||||||
|
grainRate: [0.1, 2, \lin, 0.1, 1],
|
||||||
|
grainTriggerFreq: [0.1, 200, \lin, 0.1, 20],
|
||||||
|
pan: [-1.0, 1.0, \lin, 0.1, 0],
|
||||||
|
rate: [0.1, 2, \lin, 0.01, 1],
|
||||||
|
sampleStart: [0.0, 1.0, \lin, 0.001, 0.0],
|
||||||
|
sampleEnd: [1.0, 0.0, \lin, 0.001, 1],
|
||||||
|
),
|
||||||
|
useEnv: false,
|
||||||
|
defaults:(
|
||||||
|
attack: 0.01,
|
||||||
|
release: 0.1,
|
||||||
|
curve: 1
|
||||||
|
),
|
||||||
|
)
|
||||||
@ -0,0 +1,19 @@
|
|||||||
|
(
|
||||||
|
name: 'recorder',
|
||||||
|
func: {
|
||||||
|
| buf |
|
||||||
|
RecordBuf.ar(
|
||||||
|
SoundIn.ar(\in.kr(0)),
|
||||||
|
buf,
|
||||||
|
Phasor.ar(BufSamples.kr(buf), resetPos: \reset.kr(1000)),
|
||||||
|
\recLevel.kr(1.0),
|
||||||
|
run: \record.kr(1),
|
||||||
|
preLevel: \preLevel.kr(0.0)
|
||||||
|
);
|
||||||
|
},
|
||||||
|
specs:(
|
||||||
|
record: [0, 1],
|
||||||
|
preLevel: [0.0, 1.0],
|
||||||
|
recLevel: [0.0, 1.0]
|
||||||
|
)
|
||||||
|
)
|
||||||
@ -0,0 +1,32 @@
|
|||||||
|
(
|
||||||
|
name: 'Sampler_Enveloped',
|
||||||
|
func: {
|
||||||
|
| buf |
|
||||||
|
var start = \start.kr(0), end = \end.kr(0);
|
||||||
|
var phasor = Phasor.ar(rate: BufRateScale.kr(buf).poll, start: start, end: end);
|
||||||
|
var reader = BufRd.ar(1, buf, phasor, loop:1, interpolation:4);
|
||||||
|
|
||||||
|
reader;
|
||||||
|
// var start = \start.kr(0.0);
|
||||||
|
// var end = \end.kr(1.0);
|
||||||
|
// var phasor = EnvGen.ar(
|
||||||
|
// Env([start, end], [end - start], curve: \curve.kr(0)),
|
||||||
|
// //gate: Impulse.kr(1),
|
||||||
|
// timeScale: BufRateScale.kr(buf).reciprocal,
|
||||||
|
// doneAction: 0
|
||||||
|
// ) * SampleRate.ir;
|
||||||
|
|
||||||
|
// phasor.poll;
|
||||||
|
|
||||||
|
// //BufRd.ar(1, buf, phasor, loop:0, interpolation:4);
|
||||||
|
// EnvGen.kr(Env([0,1,1,0], [0.01, end - start - 0.03, 0.01] ), doneAction: 2);
|
||||||
|
|
||||||
|
// BufRd.ar(1, buf, phasor, loop:0, interpolation:4);
|
||||||
|
},
|
||||||
|
specs:(
|
||||||
|
start: [0.0, 1.0],
|
||||||
|
end: [0.0, 1.0],
|
||||||
|
curve: [-5, 5],
|
||||||
|
rate: [0,0, 1.0]
|
||||||
|
)
|
||||||
|
)
|
||||||
@ -0,0 +1,25 @@
|
|||||||
|
(
|
||||||
|
name: 'saw_bass',
|
||||||
|
func: {
|
||||||
|
| freq |
|
||||||
|
|
||||||
|
var s1 = Saw.ar(freq);
|
||||||
|
var s2 = Saw.ar(freq * \detune.kr(1));
|
||||||
|
var s3 = SinOsc.ar(freq * 0.5);
|
||||||
|
|
||||||
|
Pan2.ar(Mix([s1, s2, s3]) * (SinOsc.ar(freq * 0.5, rrand(0.01, 2.0)) * \modRate.kr(100)), \pan.kr(0));
|
||||||
|
},
|
||||||
|
//sustained: true,
|
||||||
|
useFreqLag: true,
|
||||||
|
useSaturation: true,
|
||||||
|
saturationSteps: 4,
|
||||||
|
useEnv: true,
|
||||||
|
specs:(
|
||||||
|
modRate: [0.01, 2.0]
|
||||||
|
),
|
||||||
|
defaults:(
|
||||||
|
attack: 0.01,
|
||||||
|
release: 0.1,
|
||||||
|
curve: 1
|
||||||
|
)
|
||||||
|
)
|
||||||
@ -0,0 +1,25 @@
|
|||||||
|
(
|
||||||
|
name: 'distorted_sin',
|
||||||
|
func: {
|
||||||
|
| freq, gate |
|
||||||
|
var sig = SinOsc.ar(freq, \phase.kr(2pi).mod(2pi));
|
||||||
|
//4.do { sig = HPF.ar(sig, 60); };
|
||||||
|
//4.do { sig = LPF.ar(sig, \lpf.kr(100)); };
|
||||||
|
4.do { sig = sig.tanh; };
|
||||||
|
[sig, DelayN.ar(sig, 0.2, 0.01)] * 0.5;
|
||||||
|
},
|
||||||
|
specs:(
|
||||||
|
phase: [-25.0, 25.0, \lin, 0.1, 6.28],
|
||||||
|
lpf: [60, 4000, \lin, 1, 100],
|
||||||
|
),
|
||||||
|
useSaturation: true,
|
||||||
|
saturationSteps: 6,
|
||||||
|
useEnv: true,
|
||||||
|
defaults:(
|
||||||
|
attack: 0.01,
|
||||||
|
release: 0.1,
|
||||||
|
curve: 1
|
||||||
|
),
|
||||||
|
usePan: true,
|
||||||
|
panning: \splay
|
||||||
|
)
|
||||||
@ -0,0 +1,38 @@
|
|||||||
|
(
|
||||||
|
name: 'delayed_pulse_drone',
|
||||||
|
func: {
|
||||||
|
|freq|
|
||||||
|
var ap;
|
||||||
|
var numWaves = 6;
|
||||||
|
var formants = Array.series(numWaves, 1, \freqAddStep.ir(1.25));
|
||||||
|
var freqs = formants * freq;
|
||||||
|
var widths = { Rand(0.0, 1.0) }!numWaves;
|
||||||
|
var sig = Pulse.ar(freqs, widths);
|
||||||
|
|
||||||
|
sig = sig.collect { |s, i| s * (i + 1).reciprocal; };
|
||||||
|
sig = sig.collect { |s| OnePole.ar(s, \onePoleCoef.kr(0.5)); };
|
||||||
|
ap = numWaves.collect { |it|
|
||||||
|
AllpassC.ar(
|
||||||
|
sig[it],
|
||||||
|
0.2,
|
||||||
|
SinOsc.kr(\delayModFreq.kr(0.1), rrand(0.0, 2pi)).range(0.08, 0.1))
|
||||||
|
};
|
||||||
|
sig = LinXFade2.ar(sig, ap, \drywet.kr(0.5));
|
||||||
|
sig = SplayAz.ar(numWaves, sig, orientation: \orientation.kr(0.5));
|
||||||
|
|
||||||
|
sig;
|
||||||
|
},
|
||||||
|
useEnv: true,
|
||||||
|
specs:(
|
||||||
|
freqAddStep: [1.0, 10.0],
|
||||||
|
onePoleCoef: [0.0, 0.98],
|
||||||
|
drywet: [0.0, 1.0],
|
||||||
|
orientation: [0.0, 10.0],
|
||||||
|
delayModFreq: [0.0001, 1.0]
|
||||||
|
),
|
||||||
|
defaults:(
|
||||||
|
attack: 0.01,
|
||||||
|
release: 0.1,
|
||||||
|
curve: 1
|
||||||
|
)
|
||||||
|
)
|
||||||
@ -0,0 +1,36 @@
|
|||||||
|
(
|
||||||
|
name: 'perc_gen',
|
||||||
|
func: {
|
||||||
|
|freq, gate|
|
||||||
|
|
||||||
|
var pitchEnv = Env([0, \pitchMultiplier.kr(2.0), 1.0], [0, \pitchDecay.kr(0.01)], [-2]).kr(gate: gate);
|
||||||
|
var f = freq * pitchEnv;
|
||||||
|
var ff = f * (\fRatio1.kr(1) / \fRatio2.kr(1));
|
||||||
|
var mod = SinOsc.ar(ff) * f * \modIndex.kr(0.0);
|
||||||
|
var body = SinOsc.ar(f + mod) * \toneGain.kr(1.0);
|
||||||
|
var noise = WhiteNoise.ar;
|
||||||
|
var noiseEnv = Env([0.0, 1.0, 0.0], [0, \noiseRelease.kr(0.01)], [-2]).kr(gate: gate);
|
||||||
|
var tick = LPF.ar(noise * noiseEnv, \noiseFilter.kr(1000)) * \noiseGain.kr(-12.dbamp);
|
||||||
|
var sig = Mix([body, tick]);
|
||||||
|
|
||||||
|
sig;
|
||||||
|
},
|
||||||
|
useSaturation: true,
|
||||||
|
saturationSteps: 4,
|
||||||
|
useEnv: true,
|
||||||
|
defaults: (attack: 0.01, decay: 0.05, curve: -4),
|
||||||
|
specs:(
|
||||||
|
attack: [0.0, 1.0],
|
||||||
|
envCurve: [-6, 6],
|
||||||
|
noiseFilter: [80, 20000],
|
||||||
|
noiseGain: [0.0, 1.0],
|
||||||
|
noiseRelease: [0.01, 2.0],
|
||||||
|
pitchDecay: [0.01, 4.0],
|
||||||
|
pitchMultiplier: [0.01, 2.0],
|
||||||
|
release: [0.01, 2.0],
|
||||||
|
toneGain: [0.0, 1.0],
|
||||||
|
fRatio1: [1.0, 10.0],
|
||||||
|
fRatio2: [1.0, 10.0],
|
||||||
|
modIndex: [0.0, 1.0]
|
||||||
|
)
|
||||||
|
)
|
||||||
@ -0,0 +1,9 @@
|
|||||||
|
///// NdefPreset('perc_gen') settings:
|
||||||
|
List[
|
||||||
|
('subkick' -> [ [ 'amp', 1 ], [ 'attack', 0.015291005291005 ], [ 'envCurve', -5.1111111111111 ], [ 'freq', 41.542278519329 ], [ 'noiseFilter', 1555.5555555556 ], [ 'noiseGain', 0.031746031746032 ], [ 'noiseRelease', 0.020529100529101 ], [ 'pan', 0 ], [ 'pitchDecay', 0.052222222222222 ], [ 'pitchMultiplier', 1.2524338624339 ], [ 'release', 0.041587301587302 ], [ 'toneGain', 1.0 ] ]),
|
||||||
|
('clicky_hat' -> [ [ 'amp', 1 ], [ 'attack', 0.0 ], [ 'envCurve', -3.0793650793651 ], [ 'freq', 9283.1776672256 ], [ 'noiseFilter', 9565.7142857143 ], [ 'noiseGain', 0.1957671957672 ], [ 'noiseRelease', 0.01 ], [ 'pan', 0 ], [ 'pitchDecay', 0.052222222222222 ], [ 'pitchMultiplier', 1.8631216931217 ], [ 'release', 0.01 ], [ 'toneGain', 0.31746031746032 ] ]),
|
||||||
|
('noisy_snare' -> [ [ 'amp', 1 ], [ 'attack', 0.026455026455026 ], [ 'envCurve', -3.3968253968254 ], [ 'freq', 321.64677553341 ], [ 'noiseFilter', 14519.365079365 ], [ 'noiseGain', 0.34391534391534 ], [ 'noiseRelease', 0.88391534391534 ], [ 'pan', 0 ], [ 'pitchDecay', 0.13666666666667 ], [ 'pitchMultiplier', 0.77862433862434 ], [ 'release', 0.50486772486772 ], [ 'toneGain', 0.0 ] ]),
|
||||||
|
('wood_1' -> [ [ 'amp', 1 ], [ 'attack', 0.0 ], [ 'envCurve', -3.0793650793651 ], [ 'freq', 831.91243261437 ], [ 'noiseFilter', 17365.079365079 ], [ 'noiseGain', 0.51322751322751 ], [ 'noiseRelease', 0.01 ], [ 'pan', 0 ], [ 'pitchDecay', 0.13666666666667 ], [ 'pitchMultiplier', 1.1471428571429 ], [ 'release', 0.01 ], [ 'toneGain', 0.31746031746032 ] ]),
|
||||||
|
('noisy_wood' -> [ [ 'amp', 1.0 ], [ 'attack', 0.0016867298746493 ], [ 'envCurve', -3.0996058378609 ], [ 'freq', 783.00516829582 ], [ 'noiseFilter', 17183.641205923 ], [ 'noiseGain', 0.50243244202976 ], [ 'noiseRelease', 0.065719434679166 ], [ 'pan', 0.0 ], [ 'pitchDecay', 0.13666666666667 ], [ 'pitchMultiplier', 1.123646709989 ], [ 'release', 0.041551969035191 ], [ 'toneGain', 0.29721955896453 ] ]),
|
||||||
|
('laser_click' -> [ [ 'amp', 1.0 ], [ 'attack', 0.00020376602512542 ], [ 'envCurve', -3.0818102716666 ], [ 'freq', 6885.8872393363 ], [ 'noiseFilter', 10486.000759297 ], [ 'noiseGain', 0.23281400404053 ], [ 'noiseRelease', 0.016731206873993 ], [ 'pan', 0.0 ], [ 'pitchDecay', 0.062423564504101 ], [ 'pitchMultiplier', 1.7737891448238 ], [ 'release', 0.013811647265996 ], [ 'toneGain', 0.31501512515881 ] ])
|
||||||
|
]
|
||||||
@ -0,0 +1,17 @@
|
|||||||
|
(
|
||||||
|
name: 'tonal_kick',
|
||||||
|
func: (("SC_ALGS_PATH".getenv)+/+"algs/envedSinWithNoise.scd").load,
|
||||||
|
useSaturation: true,
|
||||||
|
saturationSteps: 4,
|
||||||
|
useEnv: true,
|
||||||
|
defaults: (attack: 0.01, decay: 0.05, curve: -4),
|
||||||
|
specs:(
|
||||||
|
pitchMultiplier: [0.01, 2.0],
|
||||||
|
pitchDecay: [0.01, 4.0],
|
||||||
|
noiseFilter: [80, 20000],
|
||||||
|
noiseGain: [0.0, 1.0],
|
||||||
|
attack: [0.0, 1.0],
|
||||||
|
release: [0.01, 2.0]
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
@ -0,0 +1,24 @@
|
|||||||
|
(
|
||||||
|
name: 'resonant_hat',
|
||||||
|
func: {
|
||||||
|
var env = Env([1, 0], [\decay.kr(0.05)], \envCurve.kr(-4)).kr(2);
|
||||||
|
var sig = BrownNoise.ar;
|
||||||
|
var filterFreq = \filtFreq.kr(8000);
|
||||||
|
var bandWidth = \bandwidth.kr(0.05);
|
||||||
|
var theta = (filterFreq * 2 * 3.14159) / SampleRate.ir();
|
||||||
|
var r = 1 - ((theta * bandWidth) / 2);
|
||||||
|
var a0 = (1 - r.pow(2)) / 2;
|
||||||
|
var ampComp = 1 - ( 1 / a0) * a0.sqrt;
|
||||||
|
|
||||||
|
sig = Resonz.ar(sig, filterFreq , bandWidth);
|
||||||
|
sig * ampComp;
|
||||||
|
},
|
||||||
|
specs:(
|
||||||
|
decay: [0.01, 2.0],
|
||||||
|
envCurve: [-4, 4],
|
||||||
|
bandwidth: [0.01, 1.0],
|
||||||
|
noiseGain: [0.0, 1.0],
|
||||||
|
attack: [0.0, 1.0],
|
||||||
|
release: [0.01, 2.0]
|
||||||
|
)
|
||||||
|
)
|
||||||
@ -0,0 +1,9 @@
|
|||||||
|
(
|
||||||
|
name: 'sin',
|
||||||
|
func: (("SC_ALGS_PATH".getenv) +/+ "synths/substractive/sin.scd").load,
|
||||||
|
useEnv: true,
|
||||||
|
useSaturation: true,
|
||||||
|
saturationSteps: 4,
|
||||||
|
useLfo: true,
|
||||||
|
lfoWave: \saw
|
||||||
|
)
|
||||||
@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
|freq|
|
||||||
|
SinOsc.ar(freq);
|
||||||
|
}
|
||||||
@ -0,0 +1,29 @@
|
|||||||
|
NodeDictionary : IdentityDictionary {
|
||||||
|
getDefaultOr {
|
||||||
|
| key, defaultValue |
|
||||||
|
if(this[\defaults][key].isNil, {
|
||||||
|
^defaultValue
|
||||||
|
}, {
|
||||||
|
^this[\defaults][key]
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
makeAnalysysNdef {
|
||||||
|
^Ndef(this[\name], {
|
||||||
|
var input = SoundIn.ar(\bus.kr(0));
|
||||||
|
var signal = SynthDef.wrap(
|
||||||
|
func: this[\func],
|
||||||
|
prependArgs: [input]
|
||||||
|
);
|
||||||
|
|
||||||
|
if(this[\convertToKr].isNil.not
|
||||||
|
and:
|
||||||
|
this[\convertToKr] == true,
|
||||||
|
{
|
||||||
|
A2K.kr(signal);
|
||||||
|
}, {
|
||||||
|
signal;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,14 @@
|
|||||||
|
+ NodeDictionary {
|
||||||
|
makeBufferProcessingNdef {
|
||||||
|
| name, buf, quant = 1.0 |
|
||||||
|
var ndef = Ndef(name);
|
||||||
|
ndef.proxyspace.quant = quant;
|
||||||
|
ndef[0] = SynthDef.wrap(
|
||||||
|
func: this[\func],
|
||||||
|
prependArgs: [buf]
|
||||||
|
);
|
||||||
|
|
||||||
|
ndef.play;
|
||||||
|
^ndef;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,32 @@
|
|||||||
|
+ NodeDictionary {
|
||||||
|
makeBufferProcessingSynthDef {
|
||||||
|
SynthDef(this[\name], {
|
||||||
|
var buf = \buf.kr;
|
||||||
|
var signal = SynthDef.wrap(
|
||||||
|
func: this[\func],
|
||||||
|
prependArgs: [buf]
|
||||||
|
);
|
||||||
|
|
||||||
|
signal = Pan2.ar(
|
||||||
|
signal * \amp.kr(1),
|
||||||
|
\pan.kr(0)
|
||||||
|
);
|
||||||
|
|
||||||
|
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);
|
||||||
|
});
|
||||||
|
|
||||||
|
Out.ar(
|
||||||
|
\out.kr(0),
|
||||||
|
signal
|
||||||
|
);
|
||||||
|
}).add;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,74 @@
|
|||||||
|
+ 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);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,84 @@
|
|||||||
|
+ 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,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,15 @@
|
|||||||
|
BatLib
|
||||||
|
Bjorklund
|
||||||
|
crucial-library
|
||||||
|
ddwCommon
|
||||||
|
ddwGUIEnhancements
|
||||||
|
ddwMixerChannel
|
||||||
|
Dirt-Samples
|
||||||
|
JITLibExtensions
|
||||||
|
miSCellaneous_lib
|
||||||
|
quarks
|
||||||
|
SuperDirt
|
||||||
|
Vowel
|
||||||
|
|
||||||
|
ChordSymbol
|
||||||
|
mi-UGens
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
* About
|
||||||
|
* Structure
|
||||||
|
|
||||||
|
- NodeDictionary
|
||||||
|
|
||||||
|
Set of Dictionary class extentions for generating
|
||||||
|
nodes from declarative definitions
|
||||||
Loading…
Reference in new issue