# Hi list!
# I'm trying to learn how to write externals (after being able to link and
compile the source codes thanks to Yvan Vander Sanden's tutorial) and come
up with a strange behavoir: The object [additive~] turns into a messege box
[additive~( (and sometimes its borders are totally erased or sometimes pd
crashes) after saving the patch (but not everytime). Maybe I made a mistake
that I couldn't find. What might be the reason of such an error?
# Here is the code I've written. The object should be post the number of
incoming bangs and the time after creation (when dsp is on) and compiled
.dll file is attached.
-ugur-
#include "m_pd.h"
static t_class *additive_tilde_class;
typedef struct _additive_tilde {
t_object x_obj;
t_int bangtime;
t_float time;
} t_additive_tilde;
void additive_tilde_bang(t_additive_tilde *x)
{
post("you banged %d times. time: %f", x->bangtime++, x->time);
}
t_int *additive_tilde_perform(t_int *w)
{
t_additive_tilde *x = (t_additive_tilde *)(w[1]);
t_sample *out = (t_sample *)(w[2]);
int n = (int)(w[3]);
while (n--)
{
*out++ = x->time;
x->time += 1.0f/44100;
}
return (w+4);
}
void additive_tilde_dsp(t_additive_tilde *x, t_signal **sp)
{
dsp_add(additive_tilde_perform, 3, x,
sp[0]->s_vec, sp[0]->s_n);
}
void *additive_tilde_new(t_floatarg f)
{
t_additive_tilde *x = (t_additive_tilde *)pd_new(additive_tilde_class);
x->time = f;
x->bangtime = 0;
outlet_new(&x->x_obj, gensym("signal"));
return (void *)x;
}
__declspec (dllexport) void additive_tilde_setup(void)
{
additive_tilde_class = class_new(gensym("additive~"),
(t_newmethod)additive_tilde_new,
0, sizeof(t_additive_tilde),
CLASS_DEFAULT,
A_DEFFLOAT, 0);
class_addmethod(additive_tilde_class,
(t_method)additive_tilde_dsp, gensym("dsp"), 0);
class_addbang(additive_tilde_class, additive_tilde_bang);
}