ref: 61f4c085c402af665b436f6d010d61107551d8a3
dir: /sys/src/cmd/audio/libvorbis/tone.c/
#include <stdlib.h> #include <stdio.h> #include <math.h> #include <string.h> void usage(){ fprintf(stderr,"tone <frequency_Hz>,[<amplitude>] [<frequency_Hz>,[<amplitude>]...]\n"); exit(1); } int main (int argc,char *argv[]){ int i,j; double *f; double *amp; if(argc<2)usage(); f=alloca(sizeof(*f)*(argc-1)); amp=alloca(sizeof(*amp)*(argc-1)); i=0; while(argv[i+1]){ char *pos=strchr(argv[i+1],','); f[i]=atof(argv[i+1]); if(pos) amp[i]=atof(pos+1)*32767.f; else amp[i]=32767.f; fprintf(stderr,"%g Hz, %g amp\n",f[i],amp[i]); i++; } for(i=0;i<44100*10;i++){ float val=0; int ival; for(j=0;j<argc-1;j++) val+=amp[j]*sin(i/44100.f*f[j]*2*M_PI); ival=rint(val); if(ival>32767.f)ival=32767.f; if(ival<-32768.f)ival=-32768.f; fprintf(stdout,"%c%c%c%c", (char)(ival&0xff), (char)((ival>>8)&0xff), (char)(ival&0xff), (char)((ival>>8)&0xff)); } return(0); }