Explicitly include a boost "windows" folder even on linux
[supercollider.git] / HelpSource / Classes / SCEnvelopeEdit.schelp
blob0aa274a1b45bb15de32bbfd050ea4ea61d804411
1 class:: SCEnvelopeEdit
2 summary:: An envelope editor view
3 categories:: GUI>Kits>Cocoa
4 related:: Classes/EnvelopeView
6 description::
7 An editable Envelope view.
9 subsection:: Some Important Issues Regarding SCEnvelopeEdit
11 The breakpoints are color coded as follows:
12 table::
13 ## blue || normal
14 ## red || sustain node
15 ## green || loop node
19 classmethods::
21 method:: new
22 argument:: parent
23 The parent view.
24 argument:: bounds
25 An instance of link::Classes/Rect::, or a link::Classes/Point:: indicating code::width@height::.
26 argument:: env
27 The envelope. An instance of link::Classes/Env::.
28 argument:: pointsPerSegment
29 The resolution in points per segment. Default value is 10.
31 method:: paletteExample
32 argument:: parent
33 argument:: bounds
35 subsection:: Subclassing and Internal Methods
37 The following methods are usually not used directly or are called by a primitive. Programmers can still call or override these as needed.
39 method:: viewClass
41 instancemethods::
43 method:: refresh
44 If the link::Classes/Env:: object is modified directly, this needs to be called to update the GUI.
46 maxLevel
47 Changes maximum level shown in editor.
48 argument:: level
49 An instance of link::Classes/Float::.
51 method:: minLevel
52 Changes minimum level shown in editor.
53 argument:: level
54 An instance of link::Classes/Float::.
56 method:: minTime
57 Changes minimum time (sec) shown in editor. Negative times are okay because link::Classes/Env:: uses inter-node durations.
58 argument:: sec
59 An instance of link::Classes/Float::. Seconds.
61 method:: maxTime
62 Changes maximum time (sec) shown in editor.
63 argument:: sec
64 An instance of link::Classes/Float::. Seconds.
67 subsection:: Subclassing and Internal Methods
69 The following methods are usually not used directly or are called by a primitive. Programmers can still call or override these as needed.
71 method:: defaultMouseDownAction
72 argument:: x
73 argument:: y
74 argument:: modifiers
75 argument:: buttonNumber
76 argument:: clickCount
79 method:: env
80 argument:: e
82 method:: addBreakPoint
83 argument:: level
85 method:: insertAtTime
86 argument:: time
87 argument:: level
89 method:: pointsPerSegment
91 method:: initSCEnvelopeEdit
92 argument:: argEnv
93 argument:: argPPS
94 argument:: setMinMax
96 method:: redraw
98 method:: updateAll
100 method:: updateSegment
101 argument:: segNum
103 method:: clear
105 examples::
107 Make a basic editor:
108 code::
110 e = Env([1, 2], [10]);
111 w = Window("Env Editor", Rect(200, 200, 300, 200));
112 v = SCEnvelopeEdit(w, w.view.bounds.moveBy(20, 20).resizeBy(-40, -40), e, 20).resize_(5);
113 w.front;
116 v.addBreakPoint;
119 v.clear;
120 v.redraw;
124 v.maxLevel_(2); // to give more headroom
125 v.maxTime_(2); // to increase release point
126 v.minTime_(-1); // to increase attack time
128 e.curves_('sin'); // env object is changed
129 v.refresh; // must refresh editor
132 Controlling a Synth
133 code::
134 s = Server.internal;
135 s.boot;
138 e = Env([0, 1, 0.7, 0.9, 0], [0.03, 0.03, 0.03, 0.03], 'sin');
139 f = Env([0, 1, 0.7, 0.9, 0], [0.03, 0.03, 0.03, 0.03], 'sin');
140 w = Window("Shards", Rect(100, 100, 500, 400));
141 v = SCEnvelopeEdit(w, w.view.bounds.resizeBy(-20, -200), e, 10).resize_(2);
142 StaticText(w, v.bounds).string_(" amplitude").resize_(2);
143 x = SCEnvelopeEdit(w, v.bounds.moveBy(0, 200), f, 10).resize_(2);
144 StaticText(w, x.bounds).string_(" frequency").resize_(2);
145 w.front;
149 SynthDef("sineBlip", {
150         arg freq = 440, vol = 0.1, la0, la1, la2, la3, la4, ta0, ta1, ta2, ta3, crva,
151                 lf0, lf1, lf2, lf3, lf4, tf0, tf1, tf2, tf3, crvf;
152         var signal, fenv, aenv;
153         fenv = EnvGen.ar(Env([lf0, lf1, lf2, lf3, lf4], [tf0, tf1, tf2, tf3], crvf));
154         aenv = EnvGen.ar(Env([la0, la1, la2, la3, la4], [ta0, ta1, ta2, ta3], crva), doneAction: 2);
155         signal = SinOsc.ar([freq, freq*2] * fenv) * aenv * vol;
156         Out.ar(0, signal.dup);
157 }).send(s);
161 Routine({
162         var par, indices;
163         indices = (2..21);
164         loop({
165                 par = (indices +++ (
166                         v.env.levels ++
167                         v.env.times ++
168                         v.env.curves ++
169                         x.env.levels ++
170                         x.env.times ++
171                         x.env.curves)).flatten;
172                 s.sendBundle(s.latency, [\s_new, "sineBlip", -1, 1, 1, \freq, exprand(4e3,11e3)] ++ par);
173                 0.04.wait;
174         });
175 }).play;