«Simple FM template» by LFSaw
on 02 Mar'20 14:39 inTemplate to create a 2x3 FM Synth. There are two independent FM synths, of type car(mod1(mod2)).
This is intended to be a starting point for further exploration.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
(
Ndef(\a, {
var fundFreqs, ratios, levels, snd;
fundFreqs = [730, 150];
ratios = [
// carrier(modulator_1(modulator_2))
[1, 3, 5], // one layer
[2, 3, 9] // independent other layer
];
levels = [
[1, 0.5, 0.3],
[0.8, 0.5, 0.3]
];
snd = [fundFreqs, ratios, levels].flop.collect{|v|
var fundFreq, ratios, levels;
#fundFreq, ratios, levels = v;
// create stacked modulators
// start with innermost modulator
ratios = ratios.reverse;
levels = levels.reverse;
[ratios, levels].flop.inject(0, {|prev, vals|
var ratio, level;
#ratio, level = vals;
// "r: % \t l: % \t %".format(ratio, level, prev).postln;
SinOsc.ar((fundFreq * ratio) + (prev * fundFreq), mul: level)
}).postln
};
snd = Mix(snd);
snd!2
})
)
Ndef(\a).edit
descendants
full graph
reception
comments