summaryrefslogtreecommitdiffhomepage
path: root/contrib/vorbis/lib/tone.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/vorbis/lib/tone.c')
-rw-r--r--contrib/vorbis/lib/tone.c54
1 files changed, 54 insertions, 0 deletions
diff --git a/contrib/vorbis/lib/tone.c b/contrib/vorbis/lib/tone.c
new file mode 100644
index 0000000..5b8b020
--- /dev/null
+++ b/contrib/vorbis/lib/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);
+}
+