History

Merge branch 'main' of github.com:ccrma/chugins

Ge Wang committed 3 years ago

Commit ebda1332 parents 94217c3 2467fb713 files · +1038 −6Browse files

Unified · Split

13 files
  1. Elliptic/ellipse.c +3 −3
  2. Mesh2D/Stk.cpp +3 −3
  3. Range/README.md +93 −0
  4. Range/Range-example.ck +17 −0
  5. Range/Range-test.ck +91 −0
  6. Range/Range.cpp +462 −0
  7. Range/Range.dsp +117 −0
  8. Range/Range.dsw +29 −0
  9. Range/Range.vcxproj +77 −0
  10. Range/makefile +111 −0
  11. Range/makefile.linux +8 −0
  12. Range/makefile.osx +9 −0
  13. Range/makefile.win32 +18 −0
Elliptic/ellipse.c+3−3
@@ -63,9 +63,9 @@ ellpset(EllSect es[], float *xnorm) · 62 unmodified lines
6363 float
6464 ellipse(float sig, int nsects, EllSect es[], float xnorm)
6565 {
66− register int i;
67− register float y0;
68− register EllSect *s;
66+ /* register */ int i;
67+ /* register */ float y0;
68+ /* register */ EllSect *s;
6969
7070 for (i = 0; i < nsects; i++) {
7171 s = &es[i];
Mesh2D/Stk.cpp+3−3
@@ -125,7 +125,7 @@ void Stk :: setRawwavePath( std::string path ) · 124 unmodified lines
125125
126126 void Stk :: swap16(unsigned char *ptr)
127127 {
128− register unsigned char val;
128+ /* register */ unsigned char val;
129129
130130 // Swap 1st and 2nd bytes
131131 val = *(ptr);
@@ -135,7 +135,7 @@ void Stk :: swap16(unsigned char *ptr) · 3 unmodified lines
135135
136136 void Stk :: swap32(unsigned char *ptr)
137137 {
138− register unsigned char val;
138+ /* register */ unsigned char val;
139139
140140 // Swap 1st and 4th bytes
141141 val = *(ptr);
@@ -151,7 +151,7 @@ void Stk :: swap32(unsigned char *ptr) · 9 unmodified lines
151151
152152 void Stk :: swap64(unsigned char *ptr)
153153 {
154− register unsigned char val;
154+ /* register */ unsigned char val;
155155
156156 // Swap 1st and 8th bytes
157157 val = *(ptr);
Range/README.md+93−0
@@ -0,0 +1,93 @@
1+# Range (unit generator)
2+ |- (inheritance) Range -> UGen -> Object
3+
4+
5+ `Range` is a UGen that maps an input range to an output range. It currently supports linear mapping between ranges as well as clipping.
6+ This is particularly useful for LFOs where the useful parameter values don't center around one.
7+
8+ You can define ranges in terms of min/max values:
9+
10+ ```
11+ // Use scaler to make an easy vibrato
12+SinOsc lfo => Range r => blackhole;
13+SinOsc tone => dac;
14+
15+3 => lfo.freq;
16+
17+// Modulate frequency +- 10Hz around A440
18+(-1, 1, 430, 450) => r.range
19+
20+while(10::ms => now) {
21+ r.last() => tone.freq;
22+}
23+```
24+
25+...or by defining a range center value and a radius size:
26+
27+```
28+// Use scaler to make an easy vibrato
29+SinOsc lfo => Range r => blackhole;
30+SinOsc tone => dac;
31+
32+// Help reveals all secrets
33+Range.help();
34+
35+3 => lfo.freq;
36+// Modulate frequency +- 10Hz around A440
37+(0, 1, 440, 10) => r.radius;
38+
39+while(10::ms => now) {
40+ r.last() => tone.freq;
41+}
42+```
43+
44+## Range Functions
45+
46+* `int clip( int val );`
47+
48+ Set Range's clipping mode. Accepted values are: 0 (no clipping), 1 (hard clipping). Defaults to 0
49+* `int clip();`
50+
51+ Get clip state.
52+* `float inCenter();`
53+
54+ Get input center.
55+* `float inMax();`
56+
57+ Get input max.
58+* `float inMin();`
59+
60+ Get input min.
61+* `float inRad();`
62+
63+ Get input radius.
64+* `void inRadius( float center, float radius );`
65+
66+ Set the expected input radius.
67+* `void inRange( float min, float max );`
68+
69+ Set the expected input range.
70+* `float outCenter();`
71+
72+ Get output center.
73+* `float outMax();`
74+
75+ Get output max.
76+* `float outMin();`
77+
78+ Get output min.
79+* `float outRad();`
80+
81+ Get output radius.
82+* `void outRadius( float center, float radius );`
83+
84+ Set the output radius.
85+* `void outRange( float min, float max );`
86+
87+ Set the output range.
88+* `void radius( float inCenter, float inRadius, float outCenter, float outRadius );`
89+
90+ Set the expected input range and desired output range in terms of a center with a radius.
91+* `void range( float inMin, float inMax, float outMin, float outMax );`
92+
93+ Set the expected input range and desired output range.
Range/Range-example.ck+17−0
@@ -0,0 +1,17 @@
1+// Use Range to make an easy vibrato
2+SinOsc lfo => Range r => blackhole;
3+SinOsc tone => dac;
4+
5+// Help reveals all secrets
6+Range.help();
7+
8+3 => lfo.freq;
9+// Modulate frequency +- 10Hz around A440
10+(0, 1, 440, 10) => r.radius;
11+
12+// This is equivalent to the above line, but sets the input/output range specifically
13+// (-1, 1, 430, 450) => r.range
14+
15+while(10::ms => now) {
16+ r.last() => tone.freq;
17+}
Range/Range-test.ck+91−0
@@ -0,0 +1,91 @@
1+SinOsc sin => Range scale => blackhole;
2+sin => Gain g => blackhole;
3+
4+(-1, 1, 0, 2) => scale.range;
5+validate(1.0);
6+validateRange(-1, 1, 0, 2);
7+validateRadius(0, 1, 1, 1);
8+
9+(0, 1, 1, 1 ) => scale.radius;
10+validate(1.0);
11+validateRange(-1, 1, 0, 2);
12+validateRadius(0, 1, 1, 1);
13+
14+(-1, 1) => scale.inRange;
15+validate(1.0);
16+validateRange(-1, 1, 0, 2);
17+validateRadius(0, 1, 1, 1);
18+
19+(0, 2) => scale.outRange;
20+validate(1.0);
21+validateRange(-1, 1, 0, 2);
22+validateRadius(0, 1, 1, 1);
23+
24+(0, 1) => scale.inRadius;
25+validate(1.0);
26+validateRange(-1, 1, 0, 2);
27+validateRadius(0, 1, 1, 1);
28+
29+(1, 1) => scale.outRadius;
30+validate(1.0);
31+validateRange(-1, 1, 0, 2);
32+validateRadius(0, 1, 1, 1);
33+
34+// test exceeding clip bounds
35+2 => sin.gain;
36+validate(1.0);
37+validateRange(-1, 1, 0, 2);
38+validateRadius(0, 1, 1, 1);
39+
40+// test with hard clipping
41+1 => scale.clip;
42+validateClip(1.0, 0, 2);
43+
44+fun void validate(float offset) {
45+ now + 1::second => time later;
46+ while(now < later) {
47+1::samp => now;
48+ (g.last()) + offset => float want;
49+ if (!within(scale.last(), want, 0.001)) {
50+ <<< "FAILURE, in = ", g.last(), "got = ", scale.last(), "want = ", want >>>;
51+ }
52+ }
53+}
54+
55+fun void validateClip(float offset, float min, float max) {
56+ now + 1::second => time later;
57+ while(now < later) {
58+ 1::samp => now;
59+ (g.last()) + offset => float want;
60+ Math.max(want, min) => want;
61+ Math.min(want, max) => want;
62+ if (!within(scale.last(), want, 0.001)) {
63+ <<< "FAILURE, in = ", g.last(), "got = ", scale.last(), "want = ", want >>>;
64+ }
65+ }
66+}
67+
68+
69+// check that two floats are within err of each other
70+fun int within(float a, float b, float err) {
71+ Math.fabs(a - b) => float result;
72+
73+ if (result < err) {
74+ return true;
75+ }
76+ return false;
77+}
78+
79+fun void validateRange(float inMin, float inMax, float outMin, float outMax) {
80+ if (!within(scale.inMin(), inMin, 0.001)) <<< "inMin FAILURE", scale.inMin(), inMin >>>;
81+ if (!within(scale.inMax(), inMax, 0.001)) <<< "inMax FAILURE", scale.inMax(), inMax >>>;
82+ if (!within(scale.outMin(), outMin, 0.001)) <<< "outMin FAILURE", scale.outMin(), outMin >>>;
83+ if (!within(scale.outMax(), outMax, 0.001)) <<< "outMax FAILURE", scale.outMax(), outMax >>>;
84+}
85+
86+fun void validateRadius(float inCenter, float inRadius, float outCenter, float outRadius) {
87+ if (!within(scale.inCenter(), inCenter, 0.001)) <<< "inCenter FAILURE", scale.inCenter(), inCenter >>>;
88+ if (!within(scale.inRad(), inRadius, 0.001)) <<< "inRadius FAILURE", scale.inRad(), inRadius >>>;
89+ if (!within(scale.outCenter(), outCenter, 0.001)) <<< "outCenter FAILURE", scale.outCenter(), outCenter >>>;
90+ if (!within(scale.outRad(), outRadius, 0.001)) <<< "outRadius FAILURE", scale.outRad(), outRadius >>>;
91+}
Range/Range.cpp+462−0
@@ -0,0 +1,462 @@
1+//-----------------------------------------------------------------------------
2+// name: Range.cpp
3+// desc: Scale an input signal from one number range to another.
4+// This is useful for things such as making LFOs that drive
5+// parameters that are do not fall under the output range of
6+// most oscillators, like vibrato.
7+//
8+// example:
9+// // Use range to make an easy vibrato
10+// SinOsc lfo = > Range r = > blackhole;
11+// SinOsc tone = > dac;
12+//
13+// // Help reveals all secrets
14+// Range.help();
15+//
16+// 3 = > lfo.freq;
17+// (0, 1, 440, 10) = > r.radius;
18+//
19+// while (10::ms = > now) {
20+// r.last() = > tone.freq;
21+// }
22+//
23+// authors: Nick Shaheed (nshaheed@ccrma.stanford.edu)
24+// date: Winter 2022
25+//
26+//-----------------------------------------------------------------------------
27+
28+// this should align with the correct versions of these ChucK files
29+#include "chuck_dl.h"
30+#include "chuck_def.h"
31+
32+// general includes
33+#include <stdio.h>
34+#include <limits.h>
35+
36+// declaration of chugin constructor
37+CK_DLL_CTOR(range_ctor);
38+// declaration of chugin desctructor
39+CK_DLL_DTOR(range_dtor);
40+
41+// getters and setters
42+CK_DLL_MFUN(range_setInRange);
43+CK_DLL_MFUN(range_setInRadius);
44+CK_DLL_MFUN(range_setOutRange);
45+CK_DLL_MFUN(range_setOutRadius);
46+CK_DLL_MFUN(range_setRange);
47+CK_DLL_MFUN(range_setRadius);
48+
49+CK_DLL_MFUN(range_getInMin);
50+CK_DLL_MFUN(range_getInMax);
51+CK_DLL_MFUN(range_getOutMin);
52+CK_DLL_MFUN(range_getOutMax);
53+CK_DLL_MFUN(range_getInCenter);
54+CK_DLL_MFUN(range_getInRadius);
55+CK_DLL_MFUN(range_getOutCenter);
56+CK_DLL_MFUN(range_getOutRadius);
57+
58+CK_DLL_MFUN(range_setClip);
59+CK_DLL_MFUN(range_getClip);
60+
61+// for Chugins extending UGen, this is mono synthesis function for 1 sample
62+CK_DLL_TICK(range_tick);
63+
64+// this is a special offset reserved for Chugin internal data
65+t_CKINT range_data_offset = 0;
66+
67+class Range
68+{
69+public:
70+ // constructor
71+ Range( t_CKFLOAT fs)
72+ {
73+ m_param = 0;
74+ m_in_min = -1;
75+ m_in_max = 1;
76+ m_out_min = 0;
77+ m_out_max = 1;
78+ m_clip = 0;
79+ }
80+
81+ // for Chugins extending UGen
82+ SAMPLE tick( SAMPLE in )
83+ {
84+ SAMPLE out = (in - m_in_min) / (m_in_max - m_in_min);
85+ out = out * (m_out_max - m_out_min) + m_out_min;
86+
87+ if (!m_clip) return out;
88+
89+ // hard clipping - nothing past the limits allowed.
90+ if (out < m_out_min) out = m_out_min;
91+ if (out > m_out_max) out = m_out_max;
92+
93+ // default: this passes whatever input is patched into Chugin
94+ return out;
95+ }
96+
97+ t_CKVOID setInRange( t_CKFLOAT in_min, t_CKFLOAT in_max ) {
98+ m_in_min = in_min;
99+ m_in_max = in_max;
100+ }
101+
102+ t_CKVOID setInRadius( t_CKFLOAT in_center, t_CKFLOAT in_radius ) {
103+ m_in_min = in_center - in_radius;
104+ m_in_max = in_center + in_radius;
105+ }
106+
107+ t_CKVOID setOutRange( t_CKFLOAT out_min, t_CKFLOAT out_max ) {
108+ m_out_min = out_min;
109+ m_out_max = out_max;
110+ }
111+
112+ t_CKVOID setOutRadius( t_CKFLOAT out_center, t_CKFLOAT out_radius ) {
113+ m_out_min = out_center - out_radius;
114+ m_out_max = out_center + out_radius;
115+ }
116+
117+ t_CKVOID setRange( t_CKFLOAT in_min, t_CKFLOAT in_max, t_CKFLOAT out_min, t_CKFLOAT out_max ) {
118+ m_in_min = in_min;
119+ m_in_max = in_max;
120+ m_out_min = out_min;
121+ m_out_max = out_max;
122+ }
123+
124+ t_CKVOID setRadius(t_CKFLOAT in_center, t_CKFLOAT in_radius, t_CKFLOAT out_center, t_CKFLOAT out_radius) {
125+ m_in_min = in_center - in_radius;
126+ m_in_max = in_center + in_radius;
127+ m_out_min = out_center - out_radius;
128+ m_out_max = out_center + out_radius;
129+ }
130+
131+ t_CKINT setClip(t_CKINT val)
132+ {
133+ m_clip = val;
134+ return val;
135+ }
136+
137+ t_CKINT getClip()
138+ {
139+ return m_clip;
140+ }
141+
142+ // get parameter example
143+ t_CKFLOAT getInMin() { return m_in_min; }
144+ t_CKFLOAT getInMax() { return m_in_max; }
145+ t_CKFLOAT getOutMin() { return m_out_min; }
146+ t_CKFLOAT getOutMax() { return m_out_max; }
147+
148+ t_CKFLOAT getInCenter() { return (m_in_min + m_in_max) / 2; }
149+ t_CKFLOAT getInRadius() { return (m_in_max - m_in_min) / 2; }
150+ t_CKFLOAT getOutCenter() { return (m_out_min + m_out_max) / 2; }
151+ t_CKFLOAT getOutRadius() { return (m_out_max - m_out_min) / 2; }
152+
153+
154+private:
155+ // instance data
156+ t_CKFLOAT m_param;
157+ t_CKFLOAT m_in_min, m_in_max, m_out_min, m_out_max;
158+ t_CKINT m_clip;
159+};
160+
161+
162+// query function: chuck calls this when loading the Chugin
163+// NOTE: developer will need to modify this function to
164+// add additional functions to this Chugin
165+CK_DLL_QUERY( Range )
166+{
167+ // hmm, don't change this...
168+ QUERY->setname(QUERY, "Range");
169+
170+ // begin the class definition
171+ // can change the second argument to extend a different ChucK class
172+ QUERY->begin_class(QUERY, "Range", "UGen");
173+
174+ // register the constructor (probably no need to change)
175+ QUERY->add_ctor(QUERY, range_ctor);
176+ // register the destructor (probably no need to change)
177+ QUERY->add_dtor(QUERY, range_dtor);
178+
179+ // for UGen's only: add tick function
180+ QUERY->add_ugen_func(QUERY, range_tick, NULL, 1, 1);
181+
182+ // NOTE: if this is to be a UGen with more than 1 channel,
183+ // e.g., a multichannel UGen -- will need to use add_ugen_funcf()
184+ // and declare a tickf function using CK_DLL_TICKF
185+
186+ QUERY->add_mfun(QUERY, range_setInRange, "void", "inRange");
187+ QUERY->add_arg(QUERY, "float", "min");
188+ QUERY->add_arg(QUERY, "float", "max");
189+ QUERY->doc_func(QUERY, "Set the expected input range.");
190+
191+ QUERY->add_mfun(QUERY, range_setInRadius, "void", "inRadius");
192+ QUERY->add_arg(QUERY, "float", "center");
193+ QUERY->add_arg(QUERY, "float", "radius");
194+ QUERY->doc_func(QUERY, "Set the expected input radius.");
195+
196+ QUERY->add_mfun(QUERY, range_setOutRange, "void", "outRange");
197+ QUERY->add_arg(QUERY, "float", "min");
198+ QUERY->add_arg(QUERY, "float", "max");
199+ QUERY->doc_func(QUERY, "Set the output range.");
200+
201+ QUERY->add_mfun(QUERY, range_setOutRadius, "void", "outRadius");
202+ QUERY->add_arg(QUERY, "float", "center");
203+ QUERY->add_arg(QUERY, "float", "radius");
204+ QUERY->doc_func(QUERY, "Set the output radius.");
205+
206+ QUERY->add_mfun(QUERY, range_setRange, "void", "range");
207+ QUERY->add_arg(QUERY, "float", "inMin");
208+ QUERY->add_arg(QUERY, "float", "inMax");
209+ QUERY->add_arg(QUERY, "float", "outMin");
210+ QUERY->add_arg(QUERY, "float", "outMax");
211+ QUERY->doc_func(QUERY, "Set the expected input range and desired output range.");
212+
213+ QUERY->add_mfun(QUERY, range_setRadius, "void", "radius");
214+ QUERY->add_arg(QUERY, "float", "inCenter");
215+ QUERY->add_arg(QUERY, "float", "inRadius");
216+ QUERY->add_arg(QUERY, "float", "outCenter");
217+ QUERY->add_arg(QUERY, "float", "outRadius");
218+ QUERY->doc_func(QUERY, "Set the expected input range and desired output range in terms of a center with a radius.");
219+
220+ QUERY->add_mfun(QUERY, range_getInMin, "float", "inMin");
221+ QUERY->doc_func(QUERY, "Get input min.");
222+
223+ QUERY->add_mfun(QUERY, range_getInMax, "float", "inMax");
224+ QUERY->doc_func(QUERY, "Get input max.");
225+
226+ QUERY->add_mfun(QUERY, range_getOutMin, "float", "outMin");
227+ QUERY->doc_func(QUERY, "Get output min.");
228+
229+ QUERY->add_mfun(QUERY, range_getOutMax, "float", "outMax");
230+ QUERY->doc_func(QUERY, "Get output max.");
231+
232+ QUERY->add_mfun(QUERY, range_getInCenter, "float", "inCenter");
233+ QUERY->doc_func(QUERY, "Get input center.");
234+
235+ QUERY->add_mfun(QUERY, range_getInRadius, "float", "inRad");
236+ QUERY->doc_func(QUERY, "Get input radius.");
237+
238+ QUERY->add_mfun(QUERY, range_getOutCenter, "float", "outCenter");
239+ QUERY->doc_func(QUERY, "Get output center.");
240+
241+ QUERY->add_mfun(QUERY, range_getOutRadius, "float", "outRad");
242+ QUERY->doc_func(QUERY, "Get output radius.");
243+
244+ QUERY->add_mfun(QUERY, range_setClip, "int", "clip");
245+ QUERY->add_arg(QUERY, "int", "val");
246+ QUERY->doc_func(QUERY, "Set Range's clipping mode. Accepted values are: 0 (no clipping), 1 (hard clipping). Defaults to 0");
247+
248+ QUERY->add_mfun(QUERY, range_getClip, "int", "clip");
249+ QUERY->doc_func(QUERY, "Get clip state.");
250+
251+
252+ // this reserves a variable in the ChucK internal class to store
253+ // referene to the c++ class we defined above
254+ range_data_offset = QUERY->add_mvar(QUERY, "int", "@s_data", false);
255+
256+ // end the class definition
257+ // IMPORTANT: this MUST be called!
258+ QUERY->end_class(QUERY);
259+
260+ // wasn't that a breeze?
261+ return TRUE;
262+}
263+
264+
265+// implementation for the constructor
266+CK_DLL_CTOR(range_ctor)
267+{
268+ // get the offset where we'll store our internal c++ class pointer
269+ OBJ_MEMBER_INT(SELF, range_data_offset) = 0;
270+
271+ // instantiate our internal c++ class representation
272+ Range * s_obj = new Range(API->vm->get_srate(API, SHRED));
273+
274+ // store the pointer in the ChucK object member
275+ OBJ_MEMBER_INT(SELF, range_data_offset) = (t_CKINT) s_obj;
276+}
277+
278+
279+// implementation for the destructor
280+CK_DLL_DTOR(range_dtor)
281+{
282+ // get our c++ class pointer
283+ Range * s_obj = (Range *) OBJ_MEMBER_INT(SELF, range_data_offset);
284+ // check it
285+ if( s_obj )
286+ {
287+ // clean up
288+ delete s_obj;
289+ OBJ_MEMBER_INT(SELF, range_data_offset) = 0;
290+ s_obj = NULL;
291+ }
292+}
293+
294+
295+// implementation for tick function
296+CK_DLL_TICK(range_tick)
297+{
298+ // get our c++ class pointer
299+ Range * s_obj = (Range *) OBJ_MEMBER_INT(SELF, range_data_offset);
300+
301+ // invoke our tick function; store in the magical out variable
302+ if(s_obj) *out = s_obj->tick(in);
303+
304+ // yes
305+ return TRUE;
306+}
307+
308+CK_DLL_MFUN(range_setInRange)
309+{
310+ // get our c++ class pointer
311+ Range* s_obj = (Range*)OBJ_MEMBER_INT(SELF, range_data_offset);
312+
313+ t_CKFLOAT inMin = GET_NEXT_FLOAT(ARGS);
314+ t_CKFLOAT inMax = GET_NEXT_FLOAT(ARGS);
315+
316+ // set the return value
317+ s_obj->setInRange(inMin, inMax);
318+}
319+
320+CK_DLL_MFUN(range_setInRadius)
321+{
322+ // get our c++ class pointer
323+ Range* s_obj = (Range*)OBJ_MEMBER_INT(SELF, range_data_offset);
324+
325+ t_CKFLOAT inCenter = GET_NEXT_FLOAT(ARGS);
326+ t_CKFLOAT inRadius = GET_NEXT_FLOAT(ARGS);
327+
328+ // set the return value
329+ s_obj->setInRadius(inCenter, inRadius);
330+}
331+
332+CK_DLL_MFUN(range_setOutRange)
333+{
334+ // get our c++ class pointer
335+ Range* s_obj = (Range*)OBJ_MEMBER_INT(SELF, range_data_offset);
336+
337+ t_CKFLOAT outMin = GET_NEXT_FLOAT(ARGS);
338+ t_CKFLOAT outMax = GET_NEXT_FLOAT(ARGS);
339+
340+ // set the return value
341+ s_obj->setOutRange(outMin, outMax);
342+}
343+
344+CK_DLL_MFUN(range_setOutRadius)
345+{
346+ // get our c++ class pointer
347+ Range* s_obj = (Range*)OBJ_MEMBER_INT(SELF, range_data_offset);
348+
349+ t_CKFLOAT outCenter = GET_NEXT_FLOAT(ARGS);
350+ t_CKFLOAT outRadius = GET_NEXT_FLOAT(ARGS);
351+
352+ // set the return value
353+ s_obj->setOutRadius(outCenter, outRadius);
354+}
355+
356+CK_DLL_MFUN(range_setRange)
357+{
358+ // get our c++ class pointer
359+ Range* s_obj = (Range*)OBJ_MEMBER_INT(SELF, range_data_offset);
360+
361+ t_CKFLOAT inMin = GET_NEXT_FLOAT(ARGS);
362+ t_CKFLOAT inMax = GET_NEXT_FLOAT(ARGS);
363+ t_CKFLOAT outMin = GET_NEXT_FLOAT(ARGS);
364+ t_CKFLOAT outMax = GET_NEXT_FLOAT(ARGS);
365+
366+ // set the return value
367+ s_obj->setRange(inMin, inMax, outMin, outMax);
368+}
369+
370+CK_DLL_MFUN(range_setRadius)
371+{
372+ // get our c++ class pointer
373+ Range* s_obj = (Range*)OBJ_MEMBER_INT(SELF, range_data_offset);
374+
375+ t_CKFLOAT inCenter = GET_NEXT_FLOAT(ARGS);
376+ t_CKFLOAT inRadius = GET_NEXT_FLOAT(ARGS);
377+ t_CKFLOAT outCenter = GET_NEXT_FLOAT(ARGS);
378+ t_CKFLOAT outRadius = GET_NEXT_FLOAT(ARGS);
379+
380+ // set the return value
381+ s_obj->setRadius(inCenter, inRadius, outCenter, outRadius);
382+}
383+
384+CK_DLL_MFUN(range_getInMin)
385+{
386+ // get our c++ class pointer
387+ Range* s_obj = (Range*)OBJ_MEMBER_INT(SELF, range_data_offset);
388+ // set the return value
389+ RETURN->v_float = s_obj->getInMin();
390+}
391+
392+CK_DLL_MFUN(range_getInMax)
393+{
394+ // get our c++ class pointer
395+ Range* s_obj = (Range*)OBJ_MEMBER_INT(SELF, range_data_offset);
396+ // set the return value
397+ RETURN->v_float = s_obj->getInMax();
398+}
399+
400+CK_DLL_MFUN(range_getOutMin)
401+{
402+ // get our c++ class pointer
403+ Range* s_obj = (Range*)OBJ_MEMBER_INT(SELF, range_data_offset);
404+ // set the return value
405+ RETURN->v_float = s_obj->getOutMin();
406+}
407+
408+CK_DLL_MFUN(range_getOutMax)
409+{
410+ // get our c++ class pointer
411+ Range* s_obj = (Range*)OBJ_MEMBER_INT(SELF, range_data_offset);
412+ // set the return value
413+ RETURN->v_float = s_obj->getOutMax();
414+}
415+
416+CK_DLL_MFUN(range_getInCenter)
417+{
418+ // get our c++ class pointer
419+ Range* s_obj = (Range*)OBJ_MEMBER_INT(SELF, range_data_offset);
420+ // set the return value
421+ RETURN->v_float = s_obj->getInCenter();
422+}
423+
424+CK_DLL_MFUN(range_getInRadius)
425+{
426+ // get our c++ class pointer
427+ Range* s_obj = (Range*)OBJ_MEMBER_INT(SELF, range_data_offset);
428+ // set the return value
429+ RETURN->v_float = s_obj->getInRadius();
430+}
431+
432+CK_DLL_MFUN(range_getOutCenter)
433+{
434+ // get our c++ class pointer
435+ Range* s_obj = (Range*)OBJ_MEMBER_INT(SELF, range_data_offset);
436+ // set the return value
437+ RETURN->v_float = s_obj->getOutCenter();
438+}
439+
440+CK_DLL_MFUN(range_getOutRadius)
441+{
442+ // get our c++ class pointer
443+ Range* s_obj = (Range*)OBJ_MEMBER_INT(SELF, range_data_offset);
444+ // set the return value
445+ RETURN->v_float = s_obj->getOutRadius();
446+}
447+
448+CK_DLL_MFUN(range_setClip)
449+{
450+ // get our c++ class pointer
451+ Range* s_obj = (Range*)OBJ_MEMBER_INT(SELF, range_data_offset);
452+ // set the return value
453+ RETURN->v_int = s_obj->setClip(GET_NEXT_INT(ARGS));
454+}
455+
456+CK_DLL_MFUN(range_getClip)
457+{
458+ // get our c++ class pointer
459+ Range* s_obj = (Range*)OBJ_MEMBER_INT(SELF, range_data_offset);
460+ // set the return value
461+ RETURN->v_int = s_obj->getClip();
462+}
Range/Range.dsp+117−0
@@ -0,0 +1,117 @@
1+# Microsoft Developer Studio Project File - Name="Range" - Package Owner=<4>
2+# Microsoft Developer Studio Generated Build File, Format Version 6.00
3+# ** DO NOT EDIT **
4+
5+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
6+
7+CFG=Range - Win32 Debug
8+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
9+!MESSAGE use the Export Makefile command and run
10+!MESSAGE
11+!MESSAGE NMAKE /f "Range.mak".
12+!MESSAGE
13+!MESSAGE You can specify a configuration when running NMAKE
14+!MESSAGE by defining the macro CFG on the command line. For example:
15+!MESSAGE
16+!MESSAGE NMAKE /f "Range.mak" CFG="Range - Win32 Debug"
17+!MESSAGE
18+!MESSAGE Possible choices for configuration are:
19+!MESSAGE
20+!MESSAGE "Range - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
21+!MESSAGE "Range - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
22+!MESSAGE
23+
24+# Begin Project
25+# PROP AllowPerConfigDependencies 0
26+# PROP Scc_ProjName ""
27+# PROP Scc_LocalPath ""
28+CPP=cl.exe
29+MTL=midl.exe
30+RSC=rc.exe
31+
32+!IF "$(CFG)" == "Range - Win32 Release"
33+
34+# PROP BASE Use_MFC 0
35+# PROP BASE Use_Debug_Libraries 0
36+# PROP BASE Output_Dir "Release"
37+# PROP BASE Intermediate_Dir "Release"
38+# PROP BASE Target_Dir ""
39+# PROP Use_MFC 0
40+# PROP Use_Debug_Libraries 0
41+# PROP Output_Dir "Release"
42+# PROP Intermediate_Dir "Release"
43+# PROP Ignore_Export_Lib 0
44+# PROP Target_Dir ""
45+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "SCALER_EXPORTS" /Yu"stdafx.h" /FD /c
46+# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\chuck\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "__PLATFORM_WIN32__" /D "__WINDOWS_DS__" /FD /c
47+# SUBTRACT CPP /YX /Yc /Yu
48+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
49+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
50+# ADD BASE RSC /l 0x409 /d "NDEBUG"
51+# ADD RSC /l 0x409 /d "NDEBUG"
52+BSC32=bscmake.exe
53+# ADD BASE BSC32 /nologo
54+# ADD BSC32 /nologo
55+LINK32=link.exe
56+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
57+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"Release/Range.chug"
58+
59+!ELSEIF "$(CFG)" == "Range - Win32 Debug"
60+
61+# PROP BASE Use_MFC 0
62+# PROP BASE Use_Debug_Libraries 1
63+# PROP BASE Output_Dir "Debug"
64+# PROP BASE Intermediate_Dir "Debug"
65+# PROP BASE Target_Dir ""
66+# PROP Use_MFC 0
67+# PROP Use_Debug_Libraries 1
68+# PROP Output_Dir "Debug"
69+# PROP Intermediate_Dir "Debug"
70+# PROP Ignore_Export_Lib 0
71+# PROP Target_Dir ""
72+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "SCALER_EXPORTS" /Yu"stdafx.h" /FD /GZ /c
73+# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "..\chuck\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "__PLATFORM_WIN32__" /D "__WINDOWS_DS__" /FD /GZ /c
74+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
75+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
76+# ADD BASE RSC /l 0x409 /d "_DEBUG"
77+# ADD RSC /l 0x409 /d "_DEBUG"
78+BSC32=bscmake.exe
79+# ADD BASE BSC32 /nologo
80+# ADD BSC32 /nologo
81+LINK32=link.exe
82+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
83+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"Debug/Range.chug" /pdbtype:sept
84+
85+!ENDIF
86+
87+# Begin Target
88+
89+# Name "Range - Win32 Release"
90+# Name "Range - Win32 Debug"
91+# Begin Group "Source Files"
92+
93+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
94+# Begin Source File
95+
96+SOURCE=.\Range.cpp
97+
98+!IF "$(CFG)" == "Range - Win32 Release"
99+
100+!ELSEIF "$(CFG)" == "Range - Win32 Debug"
101+
102+# ADD CPP /D "__WINDOWS_DS__"
103+
104+!ENDIF
105+
106+# End Source File
107+# End Group
108+# Begin Group "Header Files"
109+
110+# PROP Default_Filter "h;hpp;hxx;hm;inl"
111+# End Group
112+# Begin Group "Resource Files"
113+
114+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
115+# End Group
116+# End Target
117+# End Project
Range/Range.dsw+29−0
@@ -0,0 +1,29 @@
1+Microsoft Developer Studio Workspace File, Format Version 6.00
2+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
3+
4+###############################################################################
5+
6+Project: "Range"=.\Range.dsp - Package Owner=<4>
7+
8+Package=<5>
9+{{{
10+}}}
11+
12+Package=<4>
13+{{{
14+}}}
15+
16+###############################################################################
17+
18+Global:
19+
20+Package=<5>
21+{{{
22+}}}
23+
24+Package=<3>
25+{{{
26+}}}
27+
28+###############################################################################
29+
Range/Range.vcxproj+77−0
@@ -0,0 +1,77 @@
1+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
2+ <ItemGroup>
3+ <ProjectConfiguration Include="Debug|Win32">
4+ <Configuration>Debug</Configuration>
5+ <Platform>Win32</Platform>
6+ </ProjectConfiguration>
7+ <ProjectConfiguration Include="Release|Win32">
8+ <Configuration>Release</Configuration>
9+ <Platform>Win32</Platform>
10+ </ProjectConfiguration>
11+ </ItemGroup>
12+ <PropertyGroup Label="Globals">
13+ <ProjectGuid>{C2BC72BF-43A2-4AC3-94E7-D7ACEEEC8C37}</ProjectGuid>
14+ </PropertyGroup>
15+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
16+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
17+ <ConfigurationType>DynamicLibrary</ConfigurationType>
18+ <UseDebugLibraries>true</UseDebugLibraries>
19+ <CharacterSet>Unicode</CharacterSet>
20+ <PlatformToolset>v143</PlatformToolset>
21+ </PropertyGroup>
22+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
23+ <ConfigurationType>DynamicLibrary</ConfigurationType>
24+ <UseDebugLibraries>false</UseDebugLibraries>
25+ <WholeProgramOptimization>true</WholeProgramOptimization>
26+ <CharacterSet>Unicode</CharacterSet>
27+ <PlatformToolset>v143</PlatformToolset>
28+ </PropertyGroup>
29+ <Import Project="$(VCTargetsPath)/Microsoft.Cpp.props" />
30+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
31+ <LinkIncremental>true</LinkIncremental>
32+ <TargetExt>.chug</TargetExt>
33+ <IncludePath>../chuck/include;$(IncludePath)</IncludePath>
34+ </PropertyGroup>
35+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
36+ <LinkIncremental>false</LinkIncremental>
37+ <TargetExt>.chug</TargetExt>
38+ <IncludePath>../chuck/include;$(IncludePath)</IncludePath>
39+ </PropertyGroup>
40+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
41+ <ClCompile>
42+ <PrecompiledHeader>
43+ </PrecompiledHeader>
44+ <WarningLevel>Level3</WarningLevel>
45+ <Optimization>Disabled</Optimization>
46+ <PreprocessorDefinitions>WIN32;__PLATFORM_WIN32__;__WINDOWS_DS__;_DEBUG;_WINDOWS;_USRDLL;SCALER_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
47+ </ClCompile>
48+ <Link>
49+ <SubSystem>Windows</SubSystem>
50+ <GenerateDebugInformation>true</GenerateDebugInformation>
51+ </Link>
52+ </ItemDefinitionGroup>
53+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
54+ <ClCompile>
55+ <WarningLevel>Level3</WarningLevel>
56+ <PrecompiledHeader>
57+ </PrecompiledHeader>
58+ <Optimization>MaxSpeed</Optimization>
59+ <FunctionLevelLinking>true</FunctionLevelLinking>
60+ <IntrinsicFunctions>true</IntrinsicFunctions>
61+ <PreprocessorDefinitions>WIN32;__PLATFORM_WIN32__;__WINDOWS_DS__;NDEBUG;_WINDOWS;_USRDLL;SCALER_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
62+ </ClCompile>
63+ <Link>
64+ <SubSystem>Windows</SubSystem>
65+ <GenerateDebugInformation>true</GenerateDebugInformation>
66+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
67+ <OptimizeReferences>true</OptimizeReferences>
68+ </Link>
69+ </ItemDefinitionGroup>
70+ <ItemGroup>
71+ <ClCompile Include="Range.cpp" />
72+ </ItemGroup>
73+ <ItemGroup>
74+ <ClInclude Include="Range.h" />
75+ </ItemGroup>
76+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Targets" />
77+</Project>
Range/makefile+111−0
@@ -0,0 +1,111 @@
1+
2+# chugin name
3+CHUGIN_NAME=Range
4+
5+# all of the c/cpp files that compose this chugin
6+C_MODULES=
7+CXX_MODULES=Range.cpp
8+
9+# where the chuck headers are
10+CK_SRC_PATH?=../chuck/include/
11+
12+
13+# ---------------------------------------------------------------------------- #
14+# you won't generally need to change anything below this line for a new chugin #
15+# ---------------------------------------------------------------------------- #
16+
17+# default target: print usage message and quit
18+current:
19+ @echo "[chuck build]: please use one of the following configurations:"
20+ @echo " make linux, make osx, or make win32"
21+
22+ifneq ($(CK_TARGET),)
23+.DEFAULT_GOAL:=$(CK_TARGET)
24+ifeq ($(MAKECMDGOALS),)
25+MAKECMDGOALS:=$(.DEFAULT_GOAL)
26+endif
27+endif
28+
29+.PHONY: osx linux linux-oss linux-jack linux-alsa win32
30+osx linux linux-oss linux-jack linux-alsa: all
31+
32+win32:
33+ make -f makefile.win32
34+
35+CC=gcc
36+CXX=gcc
37+LD=g++
38+
39+CHUGIN_PATH=/usr/local/lib/chuck
40+
41+ifneq (,$(strip $(filter osx bin-dist-osx,$(MAKECMDGOALS))))
42+include makefile.osx
43+endif
44+
45+ifneq (,$(strip $(filter linux,$(MAKECMDGOALS))))
46+include makefile.linux
47+endif
48+
49+ifneq (,$(strip $(filter linux-oss,$(MAKECMDGOALS))))
50+include makefile.linux
51+endif
52+
53+ifneq (,$(strip $(filter linux-jack,$(MAKECMDGOALS))))
54+include makefile.linux
55+endif
56+
57+ifneq (,$(strip $(filter linux-alsa,$(MAKECMDGOALS))))
58+include makefile.linux
59+endif
60+
61+ifneq ($(CHUCK_DEBUG),)
62+FLAGS+= -g
63+else
64+FLAGS+= -O3
65+endif
66+
67+ifneq ($(CHUCK_STRICT),)
68+FLAGS+= -Werror
69+endif
70+
71+
72+
73+# default: build a dynamic chugin
74+CK_CHUGIN_STATIC?=0
75+
76+ifeq ($(CK_CHUGIN_STATIC),0)
77+SUFFIX=.chug
78+else
79+SUFFIX=.schug
80+FLAGS+= -D__CK_DLL_STATIC__
81+endif
82+
83+C_OBJECTS=$(addsuffix .o,$(basename $(C_MODULES)))
84+CXX_OBJECTS=$(addsuffix .o,$(basename $(CXX_MODULES)))
85+
86+CHUG=$(addsuffix $(SUFFIX),$(CHUGIN_NAME))
87+
88+all: $(CHUG)
89+
90+$(CHUG): $(C_OBJECTS) $(CXX_OBJECTS)
91+ifeq ($(CK_CHUGIN_STATIC),0)
92+ $(LD) $(LDFLAGS) -o $@ $^
93+else
94+ ar rv $@ $^
95+ ranlib $@
96+endif
97+
98+$(C_OBJECTS): %.o: %.c
99+ $(CC) $(FLAGS) -c -o $@ $<
100+
101+$(CXX_OBJECTS): %.o: %.cpp $(CK_SRC_PATH)/chuck_dl.h
102+ $(CXX) $(FLAGS) -c -o $@ $<
103+
104+install: $(CHUG)
105+ mkdir -p $(CHUGIN_PATH)
106+ cp $^ $(CHUGIN_PATH)
107+ chmod 755 $(CHUGIN_PATH)/$(CHUG)
108+
109+clean:
110+ rm -rf $(C_OBJECTS) $(CXX_OBJECTS) $(CHUG) Release Debug
111+
Range/makefile.linux+8−0
@@ -0,0 +1,8 @@
1+
2+CHUGIN_PATH=/usr/local/lib/chuck
3+
4+FLAGS=-D__LINUX_ALSA__ -D__PLATFORM_LINUX__ -I$(CK_SRC_PATH) -fPIC
5+LDFLAGS=-shared -lstdc++
6+
7+LD=gcc
8+CXX=g++
Range/makefile.osx+9−0
@@ -0,0 +1,9 @@
1+
2+ARCHS?=x86_64
3+ARCHOPTS=$(addprefix -arch ,$(ARCHS))
4+
5+FLAGS+=-mmacosx-version-min=10.9 -D__MACOSX_CORE__ -I$(CK_SRC_PATH) $(ARCHOPTS) -fPIC
6+LDFLAGS+=-mmacosx-version-min=10.9 -shared -lc++ $(ARCHOPTS)
7+
8+LD=clang++
9+CXX=clang++
Range/makefile.win32+18−0
@@ -0,0 +1,18 @@
1+MSBUILD=msbuild.exe
2+
3+ifneq (,$(CHUCK_DEBUG))
4+CONFIG=Debug
5+CHUG_BIN=Debug/Scaler.chug
6+else
7+CONFIG=Release
8+CHUG_BIN=Release/Scaler.chug
9+endif
10+
11+default: $(CHUG_BIN)
12+
13+$(CHUG_BIN):
14+ $(MSBUILD) /p:Configuration=$(CONFIG)
15+
16+clean:
17+ $(MSBUILD) /p:Configuration=$(CONFIG) /t:Clean
18+

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t