annotate src/libvorbis-1.3.3/lib/tone.c @ 7:cd13f7cd9bc3

Add portaudio
author Chris Cannam
date Wed, 20 Mar 2013 15:18:57 +0000
parents 05aa0afa9217
children
rev   line source
Chris@1 1 #include <stdlib.h>
Chris@1 2 #include <stdio.h>
Chris@1 3 #include <math.h>
Chris@1 4 #include <string.h>
Chris@1 5
Chris@1 6 void usage(){
Chris@1 7 fprintf(stderr,"tone <frequency_Hz>,[<amplitude>] [<frequency_Hz>,[<amplitude>]...]\n");
Chris@1 8 exit(1);
Chris@1 9 }
Chris@1 10
Chris@1 11 int main (int argc,char *argv[]){
Chris@1 12 int i,j;
Chris@1 13 double *f;
Chris@1 14 double *amp;
Chris@1 15
Chris@1 16 if(argc<2)usage();
Chris@1 17
Chris@1 18 f=alloca(sizeof(*f)*(argc-1));
Chris@1 19 amp=alloca(sizeof(*amp)*(argc-1));
Chris@1 20
Chris@1 21 i=0;
Chris@1 22 while(argv[i+1]){
Chris@1 23 char *pos=strchr(argv[i+1],',');
Chris@1 24
Chris@1 25 f[i]=atof(argv[i+1]);
Chris@1 26 if(pos)
Chris@1 27 amp[i]=atof(pos+1)*32767.f;
Chris@1 28 else
Chris@1 29 amp[i]=32767.f;
Chris@1 30
Chris@1 31 fprintf(stderr,"%g Hz, %g amp\n",f[i],amp[i]);
Chris@1 32
Chris@1 33 i++;
Chris@1 34 }
Chris@1 35
Chris@1 36 for(i=0;i<44100*10;i++){
Chris@1 37 float val=0;
Chris@1 38 int ival;
Chris@1 39 for(j=0;j<argc-1;j++)
Chris@1 40 val+=amp[j]*sin(i/44100.f*f[j]*2*M_PI);
Chris@1 41 ival=rint(val);
Chris@1 42
Chris@1 43 if(ival>32767.f)ival=32767.f;
Chris@1 44 if(ival<-32768.f)ival=-32768.f;
Chris@1 45
Chris@1 46 fprintf(stdout,"%c%c%c%c",
Chris@1 47 (char)(ival&0xff),
Chris@1 48 (char)((ival>>8)&0xff),
Chris@1 49 (char)(ival&0xff),
Chris@1 50 (char)((ival>>8)&0xff));
Chris@1 51 }
Chris@1 52 return(0);
Chris@1 53 }
Chris@1 54