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