-
Notifications
You must be signed in to change notification settings - Fork 0
/
brassy_waveshaping_pg_154.scd~
130 lines (100 loc) · 3.39 KB
/
brassy_waveshaping_pg_154.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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
// =====================================================================
// SuperCollider Workspace
// =====================================================================
s.boot;
s.quit;
(
SynthDef("brassy_waveshaping_pg_154", { arg freq=440, gate;
var osc, ampenv, ampenvctl, tfuncenv, buf, tfuncstream, f1, f1envctl;
buf = Buffer.alloc(s,1024,1);
t = Signal.fill(512, {arg x; var y; y = ((x -255)/ 256.0); ((20.48 * (y**11)) - (43.52 * (y**9)) + (12.8 * (y**8)) + (40.32 * (y**7)) - (16*(y**6)) - (17.44*(y**5)) + (7.2*(y**4)) + (3.6*(y**3)) - (1.8*(y**2)) - (1.27*y) - (0.3)); (y**2).postln;});
buf.loadCollection(t.asWavetable);
f1 = Env.newClear(10);
ampenv = Env.newClear(10);
ampenvctl = Control.names([\ampenv]).kr(ampenv.asArray);
f1envctl = Control.names([\f1]).kr( f1.asArray );
// osc = EnvGen.kr(f1envctl,gate, timeScale: 100)*Shaper.ar(buf, SinOsc.ar(freq, 0, EnvGen.kr(ampenvctl, gate, timeScale: 100)));
osc = Shaper.ar(buf, SinOsc.ar(freq, 0, 0.5EnvGen.kr(ampenvctl, gate, doneAction: 0)));
Out.ar(0, osc)
}).writeDefFile;
Server.local.sendMsg("/d_load", SynthDef.synthDefDir ++ "brassy_waveshaping_pg_154.scsyndef");
)
e = Env.adsr(0.04,0.03, 0.7,0.15, 1.0, 'lin');
e.test(2).plot;
var f1, dur = 2;
f = Env.new([0, 0.49, 0.5, 0.7, 0.7, 1], [0.001, 0.039, 0.3,2-0.15-0.07, 0.15]);
a = Synth("brassy_waveshaping_pg_154");
a.setn(\f1, f.asArray);
a.setn(\ampenv, e.asArray);
a.setn(\gate, 1);
a.setn(\gate, -1);
a.free;
(
var w, f, d, values, server, id, isOn = false, msg;
var b1, b2, s;
values = IdentityDictionary.new;
server = Server.local;
f = { arg name, spec = \lin, guispec;
var height = 20, v, s, n;
guispec = guispec ? spec;
spec = spec.asSpec;
guispec = guispec.asSpec;
spec.class.postln;
v = GUI.staticText.new(w, Rect(0, 0, 72, height));
v.font = GUI.font.new("Helvetica", 12);
v.stringColor = Color.black;
v.align = \right;
s = GUI.slider.new(w, Rect(0, 0, 182, height));
s.resize = 2;
s.action = {
var val, guival, step;
val = spec.map(s.value);
values.put(name, val);
// server.sendMsg("/n_set", id, name, val);
guival = guispec.map(s.value);
step = pow(10, floor(min(0, guival.abs.log10 - 2)));
v.string = guival.round(step).asString ++ guispec.units;
};
s.value = spec.unmap(spec.default);
s.action.value;
n = GUI.staticText.new(w, Rect(0, 0, 72, height)); n.string = name;
n.stringColor = Color.black;
n.font = GUI.font.new("Helvetica", 12);
n.resize = 3;
w.view.decorator.nextLine;
};
w = GUI.window.new("FM", Rect(512, 64, 360, 130));
w.view.decorator = d = FlowLayout(w.view.bounds);
server.sendMsg("/d_load", "synthdefs/FM.scsyndef");
b2 = GUI.button.new(w, Rect(0,0, 80, 24));
b2.states = [ ["Play", Color.black, Color.green] ];
b2.action = { arg view;
var id = server.nextNodeID;
msg = ["/s_new", "FM", id, 0, 0];
values.keysValuesDo({ arg key, value;
msg = msg.addAll([key, value]);
});
msg.postln;
server.performList(\sendMsg, msg);
};
b2.enabled = server.serverRunning;
d.nextLine;
f.value(\dur,[0, 50, \lin]);
f.value(\fc, [20, 500, \lin]);
f.value(\fm, [0,500, \lin]);
f.value(\amp, \amp, \db);
f.value(\imax, [0,500,\lin]);
a = SimpleController(server);
f = { arg server;
b2.enabled = server.serverRunning;
if (server.serverRunning.not, { b2.value = 0 });
};
a.put(\serverRunning, f);
w.onClose = {
a.remove;
};
w.front;
)
////////////////////////////////////////////////////////////////////////
a = Synth("FM");
a.free;o