[PD] dsp external pointer problem

Ahmet Kizilay ahmet.kizilay at gmail.com
Thu May 12 10:34:13 CEST 2011


Hello,
I have been trying to solve this problem for a couple of days by now.
I am pretty sure that this is a simple pointer arithmetics error on my
part, but still, this is driving me crazy and I hope you don't mind
asking me this question here.

I am writing a simple external which adds all the inlet signals. I
expect to allow any number of inlets, so I am using the dsp_addv
method. Here, for debugging purposes I am only using two inlets. When
I access the inlets like in the example above everything works as
expected.

Code:

t_int *ak_addthese_tilde_perform(t_int *w) {
    int i, j;
   t_ak_addthese_tilde *x = (t_ak_addthese_tilde *)(w[1]);
   int n = (int)(w[2]);
   t_sample * in1 = (t_sample *)(w[3]);
   t_sample * in2 = (t_sample *)(w[4]);
   t_sample * out = (t_sample *)(w[5]);

   while(n--) {
     *out++ = *in1++ + *in2++;
   }

   return (w + 6);
}

When I access all input signals with an array of pointers, I cannot
hear the rightmost signal in the output.  So in this code above I only
hear the signal from the first inlet. Like so,

Code:

t_int *ak_addthese_tilde_perform(t_int *w) {
  int i, j;
  t_ak_addthese_tilde *x = (t_ak_addthese_tilde *)(w[1]);
  t_int n = (t_int)(w[2]);

  t_sample ** ins = getbytes(sizeof(t_sample *) * 2);
  t_sample * out = (t_sample *)(w[5]);

  for(i = 0; i < 2; i++) {
    ins[i] = (t_sample *)(w[3 + i]);
  }

  while(n--) {
    *out = 0.0;
    for(j = 0; j < 2; j++) {

      *out += *ins[j]++;
    }
    out++;
  }

  return (w + 6);
}

I would be grateful if you could point out where I am mistaken.
Best

--
ahmet kizilay
http://www.ahmetkizilay.com



More information about the Pd-list mailing list