«Simple Frequency Modulation SynthDef» by deusofnull
on 12 Apr'16 01:37 inThis is a very basic example, I know, but I found it was hard to find basic synthdefs when I was getting started.
input args are mostly self explainatory:
freq controls pitch of carrier and modulator wave
modratio scales the freq of modulator wave carratio scalese the freq of carrier wave (useful for creating different ratios of FM - carrier:modulator - ex: 1:3, 3:5, 1:9, etc )
atk, delay, sustain, rel are enelope controls for a typical ADSR envelope
modindex controls the intensity of the modulation, bigger values for modindex create more numerous sidebands
amp is the amplitude (volume)
on the line with Out.ar(0, car ! 2) car ! 2 splits the signal in two in order to be stereo
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
// This is a very basic example, I know, but I found it was hard
/// to find basic synthdefs when I was getting started.
SynthDef(\fm, {
|freq=200, atk=0.01, decay=0.3, sustain=0.4, rel=0.1
carratio=1,modratio=1, modindex=1,
amp=0.2, gate=1, outBus=0|
var env = EnvGen.kr(Env.adsr(atk, decay, sustain, rel), gate, doneAction:2);
var mod = SinOsc.ar(freq * modratio);
var car = SinOsc.ar(freq * carratio + (1 + (mod *modindex)), 0) * amp * env;
Out.ar(0, car ! 2);
}).add;
)
// how to start the synth with inital values
~fmSynth = Synth.new(\fm, [\freq, 220]);
// how to alter a synth in real time
~fmSynth.set(\freq, 260);
// how to liberate the synth
~fmSynth.free;
/* design notes
input args are mostly self explainatory:
freq controls pitch of carrier and modulator wave
modratio scales the freq of modulator wave
carratio scalese the freq of carrier wave
(useful for creating different ratios of FM - carrier:modulator - ex: 1:3, 3:5, 1:9, etc )
atk, delay, sustain, rel are enelope controls for a typical ADSR envelope
modindex controls the intensity of the modulation, bigger values for modindex create more numerous sidebands
amp is the amplitude (volume)
on the line with Out.ar(0, car ! 2)
car ! 2 splits the signal in two in order to be stereo
*/
reception
comments