Ed Kelly wrote:
t_int *amdf_tilde_perform(t_int *w, t_amdf_tilde *x) {
this MUST read: t_int *amdf_tilde_perform(t_int *w) {
t_amdf_tilde *x = (t_amdf_tilde *) (w[1]); t_sample *input = (t_sample *) (w[2]); t_sample *errpr1 = (t_sample *) (w[3]); t_sample *errprx = (t_sample *) (w[4]); int n = (int) (w[5]); x->x_pitch = 0; // float sr = float sys_getsr(void); //how to get sample rate in external?
this reads: float sr = sys_getsr(); (but should be done in the dsp_add() function, like x->x_sr=sys_getsr();)
} return (w+6); outlet_float(&x->x_outlet, x->x_pitch); }
here you return from the funtion before you outlet anything: you never reach the outlet_float code. btw, it should read: outlet_float(x->x_outlet, x->x_pitch);
void amdf_tilde_dsp(t_amdf_tilde *x, t_signal **sp) { dsp_add(amdf_tilde_perform, 5, x, sp[0]->s_vec, sp[3]->s_vec, sp[2]->s_vec, sp[0]->s_n); }
you don't have sp[3], that is why your code is crashing.
i suggest reading a bit about C-programming (kernighan/ritchie is a good start); and of course the Externals-writing-HOWTO (as proposed by Georg)
mfg,asdr,. IOhannes