This is dave.buzz.c in view mode; [Download] [Up]
float buzz(amp,si,hn,f,phs)
float amp,si,hn,*f,*phs;
{
register j,k;
float q,d,h2n,h2np1;
j = *phs;
k = (j+1) % 1024;
h2n = 2. * hn;
h2np1 = h2n + 1.;
q = (int)((*phs - (float)j) * h2np1)/h2np1;
d = *(f+j);
d += (*(f+k)-d)*q;
if(!d) q = amp;
else {
k = (long)(h2np1 * *phs) % 1024;
q = amp * (*(f+k)/d - 1.)/h2n;
}
*phs += si;
while(*phs >= 1024.)
*phs -= 1024.;
return(q);
}
float *bbuzz(amp,si,hn,f,phs,a,alen)
float amp,si,hn,*f,*phs,*a;
long alen;
{
register i,j,k;
float q,d,h2n,h2np1;
float *fp= &a[0];
h2n = hn+hn;
h2np1 = h2n+1.;
for(i=alen;i>0;--i){
j = *phs;
k = (j+1) % 1024;
q = (int)((*phs - (float)j) * h2np1)/h2np1;
d = *(f+j);
d += (*(f+k)-d)*q;
if(!d) *fp++ = amp;
else {
k = (long)(h2np1 * *phs) % 1024;
*fp++ = amp * (*(f+k)/d - 1.)/h2n;
}
*phs += si;
while(*phs >= 1024.)
*phs -= 1024.;
}
return(&a[0]);
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.