Incremental update... new 100kbps and 128 kbps books
[platform/upstream/libvorbis.git] / lib / tone.c
1 #include <stdlib.h>
2 #include <stdio.h>
3 #include <math.h>
4 #include <string.h>
5
6 void usage(){
7   fprintf(stderr,"tone <frequency_Hz>,[<amplitude>] [<frequency_Hz>,[<amplitude>]...]\n");
8   exit(1);
9 }
10
11 int main (int argc,char *argv[]){
12   int i,j;
13   double *f;
14   double *amp;
15   
16   if(argc<2)usage();
17
18   f=alloca(sizeof(float)*(argc-1));
19   amp=alloca(sizeof(float)*(argc-1));
20
21   i=0;
22   while(argv[i+1]){
23     char *pos=strchr(argv[i+1],',');
24     
25     f[i]=atof(argv[i+1]);
26     if(pos)
27       amp[i]=atof(pos+1)*32767.;
28     else
29       amp[i]=32767.;
30
31     i++;
32   }
33
34   for(i=0;i<44100*10;i++){
35     float val=0;
36     int ival;
37     for(j=0;j<argc-1;j++)
38       val+=amp[j]*sin(i/44100.*f[j]*2*M_PI);
39     ival=rint(val);
40
41     if(ival>32767.)ival=32767.;
42     if(ival<-32768.)ival=-32768.;
43
44     fprintf(stdout,"%c%c%c%c",
45             (char)(ival&0xff),
46             (char)((ival>>8)&0xff),
47             (char)(ival&0xff),
48             (char)((ival>>8)&0xff));
49   }
50   return(0);
51 }
52