diff options
author | Thomas Grill <xovo@users.sourceforge.net> | 2003-04-06 02:34:47 +0000 |
---|---|---|
committer | Thomas Grill <xovo@users.sourceforge.net> | 2003-04-06 02:34:47 +0000 |
commit | 5d0898c3082a45cc05953e78705314b44da64a3f (patch) | |
tree | 26df52f0e8cc45395156cd52423a5d74eed340eb /externals/grill/flext/source | |
parent | 97b40a32721f4175b06db1a9feac0352782cf676 (diff) |
""
svn path=/trunk/; revision=547
Diffstat (limited to 'externals/grill/flext/source')
-rw-r--r-- | externals/grill/flext/source/fldsp.cpp | 211 |
1 files changed, 0 insertions, 211 deletions
diff --git a/externals/grill/flext/source/fldsp.cpp b/externals/grill/flext/source/fldsp.cpp index 5763aa94..9ee2f00c 100644 --- a/externals/grill/flext/source/fldsp.cpp +++ b/externals/grill/flext/source/fldsp.cpp @@ -1,420 +1,209 @@ /* - - flext - C++ layer for Max/MSP and pd (pure data) externals - - Copyright (c) 2001-2003 Thomas Grill (xovo@gmx.net) - For information on usage and redistribution, and for a DISCLAIMER OF ALL - WARRANTIES, see the file, "license.txt," in this distribution. - - */ - - /*! \file fldsp.cpp - \brief Implementation of the flext dsp base class. - */ - - #include "flext.h" - #include "flinternal.h" - #include <string.h> - - - - // === flext_dsp ============================================== - - #if FLEXT_SYS == FLEXT_SYS_JMAX - const t_symbol *flext_dsp::dspsym = MakeSymbol("__flext_dspfun__"); - #endif - - void flext_dsp::Setup(t_classid id) - { - t_class *c = getClass(id); - - #if FLEXT_SYS == FLEXT_SYS_MAX - // dsp_initclass(); - dsp_initboxclass(); - add_dsp(c,cb_dsp); - #elif FLEXT_SYS == FLEXT_SYS_PD - CLASS_MAINSIGNALIN(c,flext_hdr,defsig); // float messages going into the left inlet are converted to signal - add_dsp(c,cb_dsp); - add_method1(c,cb_enable,"enable",A_FLOAT); - #elif FLEXT_SYS == FLEXT_SYS_JMAX - fts_dsp_declare_function(dspsym,dspmeth); - fts_class_message_varargs(c, fts_s_put, cb_dsp); - fts_class_message_varargs(c, MakeSymbol("enable"), cb_enable); - #endif - } - - flext_dsp::flext_dsp(): - #if FLEXT_SYS == FLEXT_SYS_JMAX - srate(fts_dsp_get_sample_rate()), // should we set it? - blksz(fts_dsp_get_tick_size()), - #else - srate(sys_getsr()), // should we set it? - blksz(sys_getblksize()), - #endif - #if FLEXT_SYS == FLEXT_SYS_PD - chnsin(sys_get_inchannels()), - chnsout(sys_get_outchannels()), - #elif FLEXT_SYS == FLEXT_SYS_MAX - chnsin(sys_getch()), - chnsout(sys_getch()), - #elif FLEXT_SYS == FLEXT_SYS_JMAX - #pragma message("not implemented") - chnsin(0),chnsout(0), - #else - #error - #endif - #if FLEXT_SYS != FLEXT_SYS_MAX - dspon(true), - #endif - invecs(NULL),outvecs(NULL) - { - #if FLEXT_SYS == FLEXT_SYS_JMAX - fts_dsp_object_init(thisHdr()); - #endif - } - - - flext_dsp::~flext_dsp() - { - #if FLEXT_SYS == FLEXT_SYS_JMAX - fts_dsp_object_delete(thisHdr()); - #endif - if(invecs) delete[] invecs; - if(outvecs) delete[] outvecs; - } - - #if FLEXT_SYS == FLEXT_SYS_JMAX - void flext_dsp::dspmeth(fts_word_t *w) - { - } - #else - t_int *flext_dsp::dspmeth(t_int *w) - { - flext_dsp *obj = (flext_dsp *)w[1]; - #if FLEXT_SYS == FLEXT_SYS_MAX - if(!obj->thisHdr()->z_disabled) - #else - if(obj->dspon) - #endif - obj->m_signal((int)w[2],obj->invecs,obj->outvecs); - return w+3; - } - #endif - - #if FLEXT_SYS == FLEXT_SYS_JMAX - void flext_dsp::cb_dsp(fts_object_t *c, int winlet, fts_symbol_t s, int ac, const fts_atom_t *at) - #else - void flext_dsp::cb_dsp(t_class *c,t_signal **sp) - #endif - { - flext_dsp *obj = thisObject(c); - - if(obj->CntInSig()+obj->CntOutSig() == 0) return; - - // store current dsp parameters - #if FLEXT_SYS == FLEXT_SYS_JMAX - fts_dsp_descr_t *dsp = (fts_dsp_descr_t *)fts_get_pointer(at+0); - obj->srate = fts_dsp_get_input_srate(dsp,0); - obj->blksz = fts_dsp_get_input_size(dsp,0); // is this guaranteed to be the same as sys_getblksize() ? - #else - obj->srate = sp[0]->s_sr; - obj->blksz = sp[0]->s_n; // is this guaranteed to be the same as sys_getblksize() ? - #endif - - #if FLEXT_SYS == FLEXT_SYS_PD - obj->chnsin = sys_get_inchannels(); - obj->chnsout = sys_get_outchannels(); - #elif FLEXT_SYS == FLEXT_SYS_MAX - obj->chnsin = obj->chnsout = sys_getch(); - #elif FLEXT_SYS == FLEXT_SYS_JMAX - #pragma message ("How to query the channels?") - #else - #error - #endif - - // store in and out signal vectors - int i,in = obj->CntInSig(),out = obj->CntOutSig(); - - #if FLEXT_SYS == FLEXT_SYS_PD - // min. 1 input channel! (CLASS_MAININLET in pd...) - if(!in) in = 1; - #endif - - if(obj->invecs) delete[] obj->invecs; - obj->invecs = new t_signalvec[in]; - for(i = 0; i < in; ++i) - obj->invecs[i] = - #if FLEXT_SYS == FLEXT_SYS_JMAX - fts_dsp_get_input_name(dsp,i); - #else - sp[i]->s_vec; - #endif - - if(obj->outvecs) delete[] obj->outvecs; - obj->outvecs = new t_signalvec[out]; - for(i = 0; i < out; ++i) - obj->outvecs[i] = - #if FLEXT_SYS == FLEXT_SYS_JMAX - fts_dsp_get_output_name(dsp,i); - #else - sp[in+i]->s_vec; - #endif - - // with the following call derived classes can do their eventual DSP setup - obj->m_dsp(obj->blksz,obj->invecs,obj->outvecs); - - // set the DSP function - #if FLEXT_SYS == FLEXT_SYS_JMAX - fts_atom_t args[2]; - fts_set_pointer(args+0,obj); - fts_set_int(args+1,obj->blksz); - fts_dsp_add_function(dspsym,2,args); - #else - dsp_add((t_dspmethod)dspmeth,2,obj,obj->blksz); - #endif - } - - /* - #if FLEXT_SYS == FLEXT_SYS_JMAX - void flext_dsp::cb_dsp_init(fts_object_t *c, int winlet, fts_symbol_t *s, int ac, const fts_atom_t *at) - { - fts_dsp_add_object(c); - } - - void flext_dsp::cb_dsp_delete(fts_object_t *c, int winlet, fts_symbol_t *s, int ac, const fts_atom_t *at) - { - fts_dsp_remove_object(c); - } - #endif - */ - - void flext_dsp::m_dsp(int /*n*/,t_signalvec const * /*insigs*/,t_signalvec const * /*outsigs*/) {} - - void flext_dsp::m_signal(int n,t_sample *const * /*insigs*/,t_sample *const *outs) - { - for(int i = 0; i < CntOutSig(); ++i) ZeroSamples(outs[i],n); - } - - #if FLEXT_SYS != FLEXT_SYS_MAX - - #if FLEXT_SYS == FLEXT_SYS_PD - void flext_dsp::cb_enable(t_class *c,t_float on) { thisObject(c)->m_enable(on != 0); } - #elif FLEXT_SYS == FLEXT_SYS_JMAX - void flext_dsp::cb_enable(fts_object_t *c, int winlet, fts_symbol_t s, int ac, const fts_atom_t *at) - { thisObject(c)->m_enable(fts_get_int(at+0) != 0); } - #endif - - void flext_dsp::m_enable(bool en) { dspon = en; } - #endif - - - - |