Skip to content

Instantly share code, notes, and snippets.

@ryanlaws
Created December 30, 2020 23:16
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save ryanlaws/e62f84c5f0d71a5672fb49a00d642cde to your computer and use it in GitHub Desktop.
Save ryanlaws/e62f84c5f0d71a5672fb49a00d642cde to your computer and use it in GitHub Desktop.
//////// sunset 2020
(Ndef(\reverb, {|wet=0.85, dry=0.15, size=10|
var input = \in.ar([0, 0]);
var primes = (2..13).nthPrime;
var reverb = Mix.ar(primes.collect({|i|
var delay = SinOsc.ar(0.02.rrand(0.1), 0, 0.02.rand, i/100);
AllpassL.ar(input, 1/2, delay, size, 1/primes.size)
}));
(wet*(reverb + input)) + (dry*input);
});
Ndef(\delay, {|time=4, rep1=24, rep2=32|
var delay1 = CombN.ar(\in1.ar(0!2), 30, time, rep1*time);
var delay2 = CombN.ar(\in2.ar(0!2), 30, time, rep2*time);
\in1.ar(0!2) + \in2.ar(0!2) + delay1 + delay2;
});
Ndef(\synth, {|freq=55, t_trig=0, attack=0.005,
decay=0.5, fb=1.5, amp=0.3, pan=0|
var env = EnvGen.ar(Env.perc(attack, decay), t_trig);
Pan2.ar(SinOscFB.ar(freq, fb*env, amp*env), pan);
});
Ndef(\drum, {|t_trig=0, freq=55, bend=0.1, f2ratio=1.5,
decay=0.5, fb=1.5, amp=0.25, pan=0|
var osc1, osc2;
var env = EnvGen.ar(Env.perc(1/200, decay, 1, -9), t_trig);
freq = freq * (env*bend + 1);
fb = env*fb + if(fb>2, fb-2, 0);
osc1 = SinOscFB.ar(freq, fb, env);
osc2 = SinOscFB.ar(freq*f2ratio, fb, env);
Pan2.ar(osc1 * osc2 * amp * (env**0.2), pan);
});)
(Ndef(\reverb) <<>.in Ndef(\synth);
Ndef(\delay) <<>.in1 Ndef(\reverb);
Ndef(\delay) <<>.in2 Ndef(\drum);
Ndef(\delay).fadeTime = 8;
Ndef(\delay).play;)
(/**/(~trigSynth = {|freq|
('synth @ ' ++ freq).postln;
Ndef(\synth).set(\t_trig, 1, \freq, freq, \fb, 0.6.rrand(1.5),
\decay, 1.8.rand, \attack, 1.5.rand,
\pan, 0.5.rand2, \amp, 0.1.rrand(0.4)
);
});
(~trigSnare = {|amp=0.4|
'snare'.postln;
Ndef(\drum).set(\t_trig, 1, \f2ratio, 1.5, \freq, 220,
\decay, 0.2.rrand(0.9), \amp, amp, \fb, 2.1, \pan, 0.2.rand2);
});
(~trigHat = {
'hat'.postln;
Ndef(\drum).set(\t_trig, 1, \bend, 0.1, \freq, 7700, \amp, 0.05,
\decay, 0.3.rand, \fb, 2.5, \pan, 0.4.rand2);
});
(~trigKick = {
'kick'.postln;
Ndef(\drum).set(\t_trig, 1, \bend, 1.5, \freq, 30, \pan, 0,
\f2ratio, 0.5, \decay, 1.5, \amp, 0.9, \fb, 0.2);
});/**/)
(~scale = Scale.minorPentatonic(Tuning.just);
~drumStep = ~synthStep = 0;
~drumIndex = ~synthIndex = 0;
~synthWait = 2/4; // 2 = bar length
~drumWait = 2/16;)
(Tdef(\synth).play; Tdef(\synth, { loop {
if(~synthIndex == (~synthStep % 16), {
~trigSynth.((
~scale.degreeToFreq(
~scale.semitones.size.rand + 3,
55, // root note
-1.rrand(1) // octave
).cpsmidi + 0.1.rand2
).midicps);
~synthIndex = (~synthIndex + 2.rrand(4).nthPrime) % 16;
});
~synthStep = ~synthStep + 1;
~synthWait.wait;
} }))
(Tdef(\drum).play; Tdef(\drum, { loop {
var doKick = false;
if((~drumIndex == (~drumStep % 8)) && (1.0.rand < 0.9), {
});
~drumStep = ~drumStep + 1;
~drumWait.wait;
} }))
Ndef.clear(8);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment