Merge pull request #506 from andrewcsmith/patch-2
[supercollider.git] / HelpSource / Classes / LevelIndicator.schelp
blob56d7f8fabdf30ecb408ae73038dfe536a53a470d
1 CLASS:: LevelIndicator
2 redirect:: implClass
3 summary:: a level indicator GUI widget
4 categories:: GUI>Views
5 related:: Classes/RangeSlider
7 DESCRIPTION::
8 A level indicator view, suitable for use as a level or peak meter, etc.
11 CLASSMETHODS::
12 private::key
14 INSTANCEMETHODS::
15 private::valueAction
17 METHOD:: value
18 Get or set the current level of the view.
20 argument:: val
21 A link::Classes/Float:: between 0 and 1.
23 returns:: A link::Classes/Float::
25 METHOD:: warning
26 Set the warning threshold. Styles 0 and 2 (see link::#-style::) implement a warning display. If link::#-critical:: is > warning the view will turn yellow if link::#-value:: is > code::val::. If critical is <= warning the view will turn yellow if value is <= to code::val::. If link::#-drawsPeak:: is true warning will be displayed based on link::#-peakLevel:: rather than value.
28 argument:: val
29 A link::Classes/Float::.
31 code::(
32 w = Window.new.front;
33 a = LevelIndicator(w, Rect(10, 10, 20, 160));
34 a.value = 0.5;
36 a.warning = 0.6; a.critical = 0.9;
37 a.value = 0.7;
40 METHOD:: critical
41 Set the warning threshold. Styles 0 and 2 (see link::#-style::) implement a critical display. If critical is > link::#-warning:: the view will turn red if link::#-value:: is > code::val::. If critical is <= warning the view will turn yellow if value is <= to code::val::. If link::#-drawsPeak:: is true critical will be displayed based on link::#-peakLevel:: rather than value.
43 argument:: val
44 A link::Classes/Float::.
46 code::(
47 w = Window.new.front;
48 a = LevelIndicator(w, Rect(10, 10, 20, 160));
49 a.style = 2;
50 a.numSteps = 10;
51 a.value = 0.5;
53 a.warning = 0.6; a.critical = 0.9;
54 a.value = 1;
57 METHOD:: style
58 note:: Not yet implemented in Qt GUI ::
59 Sets the style of the view.
61 argument:: val
62 An link::Classes/Integer:: from 0 to 3. 0 = colored bar; 1 = graduated black lines; 2 = LED style (see link::#-numSteps::); 3 = LED style with custom image. (See link::#-image::.)
64 code::(
65 w = Window.new.front;
66 w.addFlowLayout;
67 4.do({|i|
68         a = LevelIndicator(w, Rect(0, 0, 20, 200));
69         a.style = i;
70         a.numSteps = 10;
71         a.value = 0.5;
72 });
76 METHOD:: numSteps
77 The number of steps used in styles 2 and 3. (See link::#-style::.)
79 argument:: val
80 An positive link::Classes/Integer::.
82 code::(
83 w = Window.new.front;
84 a = LevelIndicator(w, Rect(10, 10, 200, 20));
85 a.style = 2;
86 a.value = 1;
88 a.numSteps = 10;
89 a.numSteps = 20;
92 METHOD:: image
93 note:: Not yet implemented in Qt GUI ::
94 Sets the image used in style 3. See below for an example.
96 argument:: image
97 An link::Classes/Image::. The default image is the SC cube.
99 METHOD:: numTicks
100 The number of ticks to display in the view's scale.
102 argument:: number
103 An link::Classes/Integer:: >= 0.
105 code::(
106 w = Window.new.front;
107 w.view.background = Color.black;
108 a = LevelIndicator(w, Rect(10, 10, 300, 30));
109 a.numTicks = 11;
110 a.value = 0.5;
114 METHOD:: numMajorTicks
115 The number of ticks in the view's scale which will be large sized.
117 argument:: number
118 An link::Classes/Integer:: >= 0.
120 code::(
121 w = Window.new.front;
122 w.view.background = Color.black;
123 a = LevelIndicator(w, Rect(10, 10, 300, 30));
124 a.numTicks = 11;
125 a.numMajorTicks = 3;
126 a.value = 0.5;
130 METHOD:: drawsPeak
131 Determines whether the view draws a separate peak display. This can be useful for displaying both peak and RMS values. If drawsPeak is true link::#-warning:: and link::#-critical:: will be displayed based on link::#-peakLevel:: rather than value in link::#-style#styles:: 0 and 2.
133 argument:: bool
134 A link::Classes/Boolean::. By default the peak is not drawn.
136 code::(
137 w = Window.new.front;
138 a = LevelIndicator(w, Rect(10, 10, 300, 30));
139 a.drawsPeak = true;
140 a.style = 1;
141 a.value = 0.5;
142 a.peakLevel = 0.6;
146 METHOD:: peakLevel
147 Sets the level of the peak display. (See link::#-drawsPeak::.)
149 argument:: val
150 A link::Classes/Float::.
152 code::(
153 w = Window.new.front;
154 a = LevelIndicator(w, Rect(10, 10, 20, 160));
155 a.drawsPeak = true;
156 a.peakLevel = 0.6)
162 EXAMPLES::
164 code::
165 s.boot;
166 GUI.cocoa; // just to be sure
168 // something to meter
170 b = Buffer.read(s, Platform.resourceDir +/+ "sounds/a11wlk01.wav");
171 x = { var colum, noise, imp, delimp, mul = 1;
172         imp = Impulse.kr(10);
173         delimp = Delay1.kr(imp);
174         colum = PlayBuf.ar(1, b, BufRateScale.kr(b), loop: 1) * mul;
175         // measure rms and Peak
176         SendReply.kr(imp, '/levels', [Amplitude.kr(colum), K2A.ar(Peak.ar(colum, delimp).lag(0, 3))]);
177         colum;
178 }.play;
181 // a window and responder
182 // default style is coloured / solid
184 w = Window.new.front;
185 a = LevelIndicator(w, Rect(10, 10, 20, 160));
186 o = OSCFunc({arg msg;
187         {
188                 a.value = msg[3].ampdb.linlin(-40, 0, 0, 1);
189                 a.peakLevel = msg[4].ampdb.linlin(-40, 0, 0, 1);
190         }.defer;
191 }, '/levels', s.addr);
192 w.onClose = {o.free; x.free};
195 // styles 0 and 2 support warning and critical levels
197 a.warning = -6.dbamp;
198 a.critical = -3.dbamp;
201 // optionally show peak level
203 a.warning = 0;
204 a.critical = 0;
205 a.drawsPeak = true;
208 // style 1 is black bars
209 a.style = 1
211 // looks good with a background
212 a.background = Gradient(Color.red, Color.green, \v);
214 // all styles can have ticks
216 a.background = Color.clear;
217 a.numTicks = 11; // includes 0;
218 a.numMajorTicks = 3;
221 // style 2 is LED
223 a.drawsPeak = false;
224 a.style = 2;
225 a.numSteps = 10;
226 a.numTicks = 0;
229 // style 3 is as 2, but with images
230 a.style = 3; // use default image
232 // make a custom image
234 j = Image.new(20,20);
235 j.draw({ arg image;
236 var lozenge;
237 lozenge = Rect(3, 3, 16, 16);
238 Pen.addOval(lozenge);
239 Pen.fillAxialGradient(1@1, 19@19, Color.new255(255, 165, 0), Color.new255(238, 232, 170));
240 Pen.width = 1;
241 Pen.strokeColor = Color.blue;
242 Pen.strokeOval(lozenge);
244 a.image = j;
247 // be inspired
248 j = Image.openURL("http://bit.ly/uSMWwp");
251 a.bounds = Rect(10, 10, 380, 80);
252 a.numSteps = 5;
253 a.image = j;