Some casual morning fun
(
SynthDef(\crazyFM1, {
arg out=0, freq=440, amp=0.1, atk=0.01, rel=1.0, c1=1, c2=2, c3=3, m1=1, m2=1, m3=1;
var env = EnvGen.kr(Env.perc(atk, rel), doneAction: 2);
var mod3 = SinOsc.ar(freq * c3) * m3;
var mod2 = SinOsc.ar(freq * c2 + (mod3 * 200)) * m2;
var mod1 = SinOsc.ar(freq * c1 + (mod2 * 300)) * m1;
var car = SinOsc.ar(freq + (mod1 * 400));
Out.ar(out, Pan2.ar(car * env * amp, LFNoise1.kr(10.5)));
}).add;
SynthDef(\chaosticFM, {
arg out=0, freq=440, amp=0.1, atk=0.01, rel=1.0, chaos=3.7;
var env, x, mod, car;
env = EnvGen.kr(Env.perc(atk, rel), doneAction: 2);
x = LocalIn.ar(1);
x = chaos * x * (1 - x);
x = LeakDC.ar(x);
LocalOut.ar(x);
mod = LinLin.ar(x, 0, 1, 1, 2);
car = SinOsc.ar(freq * mod);
Out.ar(out, Pan2.ar(car * env * amp, LFNoise2.kr(6)));
}).add;
SynthDef(\granularFM, {
arg out=0, freq=440, amp=0.1, grainDur=0.1, density=20;
var trig = Dust.kr(density);
var modFreq = LFNoise1.kr(0.5).exprange(50, 5000);
var modIndex = LFNoise1.kr(0.7).range(0.1, 10);
var pan = WhiteNoise.kr(1);
var grain = SinOsc.ar(freq + (SinOsc.ar(modFreq) * modIndex * freq));
var env = EnvGen.kr(Env.perc(0.001, grainDur), trig);
var sig = GrainIn.ar(2, trig, grainDur, grain, pan, env);
Out.ar(out, sig * amp);
}).add;
SynthDef(\nestedFM, {
arg out=0, freq=440, amp=0.1, atk=0.01, rel=1.0;
var env = EnvGen.kr(Env.perc(atk, rel), doneAction: 2);
var modFreqs = Array.fill(5, { LFNoise2.kr(rrand(0.1, 1.0)).exprange(50, 5000) });
var modIndices = Array.fill(5, { LFNoise1.kr(rrand(0.1, 1.0)).range(0.1, 10) });
var sig = freq;
5.do { |i|
sig = SinOsc.ar(sig + (SinOsc.ar(modFreqs[i]) * modIndices[i] * sig));
};
Out.ar(out, Pan2.ar(sig * env * amp, SinOsc.kr(4.2)));
}).add;
)
(
Pdef(\crazyFMSeq,
Pbind(
\instrument, Prand([\crazyFM1, \chaosticFM, \granularFM, \nestedFM], inf),
\dur, Pwhite(0.1, 0.4),
\freq, Pexprand(100, 1000),
\amp, 0.1,
\atk, Pwhite(0.001, 0.1),
\rel, Pwhite(0.1, 1.0),
\c1, Pwhite(0.5, 4),
\c2, Pwhite(0.5, 4),
\c3, Pwhite(0.5, 4),
\m1, Pwhite(0.1, 10),
\m2, Pwhite(0.1, 10),
\m3, Pwhite(0.1, 10),
\chaos, Pwhite(3.5, 3.99), // logictic x(n+1) = r * x(n) * (1 - x(n)), unstable between/above 3.57~4
\grainDur, Pwhite(0.01, 0.2),
\density, Pwhite(10, 80)
)
).play;
)
Pdef(\crazyFMSeq).stop;