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)
#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 )