ftp.nice.ch/pub/next/unix/audio/cmix.s.tar.gz#/cmix/lpc/dave.buzz.c

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.