#include #include #include #define PI 3.141592653589793 #define HZ 500 #define OCTAVES 8 #define SAMPLERATE 48000 #define N (OCTAVES * SAMPLERATE) float f[16][N]; float t[N]; int main() { for (int j = 0; j < 16; ++j) { double js = j / 3.0; double w = ceil(js) + 1; for (int i = 0; i < N; ++i) { t[i] = i + js * rand() / (double) RAND_MAX; f[0][i] = sin(2 * PI * exp(log(HZ << OCTAVES) * t[i] / N + (1 - t[i] / N) * log(HZ))); } for (int i = 0; i < N; ++i) { double s = 0; double r = 0; for (int ii = i - w; ii <= i + w; ++ii) { if (ii < 0 || N <= ii) continue; double dt = t[i] - ii; double hat = fmax(1 - fabs(dt / w), 0); s += hat * f[0][ii]; r += hat; } f[j][i] = s / r; } } for (int i = 0; i < N; ++i) { t[i] = i; f[0][i] = sin(2 * PI * exp(log(HZ << OCTAVES) * t[i] / N + (1 - t[i] / N) * log(HZ))); } FILE *o = fopen("sweep.raw", "wb"); fwrite(f, sizeof(f), 1, o); fclose(o); return 0; }