/* Compute a windowed sinc FIR of size n into buffer */
void arke_firws(float frequency, float* buffer, unsigned int n, arke_window_f window)
{
float sinFreq;
float* p;
int n2, i;
if(!(n % 2)) {
/* n may not be even */
/* fix this by setting the last value to zero */
n--;
buffer[n] = 0.0f;
}
sinFreq = frequency * 2.0f * M_PI;
p = buffer;
n2 = n / 2;
for(i = -n2; i < n2; i++, p++) {
float f = sinFreq * i;
if(fabs(f) > kNearZero) {
*p = sin(f) / f;
} else {
*p = 1.0f;
}
}
window(buffer, n);
}