#include #include #include #define BASEFREQ 700 #define TIME 1500 typedef struct note NOTE; struct note { double phi; int age; double freq; } ; static NOTE notes[2]; static int nint(double d) { if (d < 0) return(d-.5); else return(d+.5); } static void write_sample(int s) { if (s < -32767) s = -32767; if (s > 32767) s = 32767; putchar((s>>8)&0xff); putchar(s&0xff); } static void init_note(NOTE *n, double freq) { n->phi = 0; n->age = 0; n->freq = freq; } static double note_value(NOTE *n) { n->age ++; n->phi += (n->freq*2*M_PI) / 8000; if (n->phi >= 2*M_PI) n->phi -= 2*M_PI; if (n->age < TIME) { return(n->age*sin(n->phi)/TIME); } else { return(((2*TIME)-n->age)*sin(n->phi)/TIME); } } int main(void); int main(void) { int i; init_note(¬es[0],BASEFREQ); init_note(¬es[1],(3*BASEFREQ)/2); for (i=0;i<(2*TIME);i++) { write_sample(nint( ( note_value(¬es[0]) + note_value(¬es[1]) ) * 3000 )); } exit(0); }