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