487 lines · 12.9 KB · C++
RawDownload
//-----------------------------------------------------------------------------// Entaro ChucK Developer!// This is a Chugin boilerplate, generated by chuginate!//----------------------------------------------------------------------------- // this should align with the correct versions of these ChucK files#include "chuck_dl.h"#include "chuck_def.h" // general includes#include <stdio.h>#include <limits.h>#include <math.h> // class definition for internal Chugin dataclass PanN{public:    // constructor    PanN( t_CKFLOAT fs, t_CKUINT chans ) :    m_chans(chans)    {        m_pan = 0.5;        m_channel_map = new t_CKUINT[m_chans];    }        // for Chugins extending UGen    void tick( SAMPLE * in, SAMPLE * out, t_CKUINT nframes )    {        int c_l = ((int)floorf(m_pan))%m_chans;        int c_r = ((int)ceilf(m_pan))%m_chans;        if(c_l == c_r) c_r = (c_l+1)%m_chans;        float mod = m_pan - floorf(m_pan);                float g_l = cosf(ONE_PI/2.0*mod);        float g_r = sinf(ONE_PI/2.0*mod);                memset(out, 0, sizeof(SAMPLE)*m_chans*nframes);                for(int i = 0; i < nframes; i++)        {            out[i*m_chans+m_channel_map[c_l]] = g_l * in[i*m_chans];            out[i*m_chans+m_channel_map[c_r]] = g_r * in[i*m_chans];        }    }        // set parameter example    float setPan( t_CKFLOAT p )    {        m_pan = p;                // int c_l = ((int)floorf(m_pan))%m_chans;        // int c_r = ((int)ceilf(m_pan))%m_chans;        // float mod = m_pan - floorf(m_pan);        //         // float g_l = cosf(ONE_PI/2.0*mod);        // float g_r = sinf(ONE_PI/2.0*mod);        //         // fprintf(stderr, "**** c_l, c_r: %i, %i; mod, g_l, g_r: %f, %f, %f ****\n", c_l, c_r, mod, g_l, g_r);                return p;    }        // get parameter example    float getPan() { return m_pan; }    protected:    // instance data    const t_CKUINT m_chans;    t_CKFLOAT m_pan;    t_CKUINT * m_channel_map;};  // class definition for internal Chugin dataclass Pan4 : public PanN{public:    // constructor    Pan4( t_CKFLOAT fs ) : PanN(fs, 4)    {        // default channel map: alternate left then right from front to back        m_channel_map[0] = 0;        m_channel_map[1] = 1;        m_channel_map[2] = 3;        m_channel_map[3] = 2;    }};  // class definition for internal Chugin dataclass Pan8 : public PanN{public:    // constructor    Pan8( t_CKFLOAT fs ) : PanN(fs, 8)    {        // default channel map: alternate left then right from front to back        m_channel_map[0] = 0;        m_channel_map[1] = 1;        m_channel_map[2] = 3;        m_channel_map[3] = 5;        m_channel_map[4] = 7;        m_channel_map[5] = 6;        m_channel_map[6] = 4;        m_channel_map[7] = 2;    }};  // class definition for internal Chugin dataclass Pan16 : public PanN{public:    // constructor    Pan16( t_CKFLOAT fs ) : PanN(fs, 16)    {        // default channel map: alternate left then right from front to back        m_channel_map[0] = 0;        m_channel_map[1] = 1;        m_channel_map[2] = 3;        m_channel_map[3] = 5;        m_channel_map[4] = 7;        m_channel_map[5] = 9;        m_channel_map[6] = 11;        m_channel_map[7] = 13;        m_channel_map[8] = 15;        m_channel_map[9] = 14;        m_channel_map[10] = 12;        m_channel_map[11] = 10;        m_channel_map[12] = 8;        m_channel_map[13] = 6;        m_channel_map[14] = 4;        m_channel_map[15] = 2;    }};  // declaration of chugin constructorCK_DLL_CTOR(pan4_ctor);// declaration of chugin desctructorCK_DLL_DTOR(pan4_dtor);// for Chugins extending UGen, this is mono synthesis function for 1 sampleCK_DLL_TICKF(pan4_tickf);// example of getter/setterCK_DLL_MFUN(pan4_setPan);CK_DLL_MFUN(pan4_getPan);// this is a special offset reserved for Chugin internal datat_CKINT pan4_data_offset = 0; // declaration of chugin constructorCK_DLL_CTOR(pan8_ctor);// declaration of chugin desctructorCK_DLL_DTOR(pan8_dtor);// for Chugins extending UGen, this is mono synthesis function for 1 sampleCK_DLL_TICKF(pan8_tickf);// example of getter/setterCK_DLL_MFUN(pan8_setPan);CK_DLL_MFUN(pan8_getPan);// this is a special offset reserved for Chugin internal datat_CKINT pan8_data_offset = 0;  // declaration of chugin constructorCK_DLL_CTOR(pan16_ctor);// declaration of chugin desctructorCK_DLL_DTOR(pan16_dtor);// for Chugins extending UGen, this is mono synthesis function for 1 sampleCK_DLL_TICKF(pan16_tickf);// example of getter/setterCK_DLL_MFUN(pan16_setPan);CK_DLL_MFUN(pan16_getPan);// this is a special offset reserved for Chugin internal datat_CKINT pan16_data_offset = 0;  // query function: chuck calls this when loading the ChuginCK_DLL_QUERY( PanN ){    // hmm, don't change this...    QUERY->setname(QUERY, "PanN");                    // begin the class definition    QUERY->begin_class(QUERY, "Pan4", "UGen");    QUERY->doc_class(QUERY, "Four-channel equal-power panner. ");    QUERY->add_ex(QUERY, "spatial/Pan4.ck");        // register the constructor (probably no need to change)    QUERY->add_ctor(QUERY, pan4_ctor);    // register the destructor (probably no need to change)    QUERY->add_dtor(QUERY, pan4_dtor);        // for UGen's only: add tick function    QUERY->add_ugen_funcf(QUERY, pan4_tickf, NULL, 4, 4);        // example of adding setter method    QUERY->add_mfun(QUERY, pan4_setPan, "float", "pan");    // example of adding argument to the above method    QUERY->add_arg(QUERY, "float", "arg");    QUERY->doc_func(QUERY, "Set pan position [0-4].");        // example of adding getter method    QUERY->add_mfun(QUERY, pan4_getPan, "float", "pan");    QUERY->doc_func(QUERY, "Get pan position [0-4].");        // this reserves a variable in the ChucK internal class to store    // referene to the c++ class we defined above    pan4_data_offset = QUERY->add_mvar(QUERY, "int", "@p4_data", false);        // end the class definition    // IMPORTANT: this MUST be called!    QUERY->end_class(QUERY);                // begin the class definition    QUERY->begin_class(QUERY, "Pan8", "UGen");        // register the constructor (probably no need to change)    QUERY->add_ctor(QUERY, pan8_ctor);    // register the destructor (probably no need to change)    QUERY->add_dtor(QUERY, pan8_dtor);     QUERY->doc_class(QUERY, "Eight-channel equal-power panner.");    QUERY->add_ex(QUERY, "spatial/Pan8.ck");        // for UGen's only: add tick function    QUERY->add_ugen_funcf(QUERY, pan8_tickf, NULL, 8, 8);        // example of adding setter method    QUERY->add_mfun(QUERY, pan8_setPan, "float", "pan");    // example of adding argument to the above method    QUERY->add_arg(QUERY, "float", "arg");    QUERY->doc_func(QUERY, "Set pan position [0-8].");        // example of adding getter method    QUERY->add_mfun(QUERY, pan8_getPan, "float", "pan");    QUERY->doc_func(QUERY, "Get pan position [0-8].");        // this reserves a variable in the ChucK internal class to store    // referene to the c++ class we defined above    pan8_data_offset = QUERY->add_mvar(QUERY, "int", "@p8_data", false);        // end the class definition    // IMPORTANT: this MUST be called!    QUERY->end_class(QUERY);                // begin the class definition    QUERY->begin_class(QUERY, "Pan16", "UGen");        // register the constructor (probably no need to change)    QUERY->add_ctor(QUERY, pan16_ctor);    // register the destructor (probably no need to change)    QUERY->add_dtor(QUERY, pan16_dtor);     QUERY->doc_class(QUERY, "Sixteen-channel equal-power panner.");        // for UGen's only: add tick function    QUERY->add_ugen_funcf(QUERY, pan16_tickf, NULL, 16, 16);        // example of adding setter method    QUERY->add_mfun(QUERY, pan16_setPan, "float", "pan");    // example of adding argument to the above method    QUERY->add_arg(QUERY, "float", "arg");    QUERY->doc_func(QUERY, "Set pan position [0-16].");            // example of adding getter method    QUERY->add_mfun(QUERY, pan16_getPan, "float", "pan");    QUERY->doc_func(QUERY, "Get pan position [0-16].");                // this reserves a variable in the ChucK internal class to store    // referene to the c++ class we defined above    pan16_data_offset = QUERY->add_mvar(QUERY, "int", "@p16_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(pan4_ctor){    // get the offset where we'll store our internal c++ class pointer    OBJ_MEMBER_INT(SELF, pan4_data_offset) = 0;        // instantiate our internal c++ class representation    Pan4 * bcdata = new Pan4(API->vm->get_srate(API, SHRED));        // store the pointer in the ChucK object member    OBJ_MEMBER_INT(SELF, pan4_data_offset) = (t_CKINT) bcdata;}  // implementation for the destructorCK_DLL_DTOR(pan4_dtor){    // get our c++ class pointer    Pan4 * bcdata = (Pan4 *) OBJ_MEMBER_INT(SELF, pan4_data_offset);    // check it    if( bcdata )    {        // clean up        delete bcdata;        OBJ_MEMBER_INT(SELF, pan4_data_offset) = 0;        bcdata = NULL;    }}  // implementation for tick functionCK_DLL_TICKF(pan4_tickf){    // get our c++ class pointer    Pan4 * c = (Pan4 *) OBJ_MEMBER_INT(SELF, pan4_data_offset);        if(c) c->tick(in, out, nframes);        // yes    return TRUE;}  // example implementation for setterCK_DLL_MFUN(pan4_setPan){    // get our c++ class pointer    PanN * pNdata = (PanN *) OBJ_MEMBER_INT(SELF, pan4_data_offset);    // set the return value    RETURN->v_float = pNdata->setPan(GET_NEXT_FLOAT(ARGS));}  // example implementation for getterCK_DLL_MFUN(pan4_getPan){    // get our c++ class pointer    PanN * pNdata = (PanN *) OBJ_MEMBER_INT(SELF, pan4_data_offset);    // set the return value    RETURN->v_float = pNdata->getPan();}      // implementation for the constructorCK_DLL_CTOR(pan8_ctor){    // get the offset where we'll store our internal c++ class pointer    OBJ_MEMBER_INT(SELF, pan8_data_offset) = 0;        // instantiate our internal c++ class representation    Pan8 * bcdata = new Pan8(API->vm->get_srate(API, SHRED));        // store the pointer in the ChucK object member    OBJ_MEMBER_INT(SELF, pan8_data_offset) = (t_CKINT) bcdata;}  // implementation for the destructorCK_DLL_DTOR(pan8_dtor){    // get our c++ class pointer    Pan8 * bcdata = (Pan8 *) OBJ_MEMBER_INT(SELF, pan8_data_offset);    // check it    if( bcdata )    {        // clean up        delete bcdata;        OBJ_MEMBER_INT(SELF, pan8_data_offset) = 0;        bcdata = NULL;    }}  // implementation for tick functionCK_DLL_TICKF(pan8_tickf){    // get our c++ class pointer    Pan8 * c = (Pan8 *) OBJ_MEMBER_INT(SELF, pan8_data_offset);        if(c) c->tick(in, out, nframes);        // yes    return TRUE;}  // example implementation for setterCK_DLL_MFUN(pan8_setPan){    // get our c++ class pointer    PanN * pNdata = (PanN *) OBJ_MEMBER_INT(SELF, pan8_data_offset);    // set the return value    RETURN->v_float = pNdata->setPan(GET_NEXT_FLOAT(ARGS));}  // example implementation for getterCK_DLL_MFUN(pan8_getPan){    // get our c++ class pointer    PanN * pNdata = (PanN *) OBJ_MEMBER_INT(SELF, pan8_data_offset);    // set the return value    RETURN->v_float = pNdata->getPan();}      // implementation for the constructorCK_DLL_CTOR(pan16_ctor){    // get the offset where we'll store our internal c++ class pointer    OBJ_MEMBER_INT(SELF, pan16_data_offset) = 0;        // instantiate our internal c++ class representation    Pan16 * bcdata = new Pan16(API->vm->get_srate(API, SHRED));        // store the pointer in the ChucK object member    OBJ_MEMBER_INT(SELF, pan16_data_offset) = (t_CKINT) bcdata;}  // implementation for the destructorCK_DLL_DTOR(pan16_dtor){    // get our c++ class pointer    Pan16 * bcdata = (Pan16 *) OBJ_MEMBER_INT(SELF, pan16_data_offset);    // check it    if( bcdata )    {        // clean up        delete bcdata;        OBJ_MEMBER_INT(SELF, pan16_data_offset) = 0;        bcdata = NULL;    }}  // implementation for tick functionCK_DLL_TICKF(pan16_tickf){    // get our c++ class pointer    Pan16 * c = (Pan16 *) OBJ_MEMBER_INT(SELF, pan16_data_offset);        if(c) c->tick(in, out, nframes);        // yes    return TRUE;} // example implementation for setterCK_DLL_MFUN(pan16_setPan){    // get our c++ class pointer    PanN * pNdata = (PanN *) OBJ_MEMBER_INT(SELF, pan16_data_offset);    // set the return value    RETURN->v_float = pNdata->setPan(GET_NEXT_FLOAT(ARGS));}  // example implementation for getterCK_DLL_MFUN(pan16_getPan){    // get our c++ class pointer    PanN * pNdata = (PanN *) OBJ_MEMBER_INT(SELF, pan16_data_offset);    // set the return value    RETURN->v_float = pNdata->getPan();}  

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