Audio

 view release on metacpan or  search on metacpan

Data/Data.xs  view on Meta::CPAN

  float dB0 = 10*log10(min);
  if (start+count > n)
   count = n - start;
  if (AUDIO_COMPLEX(au))
   {
    for (n=0; n < count; n++)
     {
      float r = *p++;
      float i = *p++;
      r = sqrt(r*r+i*i);
      /* hack to avoid log10(0) yielding NaN or fault */
      if (r < min)
       r = min;
      XPUSHs(sv_2mortal(newSVnv(10*log10(r)-dB0)));
     }
   }
  else
   {
    for (n=0; n < count; n++)
     {
      float r = *p++;
      if (r < 0)
       r = -r;
      /* hack to avoid log10(0) yielding NaN or fault */
      if (r < min)
       r = min;
      XPUSHs(sv_2mortal(newSVnv(10*log10(r)-dB0)));
     }
   }
  XSRETURN(count);
 }

void
Audio_amplitude(au,start = 0, count = (GIMME == G_ARRAY) ? Audio_samples(au)-start : 1)

Data/fft.c  view on Meta::CPAN


#ifdef __GNUC__

void
Audio_durbin(int NUM_POLES, float *R,float *aa)
{double E[NUM_POLES+1];
 double k[NUM_POLES+1];
 double a[NUM_POLES+1][NUM_POLES+1];
 double G = R[0];
 int i;
 /* Set everything to NaN */
 memset(a,-1,sizeof(a));
 memset(k,-1,sizeof(k));
 memset(E,-1,sizeof(E));
 E[0] = R[0];
 for (i=1; i <= NUM_POLES; i++)
  {int j;
   k[i] = 0.0;
   for (j=1; j < i; j++)
    k[i] += a[j][i-1]*R[i-j];
   k[i] -= R[i];



( run in 0.240 second using v1.01-cache-2.11-cpan-4d50c553e7e )