diff options
Diffstat (limited to 'thirdparty/libvorbis/tone.c')
-rw-r--r-- | thirdparty/libvorbis/tone.c | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/thirdparty/libvorbis/tone.c b/thirdparty/libvorbis/tone.c new file mode 100644 index 0000000000..73afc67d4c --- /dev/null +++ b/thirdparty/libvorbis/tone.c @@ -0,0 +1,54 @@ +#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); +} + |