00 /**********************************************************************
01 Copyright (c) 2014-2016 Mark C. Erickson
02
03 Permission is hereby granted, free of charge, to any person obtaining
04 a copy of this software and associated documentation files (the
05 "Software"), to deal in the Software without restriction, including
06 without limitation the rights to use, copy, modify, merge, publish,
07 distribute, sublicense, and/or sell copies of the Software, and to
08 permit persons to whom the Software is furnished to do so, subject to
09 the following conditions:
10
11 The above copyright notice and this permission notice shall be included
12 in all copies or substantial portions of the Software.
13
14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANT-
16 ABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO
17 EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
18 DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
19 OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
20 THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
22 CHANGE LOG:
23 v1.1.0 - added GUI
24 v1.0.0 - initial release
25
26 **********************************************************************/
27
Disclaimer...
28 desc:Fader: Polynomial [+0dB], v1.1.0
29
30 slider1:100 <0, 100, 0.1> Position [mm]
31
32 @init
33 gfx_clear = 256*256*256-1;
34 m = 1;
35
36 @slider
37 c = slider1 / 100.0;
38 m = c^6 + c^3;
39 m *= 0.5;
40
41 @sample
42 spl0 *= m;
43 spl1 *= m;
44
45
Graphics...
47 @gfx 256 256
48 gfx_setfont(1, "Arial", 10);
49 gfx_a = 1;
50
51 gfx_r = gfx_g = gfx_b = 0.1;
52 gfx_line(0, 0, gfx_w, 0, 0.5); // outline our GUI box
53 gfx_line(0, 0, 0, gfx_h, 0.5);
54 gfx_line(gfx_w-1, 0, gfx_w-1, gfx_h, 0.5);
55 gfx_line(0, gfx_h-2, gfx_w, gfx_h-2, 0.5);
56
57 x_step = gfx_w / 10;
58 y_step = gfx_h / 10;
59
60 i = 1;
61 loop(9, // y-axiis
62 x = i*x_step;
63 gfx_line(x, y_step, x, y_step*8, 0.5);
64 i += 1;
65 );
66
67 gfx_x = x_step - 2;
68 gfx_y = gfx_h - 2*y_step + 9;
69 gfx_drawchar($'0');
70 gfx_drawchar($'m');gfx_drawchar($'m');
71
72 gfx_x = 3*x_step - 7;
73 gfx_y = gfx_h - 2*y_step + 9;
74 gfx_drawchar($'2');
75 gfx_drawchar($'5');
76 gfx_drawchar($'m');gfx_drawchar($'m');
77
78 gfx_x = 5*x_step - 7;
79 gfx_y = gfx_h - 2*y_step + 9;
80 gfx_drawchar($'5');
81 gfx_drawchar($'0');
82 gfx_drawchar($'m');gfx_drawchar($'m');
83
84 gfx_x = 7*x_step - 7;
85 gfx_y = gfx_h - 2*y_step + 9;
86 gfx_drawchar($'7');
87 gfx_drawchar($'5');
88 gfx_drawchar($'m');gfx_drawchar($'m');
89
90 gfx_x = 9*x_step - 12;
91 gfx_y = gfx_h - 2*y_step + 9;
92 gfx_drawchar($'1');
93 gfx_drawchar($'0');
94 gfx_drawchar($'0');
95 gfx_drawchar($'m');gfx_drawchar($'m');
96
97 i = 1;
98 loop(8, // x-axiis
99 y = i*y_step;
100 gfx_line(x_step-2, y, x_step*9, y, 0.5);
101 i += 1;
102 );
103
104 gfx_x = x_step - 32;
105 gfx_y = y_step - 6;
106 gfx_drawchar($' ');
107 gfx_drawchar($'0');
108 gfx_drawchar($' ');
109 gfx_drawchar($'d');
110 gfx_drawchar($'B');
111
112 gfx_x = x_step - 36;
113 gfx_y = 2*y_step - 7;
114 gfx_drawchar($'-');
115 gfx_drawchar($'1');
116 gfx_drawchar($'2');
117 gfx_drawchar($'d');
118 gfx_drawchar($'B');
119
120 gfx_x = x_step - 36;
121 gfx_y = 3*y_step - 7;
122 gfx_drawchar($'-');
123 gfx_drawchar($'2');
124 gfx_drawchar($'4');
125 gfx_drawchar($'d');
126 gfx_drawchar($'B');
127
128 gfx_x = x_step - 36;
129 gfx_y = 4*y_step - 7;
130 gfx_drawchar($'-');
131 gfx_drawchar($'3');
132 gfx_drawchar($'6');
133 gfx_drawchar($'d');
134 gfx_drawchar($'B');
135
136 gfx_x = x_step - 36;
137 gfx_y = 5*y_step - 7;
138 gfx_drawchar($'-');
139 gfx_drawchar($'4');
140 gfx_drawchar($'8');
141 gfx_drawchar($'d');
142 gfx_drawchar($'B');
143
144 gfx_x = x_step - 36;
145 gfx_y = 6*y_step - 7;
146 gfx_drawchar($'-');
147 gfx_drawchar($'6');
148 gfx_drawchar($'0');
149 gfx_drawchar($'d');
150 gfx_drawchar($'B');
151
152 gfx_x = x_step - 36;
153 gfx_y = 7*y_step - 7;
154 gfx_drawchar($'-');
155 gfx_drawchar($'7');
156 gfx_drawchar($'2');
157 gfx_drawchar($'d');
158 gfx_drawchar($'B');
159
160 gfx_x = x_step - 36;
161 gfx_y = 8*y_step - 8;
162 gfx_drawchar($'-');
163 gfx_drawchar($'8');
164 gfx_drawchar($'4');
165 gfx_drawchar($'d');
166 gfx_drawchar($'B');
167
168 gfx_r = gfx_g = 0.1;
169 gfx_b = 0.9;
170 dB = 20 * log10(m);
171 dB *= -1;
172 dB > 83 ? dB = 84;
173 m == 0? dB = 84;
174 y = y_step*dB/12 + y_step;
175 gfx_rect(x_step+2, y, x_step*8-3, 2, 0.5); // horizontal line
176 gfx_rect(x_step+slider1/100*x_step*8, y_step+2, 1, y_step*7-3, 0.5); // vertical line
177 gfx_rect(x_step+slider1/100*x_step*8-3, y-2, 6, 6, 0.5); // hilite box
178 gfx_x = gfx_w*.9+8;
179 gfx_y = y-6;
180 sprintf(str, "%.1fdB", -dB);
181 gfx_drawstr(str);
182 gfx_x = x_step+slider1/100*x_step*8-9;
183 gfx_y = y_step - 17;
184 sprintf(str, "%.1fmm", slider1);
185 gfx_drawstr(str);
186
187 gfx_g = 0.2;
188 gfx_b = gfx_r = 0.9;
189 RES = 100; // min = 8
190 x_step1 = x_step * 8/RES;
191
192 i = 1;
193 loop(RES, //8, // main curve
194 x = i*x_step1;
195 c=(i-1)/RES;
196 m1 = c^6 + c^3;
197 m1 *= 0.5;
198 dB = -20 * log10(m1);
199 dB > 83 ? dB = 84;
200 i == 1? dB = 84;
201 y = y_step*dB/12 + y_step;
202
203 c=(i)/RES;
204 m2 = c^6 + c^3;
205 m2 *= 0.5;
206 dB1 = -20 * log10(m2);
207 dB1 > 83 ? dB1 = 84;
208 i == 1 ? dB = 84;
209 y1 = y_step*dB1/12 + y_step;
210
211 gfx_line(x_step+x-x_step1, y, x_step+x, y1, 0.5);
212 i += 1;
213 );
214
215 gfx_setfont(1, "Arial", 12); // main title
216 gfx_r = gfx_g = gfx_b = 0.0;
217 gfx_x = x_step;
218 gfx_y = gfx_h - y_step + 3;
219 gfx_drawstr("Polynomial Fader: Gain (dB) - vs - Fader Travel (mm)");
220
221 // mouse
222 mouse_cap == 1 ? (
223 xx = mouse_x;
224 xx > gfx_w * 0.1 ? (
225 xx < gfx_w * 0.9 ? (
226 yy = mouse_y;
227 yy > gfx_h * 0.1 ? (
228 yy < gfx_h * 0.8 ? (
229 slider1 = 100 * (xx - gfx_w*.1) / (gfx_w*.9 - gfx_w*.1);
230 slider1 < 0.3 ? slider1 = floor(slider1);
231 slider1 > 99.7 ? slider1 = ceil(slider1);
232 slider1 = floor(slider1*10);
233 slider1 /= 10;
234 sliderchange(slider1);
235 slider_automate(slider1);
236 c = slider1/100;
237 m = c^6 + c^3;
238 m *= 0.5;
239 );
240 );
241 );
242 );
243 );
244
245