1
0

feat: load synthef on startup

This commit is contained in:
2025-06-14 16:41:54 +02:00
parent fddbf09d99
commit 6f90b4d1cf
26 changed files with 214 additions and 152 deletions

34
synthdefs/formoo.scd Normal file
View File

@ -0,0 +1,34 @@
SynthDef(\formoo, {
arg formants = #[850, 1610];
var sig, env;
env = Env.perc(\attack.kr(0), \decay.kr(1)).ar(Done.freeSelf);
sig = 10.collect{
var octave = [1, 2, 0.5, 1.5];
// base freq * octave * detuning over time
// sounds like a chorus fx
var voice = Saw.ar(\freq.kr(220) * LFNoise2.kr(3).linlin(-1, 1, 0.99, 1.1) * octave.choose);
// formant * detuning; very high resonance
voice = RLPF.ar(
voice,
formants *
formants.size.collect{
LFNoise2.kr(3).linlin(-1, 1, 0.98, 1.05)
}, 0.05).sum;
// detune and blur some more
voice = voice + PitchShift.ar(voice, {Rand(0.01, 0.1)}, 0.98) * 0.5;
// a bit of distortion
voice = voice.softclip;
};
sig = Splay.ar(sig);
// narrowing the spectrum a little more
sig = RLPF.ar(
sig,
\ff.kr(4700) *
LFNoise2.kr(1).linlin(-1, 1, 0.95, 1.05),
\qr.kr(0.9)
);
sig = sig * env;
sig = sig * \amp.kr(0.25);
sig = Limiter.ar(sig);
Out.ar(\out.kr(0), sig);
}).add;

18
synthdefs/granulator.scd Normal file
View File

@ -0,0 +1,18 @@
/* Generic modulable buffer granulator */
SynthDef(\grainoo, {
|buf|
var sig;
sig = GrainBuf.ar(
numChannels: 2,
trigger: Impulse.ar(\trig_rate.kr(20)),
dur: \gdur.kr(0.5),
sndbuf: buf,
pos: \gpos.kr(0),
rate: \rate.kr(0.5).lag(1),
);
sig = RLPF.ar(sig, \ff.kr(6000), \rq.kr(1));
sig = Pan2.ar(sig, LFNoise0.ar(0.5));
sig = sig * \amp.kr(1);
sig = Limiter.ar(sig);
Out.ar(\out.kr(0), sig);
}).add;

12
synthdefs/hatgen.scd Normal file
View File

@ -0,0 +1,12 @@
SynthDef(\hhgen, {
var sig;
sig = Pulse.ar(Array.fill(6, {arg i; \freq.kr(20) * (i + {Rand(1.02, 1.03)})}));
sig = Mix.ar(sig);
sig = BPF.ar(sig, 10000, 0.15);
sig = HPF.ar(sig, 7000);
sig = LPF.ar(sig, 3700);
sig = HPF.ar(sig, \ff.kr(1500)) * 20.dbamp;
sig = sig * Env.perc(0.001, \decay.kr(0.1), curve: \curve.kr(-4)).ar(Done.freeSelf);
sig = Pan2.ar(sig, \pan.kr(0));
Out.ar(\out.kr(0), sig!2);
}).add;

18
synthdefs/kickgen.scd Normal file
View File

@ -0,0 +1,18 @@
SynthDef(\kickgen, {
var curve, sig, envAmp, envPitch, noise, decay;
decay = \decay.kr(0.3);
curve = \curve.kr(-8);
envPitch = 1 + (\envmul.kr(4) * Env.perc(0.001, 0.13, curve: curve).ar);
envAmp = Env.perc(0.001, decay, curve: curve).ar(Done.freeSelf);
noise = BPF.ar(WhiteNoise.ar * Env.perc(0.001, 0.01).ar, \ff.kr(1800), \rq.kr(1));
sig = SinOsc.ar(\freq.kr(50) * envPitch) * envAmp;
sig = sig + noise;
// what happens here
sig = (sig * (1 + (2 * Env.perc(0.001, 0.12).ar))).softclip;
// sig = sig.softclip;
// sig = sig * -4.dbamp;
sig = sig * \amp.kr(0.8);
sig = Pan2.ar(sig, \pan.kr(0));
Out.ar(\out.kr(0), sig);
}
).add;

31
synthdefs/padoo.scd Normal file
View File

@ -0,0 +1,31 @@
SynthDef(\padoo,
{
|gate=0|
var sig, env,freq;
freq = \freq.kr(120);
// three notes. root note, 7th, octave. vibrato
sig = Saw.ar(
[freq, (freq.cpsmidi + 7).midicps, (freq.cpsmidi + 12).midicps] +
SinOsc.ar(\vibrato.kr(6)).linlin(-1, 0.5, 0, Rand(3, 5))
);
// sig = Saw.ar(freq + SinOsc.ar(\vibrato.kr(6)).linlin(-1, 1, 0, Rand(3, 5)));
// detuning through slight pitch shifting
sig = 6.collect({|item| PitchShift.ar(sig, 0.05, Rand(0.98, 1.02))}).sum / 6;
sig = Splay.ar(sig, 0.2);
sig = 8.collect({
var mod = LFTri.kr(ExpRand(0.2, 0.3), Rand(0.0, 2.0)).range(0.001, 0.02);
DelayL.ar(sig, 0.02, mod);
});
sig = Splay.ar(sig, 0.2);
// env = Env.perc(\attack.kr(1), \decay.kr(3)).ar(Done.freeSelf);
env = EnvGen.ar(Env.asr(\attack.kr(1), \decay.kr(3), \release.kr(1)), gate, doneAction: Done.freeSelf);
sig = sig * env;
sig = RLPF.ar(sig, Env([500, 700, \ff.kr(1500)], [0.5, 1, 0.5]).ar, 0.9);
sig = sig * \amp.kr(0.2);
sig = Limiter.ar(sig);
Out.ar(\out.kr(0), sig);
}
).add;

