voss_ad
voss_ad.wave = malloc(sizeof(voss_ad.wave[0]) * samples);
voss_ad.sin_a = malloc(sizeof(voss_ad.sin_a[0]) * len);
voss_ad.cos_a = malloc(sizeof(voss_ad.cos_a[0]) * len);
voss_ad.buf_a = malloc(sizeof(voss_ad.buf_a[0]) * len);
voss_ad.len_a = len;
voss_ad.sin_b = malloc(sizeof(voss_ad.sin_b[0]) * samples);
voss_ad.cos_b = malloc(sizeof(voss_ad.cos_b[0]) * samples);
voss_ad.buf_b = malloc(sizeof(voss_ad.buf_b[0]) * samples);
voss_ad.len_b = samples;
if (voss_ad.sin_a == NULL || voss_ad.cos_a == NULL ||
voss_ad.sin_b == NULL || voss_ad.cos_b == NULL ||
voss_ad.buf_a == NULL || voss_ad.buf_b == NULL)
voss_ad.sin_a[x] = sin(freq * 2.0 * M_PI * ((double)x) / ((double)len));
voss_ad.cos_a[x] = cos(freq * 2.0 * M_PI * ((double)x) / ((double)len));
voss_ad.buf_a[x] = 0;
voss_ad.wave[x] = sin(freq * 2.0 * M_PI * ((double)x) / ((double)len)) *
voss_ad.sin_b[x] = sin(2.0 * M_PI * ((double)x) / ((double)samples));
voss_ad.cos_b[x] = cos(2.0 * M_PI * ((double)x) / ((double)samples));
voss_ad.buf_b[x] = 0;
xa = voss_ad.offset_a;
xb = voss_ad.offset_b;
retval = voss_ad.wave[xb];
sample -= voss_ad.buf_a[xa];
voss_ad.sum_sin_a += voss_ad.sin_a[xa] * sample;
voss_ad.sum_cos_a += voss_ad.cos_a[xa] * sample;
voss_ad.buf_a[xa] += sample;
sample = sqrt((voss_ad.sum_sin_a * voss_ad.sum_sin_a) +
(voss_ad.sum_cos_a * voss_ad.sum_cos_a));
sample -= voss_ad.buf_b[xb];
voss_ad.sum_sin_b += voss_ad.sin_b[xb] * sample;
voss_ad.sum_cos_b += voss_ad.cos_b[xb] * sample;
voss_ad.buf_b[xb] += sample;
if (++xa == voss_ad.len_a)
if (++xb == voss_ad.len_b) {
voss_ad.sum_cos_b, voss_ad.sum_sin_b);
voss_ad_last_delay = (uint32_t)(phase * (double)(voss_ad.len_b) / (2.0 * M_PI)) - (voss_ad.len_a / 2);
if (voss_ad_last_delay > voss_ad.len_b)
voss_ad_last_delay = voss_ad.len_b;
voss_ad.offset_a = xa;
voss_ad.offset_b = xb;
} voss_ad;
for (x = 0; x != voss_ad.len_a; x++)
voss_ad.buf_a[x] = 0;
for (x = 0; x != voss_ad.len_b; x++)
voss_ad.buf_b[x] = 0;
voss_ad.sum_sin_a = 0;
voss_ad.sum_cos_a = 0;
voss_ad.sum_sin_b = 0;
voss_ad.sum_cos_b = 0;
voss_ad.offset_a = 0;
voss_ad.offset_b = 0;