aboutsummaryrefslogtreecommitdiff
path: root/externals/grill/flext/source/fldsp.cpp
diff options
context:
space:
mode:
authorThomas Grill <xovo@users.sourceforge.net>2003-01-15 04:37:19 +0000
committerThomas Grill <xovo@users.sourceforge.net>2003-01-15 04:37:19 +0000
commitb00be027fe91e9ae5a19f53b6c1fd0245b4d4bae (patch)
tree2dd7ab22251e324b6d0f9167d3d32ed6e911a343 /externals/grill/flext/source/fldsp.cpp
parente62722bf0bba2ddb1b8558fa4c851c9e79dddf6c (diff)
""
svn path=/trunk/; revision=339
Diffstat (limited to 'externals/grill/flext/source/fldsp.cpp')
-rw-r--r--externals/grill/flext/source/fldsp.cpp122
1 files changed, 99 insertions, 23 deletions
diff --git a/externals/grill/flext/source/fldsp.cpp b/externals/grill/flext/source/fldsp.cpp
index 7f845074..13eab25d 100644
--- a/externals/grill/flext/source/fldsp.cpp
+++ b/externals/grill/flext/source/fldsp.cpp
@@ -20,6 +20,10 @@ WARRANTIES, see the file, "license.txt," in this distribution.
// === 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);
@@ -27,27 +31,35 @@ void flext_dsp::Setup(t_classid id)
#if FLEXT_SYS == FLEXT_SYS_MAX
// dsp_initclass();
dsp_initboxclass();
-#endif
-
-#if FLEXT_SYS == FLEXT_SYS_PD
- CLASS_MAINSIGNALIN(c,flext_hdr,defsig);
-#endif
-
add_dsp(c,cb_dsp);
-#if FLEXT_SYS != FLEXT_SYS_MAX
+#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
@@ -55,16 +67,27 @@ flext_dsp::flext_dsp():
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];
@@ -76,30 +99,35 @@ t_int *flext_dsp::dspmeth(t_int *w)
obj->m_signal((int)w[2],obj->invecs,obj->outvecs);
return w+3;
}
+#endif
-void flext_dsp::m_dsp(int /*n*/,t_sample *const * /*insigs*/,t_sample *const * /*outsigs*/) {}
-
-void flext_dsp::m_signal(int n,t_sample *const * /*insigs*/,t_sample *const *outs)
-{
- for(int i = 0; i < CntOutSig(); ++i)
- memset(outs[i],0,n*sizeof(*outs[i]));
-}
-
+#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
@@ -107,22 +135,70 @@ void flext_dsp::cb_dsp(t_class *c,t_signal **sp)
// store in and out signal vectors
int i,in = obj->CntInSig(),out = obj->CntOutSig();
if(obj->invecs) delete[] obj->invecs;
- obj->invecs = new t_sample *[in];
- for(i = 0; i < in; ++i) obj->invecs[i] = sp[i]->s_vec;
+ 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_sample *[out];
- for(i = 0; i < out; ++i) obj->outvecs[i] = sp[in+i]->s_vec;
+ 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(sp[0]->s_n,obj->invecs,obj->outvecs);
+ obj->m_dsp(obj->blksz,obj->invecs,obj->outvecs);
// set the DSP function
- dsp_add((t_dspmethod)dspmeth,2,obj,sp[0]->s_n);
+#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)
+ memset(outs[i],0,n*sizeof(*outs[i]));
}
#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