10
synthdefs/random_lfo.scd Normal file
View File

@ -0,0 +1,10 @@
SynthDef(\randlfo, {
var sig;
sig = LFNoise0.ar(\rate.kr(1)).linlin(
-1,
1,
\min.kr(0),
\max.kr(1),
);
Out.ar(\out.kr(0), sig);
}).add;

12
synthdefs/rangz.scd Normal file
View File

@ -0,0 +1,12 @@
SynthDef(\rangz, {
var exc, amps, freqs, rqs, sig, envPitch, cond, pitchoo, nb = 20;
freqs = Array.fill(nb, {ExpRand(65, \freq.kr(1000)) * ExpRand(0.5, 1.5)});
rqs = Array.fill(nb, {LFNoise2.kr(2).linexp(-1, 1, 0.001, 0.009)});
amps = rqs.collect({|item, i| 0.05 + (1 / item.sqrt) * ExpRand(0.05, 1.2)});
exc = BrownNoise.ar(1); // risky
sig = Resonz.ar(exc, freqs, rqs) * amps;
sig = Splay.ar(sig);
sig = (sig) * \amp.kr(1);
sig = Limiter.ar(sig);
Out.ar(\out.kr(0), sig);
}).add;

View File

@ -0,0 +1,19 @@
// https://bzoennchen.github.io/supercollider-book/chapters/sounddesign/physical-modeling.html
SynthDef(\snare, {
var sig, exciter, local;
local = LocalIn.ar(2);
exciter = Impulse.ar(0!2);
sig = WhiteNoise.ar() * Decay2.ar(exciter, 0.008, 0.25) * \amp.kr(1.0);
sig = sig + local;
sig = BPF.ar(sig, \cutoff.kr(500));
local = DelayN.ar(sig, 0.01,
delaytime: 1/\freq.kr(220)) * \beta.kr(0.8);
LocalOut.ar(local);
sig = LPF.ar(sig, 5000);
// sig = JPverb.ar(sig, 0.6, 0.1);
sig = sig + PitchShift.ar(sig, 0.01, 0.9);
DetectSilence.ar(sig, doneAction: Done.freeSelf);
sig = Limiter.ar(sig);
Out.ar(0, sig);
}).add;

16
synthdefs/supersaw.scd Normal file
View File

@ -0,0 +1,16 @@
SynthDef(\supersaw, {
arg gate = 0;
var sig, env, freq, sub, noise, saw, rel;
freq = \freq.kr(122);
rel = \rel.kr(1);
env = EnvGen.ar(Env.asr(\attack.kr(0.01), 1, rel), gate, doneAction: Done.freeSelf);
sub = SinOsc.ar(freq) * 1.5;
noise = WhiteNoise.ar(0.4);
saw = Array.fill(8, {Saw.ar([freq, freq * 0.5] * Rand(1.0, 1.04)).sum});
sig = Splay.ar([saw.sum, sub, noise], 0.1);
sig = RHPF.ar(sig, freq, 0.9);
// sig = sig + DelayC.ar(sig, 0.1, SinOsc.ar(0.02).unipolar.range(0.013, 0.025), 1) / 2;
sig = sig * \amp.kr(0.3);
sig = sig * env;
Out.ar(\out.kr(0), Limiter.ar(sig));
}).add;

15
synthdefs/tom_simple.scd Normal file
View File

@ -0,0 +1,15 @@
SynthDef(\tom, {
var freq, decay, mod, sig, base, noise, vibrato, pitchEnv, ampEnv, filterEnv;
freq = \freq.kr(120);
decay = \decay.kr(1.6);
ampEnv = Env.perc(0, decay).ar(Done.freeSelf);
filterEnv = Env.perc(0, 0.15).ar;
pitchEnv = Env.perc(0, 0.035).ar;
noise = WhiteNoise.ar;
base = SinOsc.ar(freq + (freq * pitchEnv) * [0.5, 1]).sum;
sig = Splay.ar([base, noise], 0.1) * ampEnv * -2.dbamp;
sig = RLPF.ar(sig, 200 + (\ff.kr(900) * filterEnv), 0.45);
// sig = Fold.ar(sig, -0.6, 0.8);
sig = sig + GVerb.ar(sig, 22, 1, 0.8) * -16.dbamp;
Out.ar(\out.kr(0), sig * \amp.kr(1));
}).add;