#include #include #include int fd; int steps; int sf, nf; /* samples per fundamental, no of fundamentals */ float ff; /* fundamental freq. relative to 440 Hz ('A') */ #define MAXLENGTH 10*44100 /* 10 sec. samples enough ? */ #define MSEC(t) (int)(t*44.1) short os[MAXLENGTH]; compute_sample(ff,sf,nf,argc,argv) float ff; int sf, nf; int argc; char *argv[]; { int s, h; float f, a; for (h=4; h< argc; h+=2) { sscanf(argv[h],"%f",&f); sscanf(argv[h+1],"%f",&a); printf(" ff %f steps %d sf %d nf %d f %f a %f", ff,steps,sf,nf,f,a); for (s=0; s ",argv[0]); printf(" {harmonic relative_ampl} ...\n"); exit(-1); } sscanf(argv[2],"%f",&ff); sf = (int) ((44100.0) / (440.0 * ff)); sscanf(argv[3],"%d",&nf); steps = nf*sf; if (steps > MAXLENGTH) { printf("Error: sample length of %d ms exceeds %d ms.\n", (1000*steps)/44100, (1000 *MAXLENGTH)/44100); } if (initwav(argv[1]) < 0) { printf("Error: cannot open file %s.\n",argv[1]); } clear_os(); compute_sample(ff,sf,nf,argc,argv); writewav(fd); return(0); }