-
Notifications
You must be signed in to change notification settings - Fork 4
/
fmtribe.scd
executable file
·70 lines (50 loc) · 1.5 KB
/
fmtribe.scd
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
/*
(
SynthDef(\fmtribe, {|out, pan, accelerate, freq, gate,
attack=0.1,
decay=0.3,
sustain=0.7,
release=0.2,
mattack=0.5,
mdecay=0.5,
msustain=0.7,
mrelease=0.1,
waveform=0 |
var mod,modEnv,car,env,sig,clip;
var modFreq = 50;
var clipAmount = 0.1;
freq = freq.cpsmidi;
modEnv = EnvGen.ar(Env.adsr(mattack, mdecay, msustain, mrelease));
mod = SinOsc.ar(modFreq) * modEnv;
car = SinOsc.ar(freq + mod);
env = EnvGen.ar(Env.adsr(attack, decay, sustain, release), doneAction: 2);
clip = clipAmount * 500;
sig = (car * clip).clip(-0.97, 0.97) * 0.751;
OffsetOut.ar(out, DirtPan.ar(sig, ~dirt.numChannels, pan, env));
}).add;
)
(
fork{
SynthDef(\basicFM, {|out = 0, gate = 1, amp = 1, carFreq = 1000, modFreq = 100, modAmount = 2000, clipAmount = 0.1|
var modEnv = EnvGen.ar(Env.adsr(0.5, 0.5, 0.7, 0.1, peakLevel: modAmount), gate);
var mod = SinOsc.ar(modFreq) * modEnv;
var car = SinOsc.ar(carFreq + mod);
var ampEnv = EnvGen.ar(Env.adsr(0.1, 0.3, 0.7, 0.2, peakLevel: amp), gate, doneAction: 2);
var clip = clipAmount * 500;
Out.ar(out, (car * ampEnv * clip).clip(-0.7, 0.7) * 0.1);
}).add;
s.sync;
Pbind(*[
instrument: \basicFM,
out: [0, 1],
dur: Pseq([1/7, 1/3] / 1.2, inf),
sustain: Pkey(\dur),
amp: 1/4,
carFreq: Pseq([1, 1, 1, 2] * 350, inf),
modFreq: Pkey(\carFreq) * (1/8),
modAmount: Pseq([2, 1, 0.5, 2, 1, 0.5, 2, 1, 2, 1, 0.5, 2, 1, 0.5, 2, 4] * 500, inf),
clipAmount: Pseq([Pn(0.1, 32), Pn(1, 32)], inf)
]).play;
}
)
*/