//-----------------------------------------------------------------------------// Entaro ChucK Developer!// This is a Chugin boilerplate, generated by chugerate!//----------------------------------------------------------------------------- // this should align with the correct versions of these ChucK files#include "chuck_dl.h"#include "chuck_def.h"#include "ulib_math.h" #include "Spectacle-dsp.h" // general includes#include <stdio.h>#include <limits.h> // declaration of chugin constructorCK_DLL_CTOR(spectacle_ctor);// declaration of chugin desctructorCK_DLL_DTOR(spectacle_dtor); // example of getter/setterCK_DLL_MFUN(spectacle_setParam);CK_DLL_MFUN(spectacle_getParam); CK_DLL_MFUN(spectacle_setFFTlen);CK_DLL_MFUN(spectacle_getFFTlen); CK_DLL_MFUN(spectacle_setOverlap);CK_DLL_MFUN(spectacle_getOverlap); CK_DLL_MFUN(spectacle_setMaxDelay);CK_DLL_MFUN(spectacle_getMaxDelay); CK_DLL_MFUN(spectacle_clear); CK_DLL_MFUN(spectacle_setHold);CK_DLL_MFUN(spectacle_getHold); CK_DLL_MFUN(spectacle_setPostEQ);CK_DLL_MFUN(spectacle_getPostEQ); CK_DLL_MFUN(spectacle_setMinFreq);CK_DLL_MFUN(spectacle_getMinFreq); CK_DLL_MFUN(spectacle_setMaxFreq);CK_DLL_MFUN(spectacle_getMaxFreq); CK_DLL_MFUN(spectacle_setFreqRange); // for Chugins extending UGen, this is mono synthesis function for 1 sampleCK_DLL_TICKF(spectacle_tick); // this is a special offset reserved for Chugin internal datat_CKINT spectacle_data_offset = 0; #define CONFORM_INPUT#define CLIP(a, lo, hi) ( (a)>(lo)?( (a)<(hi)?(a):(hi) ):(lo) ) #define kDefaultFFTLen 1024#define kDefaultWindowLen 2048#define kDefaultOverlap 2#define kDefaultMaxDelTime 6.0f#define kMinMaxDelTime 0.1f#define kMaxMaxDelTime 20.0f#define kMaxTableLen 512 // class definition for internal Chugin data// (note: this isn't strictly necessary, but serves as example// of one recommended approach)class Spectacle{public: // constructor Spectacle( t_CKFLOAT fs) { m_param = 0; fftlen = kDefaultFFTLen; windowlen = kDefaultWindowLen; overlap = kDefaultOverlap; maxdeltime = kDefaultMaxDelTime; maxdeltime = CLIP(maxdeltime, kMinMaxDelTime, kMaxMaxDelTime); srate = fs; spectdelay = NULL; float *del = dttable; float *eq = eqtable; float *feed = fbtable; int *bm = eqbinmap; int *dbm = delaybinmap; for (int i = 0; i < kMaxTableLen; i++) { *del++ = 0.0; *eq++ = 0.0; *feed++ = 0.0; *bm++ = 0; *dbm++ = 0; } dttablen = eqtablen = fbtablen = 0; eqbinmaplen = delaybinmaplen = 0; dminfreq = dmaxfreq = minfreq = maxfreq = 0.0; posteq = hold = false; spectdelay = new Spectacle_dsp(); spectdelay->init(fftlen, windowlen, overlap, srate, maxdeltime); } ~Spectacle() { delete spectdelay; } // for Chugins extending UGen void tick( SAMPLE* in, SAMPLE* out, int nframes) { memset (out, 0, sizeof(SAMPLE)*nframes); for (int i=0; i<nframes; i+=2) { spectdelay->run(in+i, out+i, 1); spectdelay->run(in+i, out+i+1, 1); } // process a block of samples //spectdelay->run(in, out, nframes); } void clear() { printf ( "Spectacle: cleared.\n" ); spectdelay->clear(); } // set parameter example float setParam( t_CKFLOAT p ) { m_param = p; return p; } // get parameter example float getParam() { return m_param; } float setMaxDelay ( t_CKDUR p) { float dt = (p / srate); dt = CLIP(dt, kMinMaxDelTime, kMaxMaxDelTime); if (dt > maxdeltime) { // pin existing delay times to new maximum for (int i = 0; i < dttablen; i++) { if (dttable[i] > dt) dttable[i] = dt; } } maxdeltime = dt; spectdelay->set_maxdeltime(dt); return p; } float getMaxDelay () { return (maxdeltime * srate); } // set parameter example int setHold( t_CKINT p ) { if (p > 1 || p < 0) { p = 1; printf ("Spectacle: hold must be 0 or 1\n"); } hold = p; spectdelay->set_hold(p); return p; } // get parameter example int getHold() { return hold; } // set parameter example int setPostEQ( t_CKINT p ) { if (p > 1 || p < 0) { p = 1; printf ("Spectacle: posteq must be 0 or 1\n"); } posteq = p; spectdelay->set_posteq(p); return p; } // get parameter example int getPostEQ() { return posteq; } // set parameter example int setFFTlen( t_CKINT p ) { clear(); int newfft = 1; // ensure it's a power of 2 while (newfft < p) newfft = newfft << 1; fftlen = newfft; windowlen = newfft * 2; spectdelay->init(fftlen, windowlen, overlap, srate, maxdeltime); return fftlen; } int getFFTlen() { return fftlen; }; // set parameter example int setOverlap( t_CKINT p ) { clear(); overlap = p; spectdelay->init(fftlen, windowlen, overlap, srate, maxdeltime); return overlap; } int getOverlap() { return overlap; }; private: // instance data float m_param; int fftlen, windowlen, overlap; float srate, maxdeltime; Spectacle_dsp *spectdelay; float eqtable[kMaxTableLen]; float dttable[kMaxTableLen]; float fbtable[kMaxTableLen]; int eqbinmap[kMaxTableLen]; int delaybinmap[kMaxTableLen]; int eqtablen, dttablen, fbtablen, eqbinmaplen, delaybinmaplen; float minfreq, maxfreq, dminfreq, dmaxfreq; bool hold, posteq; float rand2f (float min, float max) { return min + (max-min)*(::random()/(t_CKFLOAT)CK_RANDOM_MAX); } }; // query function: chuck calls this when loading the Chugin// NOTE: developer will need to modify this function to// add additional functions to this ChuginCK_DLL_QUERY( Spectacle ){ // hmm, don't change this... QUERY->setname(QUERY, "Spectacle"); // begin the class definition // can change the second argument to extend a different ChucK class QUERY->begin_class(QUERY, "Spectacle", "UGen"); // register the constructor (probably no need to change) QUERY->add_ctor(QUERY, spectacle_ctor); // register the destructor (probably no need to change) QUERY->add_dtor(QUERY, spectacle_dtor); // for UGen's only: add tick function QUERY->add_ugen_funcf(QUERY, spectacle_tick, NULL, 8, 8); // NOTE: if this is to be a UGen with more than 1 channel, // e.g., a multichannel UGen -- will need to use add_ugen_funcf() // and declare a tickf function using CK_DLL_TICKF // example of adding setter method QUERY->add_mfun(QUERY, spectacle_setParam, "float", "param"); // example of adding argument to the above method QUERY->add_arg(QUERY, "float", "arg"); // example of adding getter method QUERY->add_mfun(QUERY, spectacle_getParam, "float", "param"); // example of adding setter method QUERY->add_mfun(QUERY, spectacle_clear, "void", "clear"); // example of adding setter method QUERY->add_mfun(QUERY, spectacle_setHold, "int", "hold"); // example of adding argument to the above method QUERY->add_arg(QUERY, "int", "arg"); // example of adding setter method QUERY->add_mfun(QUERY, spectacle_getHold, "int", "hold"); // example of adding setter method QUERY->add_mfun(QUERY, spectacle_setPostEQ, "int", "posteq"); // example of adding argument to the above method QUERY->add_arg(QUERY, "int", "arg"); // example of adding setter method QUERY->add_mfun(QUERY, spectacle_getPostEQ, "int", "posteq"); // example of adding setter method QUERY->add_mfun(QUERY, spectacle_setFFTlen, "int", "fftlen"); // example of adding argument to the above method QUERY->add_arg(QUERY, "int", "arg"); // example of adding setter method QUERY->add_mfun(QUERY, spectacle_getFFTlen, "int", "fftlen"); // example of adding setter method QUERY->add_mfun(QUERY, spectacle_setOverlap, "int", "overlap"); // example of adding argument to the above method QUERY->add_arg(QUERY, "int", "arg"); // example of adding setter method QUERY->add_mfun(QUERY, spectacle_getOverlap, "int", "overlap"); // example of adding setter method QUERY->add_mfun(QUERY, spectacle_setMaxDelay, "dur", "setMaxDelay"); // example of adding argument to the above method QUERY->add_arg(QUERY, "dur", "delay"); // example of adding setter method QUERY->add_mfun(QUERY, spectacle_getMaxDelay, "dur", "getMaxDelay"); // this reserves a variable in the ChucK internal class to store // referene to the c++ class we defined above spectacle_data_offset = QUERY->add_mvar(QUERY, "int", "@s_data", false); // end the class definition // IMPORTANT: this MUST be called! QUERY->end_class(QUERY); // wasn't that a breeze? return TRUE;} // implementation for the constructorCK_DLL_CTOR(spectacle_ctor){ // get the offset where we'll store our internal c++ class pointer OBJ_MEMBER_INT(SELF, spectacle_data_offset) = 0; // instantiate our internal c++ class representation Spectacle * bcdata = new Spectacle(API->vm->get_srate()); // store the pointer in the ChucK object member OBJ_MEMBER_INT(SELF, spectacle_data_offset) = (t_CKINT) bcdata;} // implementation for the destructorCK_DLL_DTOR(spectacle_dtor){ // get our c++ class pointer Spectacle * bcdata = (Spectacle *) OBJ_MEMBER_INT(SELF, spectacle_data_offset); // check it if( bcdata ) { // clean up delete bcdata; OBJ_MEMBER_INT(SELF, spectacle_data_offset) = 0; bcdata = NULL; }} // implementation for tick functionCK_DLL_TICKF(spectacle_tick){ // get our c++ class pointer Spectacle * c = (Spectacle *) OBJ_MEMBER_INT(SELF, spectacle_data_offset); // invoke our tick function; store in the magical out variable if(c) c->tick(in,out, nframes); // yes return TRUE;} // example implementation for setterCK_DLL_MFUN(spectacle_setParam){ // get our c++ class pointer Spectacle * bcdata = (Spectacle *) OBJ_MEMBER_INT(SELF, spectacle_data_offset); // set the return value RETURN->v_float = bcdata->setParam(GET_NEXT_FLOAT(ARGS));} // example implementation for getterCK_DLL_MFUN(spectacle_getParam){ // get our c++ class pointer Spectacle * bcdata = (Spectacle *) OBJ_MEMBER_INT(SELF, spectacle_data_offset); // set the return value RETURN->v_float = bcdata->getParam();} // example implementation for setterCK_DLL_MFUN(spectacle_setMaxDelay){ // get our c++ class pointer Spectacle * bcdata = (Spectacle *) OBJ_MEMBER_INT(SELF, spectacle_data_offset); // set the return value RETURN->v_dur = bcdata->setMaxDelay(GET_NEXT_DUR(ARGS));} // example implementation for setterCK_DLL_MFUN(spectacle_getMaxDelay){ // get our c++ class pointer Spectacle * bcdata = (Spectacle *) OBJ_MEMBER_INT(SELF, spectacle_data_offset); // set the return value RETURN->v_dur = bcdata->getMaxDelay();} // example implementation for setterCK_DLL_MFUN(spectacle_clear){ // get our c++ class pointer Spectacle * bcdata = (Spectacle *) OBJ_MEMBER_INT(SELF, spectacle_data_offset); // set the return value bcdata->clear();} // example implementation for setterCK_DLL_MFUN(spectacle_setHold){ // get our c++ class pointer Spectacle * bcdata = (Spectacle *) OBJ_MEMBER_INT(SELF, spectacle_data_offset); // set the return value RETURN->v_int = bcdata->setHold(GET_NEXT_INT(ARGS));} // example implementation for setterCK_DLL_MFUN(spectacle_getHold){ // get our c++ class pointer Spectacle * bcdata = (Spectacle *) OBJ_MEMBER_INT(SELF, spectacle_data_offset); // set the return value RETURN->v_int = bcdata->getHold();} // example implementation for setterCK_DLL_MFUN(spectacle_setPostEQ){ // get our c++ class pointer Spectacle * bcdata = (Spectacle *) OBJ_MEMBER_INT(SELF, spectacle_data_offset); // set the return value RETURN->v_int = bcdata->setPostEQ(GET_NEXT_INT(ARGS));} // example implementation for setterCK_DLL_MFUN(spectacle_getPostEQ){ // get our c++ class pointer Spectacle * bcdata = (Spectacle *) OBJ_MEMBER_INT(SELF, spectacle_data_offset); // set the return value RETURN->v_int = bcdata->getPostEQ();} // example implementation for setterCK_DLL_MFUN(spectacle_setFFTlen){ // get our c++ class pointer Spectacle * bcdata = (Spectacle *) OBJ_MEMBER_INT(SELF, spectacle_data_offset); // set the return value RETURN->v_int = bcdata->setFFTlen(GET_NEXT_INT(ARGS));} // example implementation for setterCK_DLL_MFUN(spectacle_getFFTlen){ // get our c++ class pointer Spectacle * bcdata = (Spectacle *) OBJ_MEMBER_INT(SELF, spectacle_data_offset); // set the return value RETURN->v_int = bcdata->getFFTlen();} // example implementation for setterCK_DLL_MFUN(spectacle_setOverlap){ // get our c++ class pointer Spectacle * bcdata = (Spectacle *) OBJ_MEMBER_INT(SELF, spectacle_data_offset); // set the return value RETURN->v_int = bcdata->setOverlap(GET_NEXT_INT(ARGS));} // example implementation for setterCK_DLL_MFUN(spectacle_getOverlap){ // get our c++ class pointer Spectacle * bcdata = (Spectacle *) OBJ_MEMBER_INT(SELF, spectacle_data_offset); // set the return value RETURN->v_int = bcdata->getOverlap();}
//-----------------------------------------------------------------------------
// Entaro ChucK Developer!
// This is a Chugin boilerplate, generated by chugerate!
//-----------------------------------------------------------------------------
// this should align with the correct versions of these ChucK files
#include "chuck_dl.h"
#include "chuck_def.h"
#include "ulib_math.h"
#include "Spectacle-dsp.h"
// general includes
#include <stdio.h>
#include <limits.h>
// declaration of chugin constructor
CK_DLL_CTOR(spectacle_ctor);
// declaration of chugin desctructor
CK_DLL_DTOR(spectacle_dtor);
// example of getter/setter
CK_DLL_MFUN(spectacle_setParam);
CK_DLL_MFUN(spectacle_getParam);
CK_DLL_MFUN(spectacle_setFFTlen);
CK_DLL_MFUN(spectacle_getFFTlen);
CK_DLL_MFUN(spectacle_setOverlap);
CK_DLL_MFUN(spectacle_getOverlap);
CK_DLL_MFUN(spectacle_setMaxDelay);
CK_DLL_MFUN(spectacle_getMaxDelay);
CK_DLL_MFUN(spectacle_clear);
CK_DLL_MFUN(spectacle_setHold);
CK_DLL_MFUN(spectacle_getHold);
CK_DLL_MFUN(spectacle_setPostEQ);
CK_DLL_MFUN(spectacle_getPostEQ);
CK_DLL_MFUN(spectacle_setMinFreq);
CK_DLL_MFUN(spectacle_getMinFreq);
CK_DLL_MFUN(spectacle_setMaxFreq);
CK_DLL_MFUN(spectacle_getMaxFreq);
CK_DLL_MFUN(spectacle_setFreqRange);
// for Chugins extending UGen, this is mono synthesis function for 1 sample
CK_DLL_TICKF(spectacle_tick);
// this is a special offset reserved for Chugin internal data
t_CKINT spectacle_data_offset = 0;
#define CONFORM_INPUT
#define CLIP(a, lo, hi) ( (a)>(lo)?( (a)<(hi)?(a):(hi) ):(lo) )
#define kDefaultFFTLen 1024
#define kDefaultWindowLen 2048
#define kDefaultOverlap 2
#define kDefaultMaxDelTime 6.0f
#define kMinMaxDelTime 0.1f
#define kMaxMaxDelTime 20.0f
#define kMaxTableLen 512
// class definition for internal Chugin data
// (note: this isn't strictly necessary, but serves as example
// of one recommended approach)
class Spectacle
{
public:
// constructor
Spectacle( t_CKFLOAT fs)
{
m_param = 0;
fftlen = kDefaultFFTLen;
windowlen = kDefaultWindowLen;
overlap = kDefaultOverlap;
maxdeltime = kDefaultMaxDelTime;
maxdeltime = CLIP(maxdeltime, kMinMaxDelTime, kMaxMaxDelTime);
srate = fs;
spectdelay = NULL;
float *del = dttable;
float *eq = eqtable;
float *feed = fbtable;
int *bm = eqbinmap;
int *dbm = delaybinmap;
for (int i = 0; i < kMaxTableLen; i++)
{
*del++ = 0.0;
*eq++ = 0.0;
*feed++ = 0.0;
*bm++ = 0;
*dbm++ = 0;
}
dttablen = eqtablen = fbtablen = 0;
eqbinmaplen = delaybinmaplen = 0;
dminfreq = dmaxfreq = minfreq = maxfreq = 0.0;
posteq = hold = false;
spectdelay = new Spectacle_dsp();
spectdelay->init(fftlen, windowlen, overlap, srate, maxdeltime);
}
~Spectacle()
{
delete spectdelay;
}
// for Chugins extending UGen
void tick( SAMPLE* in, SAMPLE* out, int nframes)
{
memset (out, 0, sizeof(SAMPLE)*nframes);
for (int i=0; i<nframes; i+=2)
{
spectdelay->run(in+i, out+i, 1);
spectdelay->run(in+i, out+i+1, 1);
}
// process a block of samples
//spectdelay->run(in, out, nframes);
}
void clear()
{
printf ( "Spectacle: cleared.\n" );
spectdelay->clear();
}
// set parameter example
float setParam( t_CKFLOAT p )
{
m_param = p;
return p;
}
// get parameter example
float getParam() { return m_param; }
float setMaxDelay ( t_CKDUR p)
{
float dt = (p / srate);
dt = CLIP(dt, kMinMaxDelTime, kMaxMaxDelTime);
if (dt > maxdeltime)
{
// pin existing delay times to new maximum
for (int i = 0; i < dttablen; i++)
{
if (dttable[i] > dt)
dttable[i] = dt;
}
}
maxdeltime = dt;
spectdelay->set_maxdeltime(dt);
return p;
}
float getMaxDelay ()
{
return (maxdeltime * srate);
}
// set parameter example
int setHold( t_CKINT p )
{
if (p > 1 || p < 0)
{
p = 1;
printf ("Spectacle: hold must be 0 or 1\n");
}
hold = p;
spectdelay->set_hold(p);
return p;
}
// get parameter example
int getHold() { return hold; }
// set parameter example
int setPostEQ( t_CKINT p )
{
if (p > 1 || p < 0)
{
p = 1;
printf ("Spectacle: posteq must be 0 or 1\n");
}
posteq = p;
spectdelay->set_posteq(p);
return p;
}
// get parameter example
int getPostEQ() { return posteq; }
// set parameter example
int setFFTlen( t_CKINT p )
{
clear();
int newfft = 1;
// ensure it's a power of 2
while (newfft < p) newfft = newfft << 1;
fftlen = newfft;
windowlen = newfft * 2;
spectdelay->init(fftlen, windowlen, overlap, srate, maxdeltime);
return fftlen;
}
int getFFTlen() { return fftlen; };
// set parameter example
int setOverlap( t_CKINT p )
{
clear();
overlap = p;
spectdelay->init(fftlen, windowlen, overlap, srate, maxdeltime);
return overlap;
}
int getOverlap() { return overlap; };
private:
// instance data
float m_param;
int fftlen, windowlen, overlap;
float srate, maxdeltime;
Spectacle_dsp *spectdelay;
float eqtable[kMaxTableLen];
float dttable[kMaxTableLen];
float fbtable[kMaxTableLen];
int eqbinmap[kMaxTableLen];
int delaybinmap[kMaxTableLen];
int eqtablen, dttablen, fbtablen, eqbinmaplen, delaybinmaplen;
float minfreq, maxfreq, dminfreq, dmaxfreq;
bool hold, posteq;
float rand2f (float min, float max)
{
return min + (max-min)*(::random()/(t_CKFLOAT)CK_RANDOM_MAX);
}
};
// query function: chuck calls this when loading the Chugin
// NOTE: developer will need to modify this function to
// add additional functions to this Chugin
CK_DLL_QUERY( Spectacle )
{
// hmm, don't change this...
QUERY->setname(QUERY, "Spectacle");
// begin the class definition
// can change the second argument to extend a different ChucK class
QUERY->begin_class(QUERY, "Spectacle", "UGen");
// register the constructor (probably no need to change)
QUERY->add_ctor(QUERY, spectacle_ctor);
// register the destructor (probably no need to change)
QUERY->add_dtor(QUERY, spectacle_dtor);
// for UGen's only: add tick function
QUERY->add_ugen_funcf(QUERY, spectacle_tick, NULL, 8, 8);
// NOTE: if this is to be a UGen with more than 1 channel,
// e.g., a multichannel UGen -- will need to use add_ugen_funcf()
// and declare a tickf function using CK_DLL_TICKF
// example of adding setter method
QUERY->add_mfun(QUERY, spectacle_setParam, "float", "param");
// example of adding argument to the above method
QUERY->add_arg(QUERY, "float", "arg");
// example of adding getter method
QUERY->add_mfun(QUERY, spectacle_getParam, "float", "param");
// example of adding setter method
QUERY->add_mfun(QUERY, spectacle_clear, "void", "clear");
// example of adding setter method
QUERY->add_mfun(QUERY, spectacle_setHold, "int", "hold");
// example of adding argument to the above method
QUERY->add_arg(QUERY, "int", "arg");
// example of adding setter method
QUERY->add_mfun(QUERY, spectacle_getHold, "int", "hold");
// example of adding setter method
QUERY->add_mfun(QUERY, spectacle_setPostEQ, "int", "posteq");
// example of adding argument to the above method
QUERY->add_arg(QUERY, "int", "arg");
// example of adding setter method
QUERY->add_mfun(QUERY, spectacle_getPostEQ, "int", "posteq");
// example of adding setter method
QUERY->add_mfun(QUERY, spectacle_setFFTlen, "int", "fftlen");
// example of adding argument to the above method
QUERY->add_arg(QUERY, "int", "arg");
// example of adding setter method
QUERY->add_mfun(QUERY, spectacle_getFFTlen, "int", "fftlen");
// example of adding setter method
QUERY->add_mfun(QUERY, spectacle_setOverlap, "int", "overlap");
// example of adding argument to the above method
QUERY->add_arg(QUERY, "int", "arg");
// example of adding setter method
QUERY->add_mfun(QUERY, spectacle_getOverlap, "int", "overlap");
// example of adding setter method
QUERY->add_mfun(QUERY, spectacle_setMaxDelay, "dur", "setMaxDelay");
// example of adding argument to the above method
QUERY->add_arg(QUERY, "dur", "delay");
// example of adding setter method
QUERY->add_mfun(QUERY, spectacle_getMaxDelay, "dur", "getMaxDelay");
// this reserves a variable in the ChucK internal class to store
// referene to the c++ class we defined above
spectacle_data_offset = QUERY->add_mvar(QUERY, "int", "@s_data", false);
// end the class definition
// IMPORTANT: this MUST be called!
QUERY->end_class(QUERY);
// wasn't that a breeze?
return TRUE;
}
// implementation for the constructor
CK_DLL_CTOR(spectacle_ctor)
{
// get the offset where we'll store our internal c++ class pointer
OBJ_MEMBER_INT(SELF, spectacle_data_offset) = 0;
// instantiate our internal c++ class representation
Spectacle * bcdata = new Spectacle(API->vm->get_srate());
// store the pointer in the ChucK object member
OBJ_MEMBER_INT(SELF, spectacle_data_offset) = (t_CKINT) bcdata;
}
// implementation for the destructor
CK_DLL_DTOR(spectacle_dtor)
{
// get our c++ class pointer
Spectacle * bcdata = (Spectacle *) OBJ_MEMBER_INT(SELF, spectacle_data_offset);
// check it
if( bcdata )
{
// clean up
delete bcdata;
OBJ_MEMBER_INT(SELF, spectacle_data_offset) = 0;
bcdata = NULL;
}
}
// implementation for tick function
CK_DLL_TICKF(spectacle_tick)
{
// get our c++ class pointer
Spectacle * c = (Spectacle *) OBJ_MEMBER_INT(SELF, spectacle_data_offset);
// invoke our tick function; store in the magical out variable
if(c) c->tick(in,out, nframes);
// yes
return TRUE;
}
// example implementation for setter
CK_DLL_MFUN(spectacle_setParam)
{
// get our c++ class pointer
Spectacle * bcdata = (Spectacle *) OBJ_MEMBER_INT(SELF, spectacle_data_offset);
// set the return value
RETURN->v_float = bcdata->setParam(GET_NEXT_FLOAT(ARGS));
}
// example implementation for getter
CK_DLL_MFUN(spectacle_getParam)
{
// get our c++ class pointer
Spectacle * bcdata = (Spectacle *) OBJ_MEMBER_INT(SELF, spectacle_data_offset);
// set the return value
RETURN->v_float = bcdata->getParam();
}
// example implementation for setter
CK_DLL_MFUN(spectacle_setMaxDelay)
{
// get our c++ class pointer
Spectacle * bcdata = (Spectacle *) OBJ_MEMBER_INT(SELF, spectacle_data_offset);
// set the return value
RETURN->v_dur = bcdata->setMaxDelay(GET_NEXT_DUR(ARGS));
}
// example implementation for setter
CK_DLL_MFUN(spectacle_getMaxDelay)
{
// get our c++ class pointer
Spectacle * bcdata = (Spectacle *) OBJ_MEMBER_INT(SELF, spectacle_data_offset);
// set the return value
RETURN->v_dur = bcdata->getMaxDelay();
}
// example implementation for setter
CK_DLL_MFUN(spectacle_clear)
{
// get our c++ class pointer
Spectacle * bcdata = (Spectacle *) OBJ_MEMBER_INT(SELF, spectacle_data_offset);
// set the return value
bcdata->clear();
}
// example implementation for setter
CK_DLL_MFUN(spectacle_setHold)
{
// get our c++ class pointer
Spectacle * bcdata = (Spectacle *) OBJ_MEMBER_INT(SELF, spectacle_data_offset);
// set the return value
RETURN->v_int = bcdata->setHold(GET_NEXT_INT(ARGS));
}
// example implementation for setter
CK_DLL_MFUN(spectacle_getHold)
{
// get our c++ class pointer
Spectacle * bcdata = (Spectacle *) OBJ_MEMBER_INT(SELF, spectacle_data_offset);
// set the return value
RETURN->v_int = bcdata->getHold();
}
// example implementation for setter
CK_DLL_MFUN(spectacle_setPostEQ)
{
// get our c++ class pointer
Spectacle * bcdata = (Spectacle *) OBJ_MEMBER_INT(SELF, spectacle_data_offset);
// set the return value
RETURN->v_int = bcdata->setPostEQ(GET_NEXT_INT(ARGS));
}
// example implementation for setter
CK_DLL_MFUN(spectacle_getPostEQ)
{
// get our c++ class pointer
Spectacle * bcdata = (Spectacle *) OBJ_MEMBER_INT(SELF, spectacle_data_offset);
// set the return value
RETURN->v_int = bcdata->getPostEQ();
}
// example implementation for setter
CK_DLL_MFUN(spectacle_setFFTlen)
{
// get our c++ class pointer
Spectacle * bcdata = (Spectacle *) OBJ_MEMBER_INT(SELF, spectacle_data_offset);
// set the return value
RETURN->v_int = bcdata->setFFTlen(GET_NEXT_INT(ARGS));
}
// example implementation for setter
CK_DLL_MFUN(spectacle_getFFTlen)
{
// get our c++ class pointer
Spectacle * bcdata = (Spectacle *) OBJ_MEMBER_INT(SELF, spectacle_data_offset);
// set the return value
RETURN->v_int = bcdata->getFFTlen();
}
// example implementation for setter
CK_DLL_MFUN(spectacle_setOverlap)
{
// get our c++ class pointer
Spectacle * bcdata = (Spectacle *) OBJ_MEMBER_INT(SELF, spectacle_data_offset);
// set the return value
RETURN->v_int = bcdata->setOverlap(GET_NEXT_INT(ARGS));
}
// example implementation for setter
CK_DLL_MFUN(spectacle_getOverlap)
{
// get our c++ class pointer
Spectacle * bcdata = (Spectacle *) OBJ_MEMBER_INT(SELF, spectacle_data_offset);
// set the return value
RETURN->v_int = bcdata->getOverlap();
}