Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
godotengine
GitHub Repository: godotengine/godot
Path: blob/master/thirdparty/libvorbis/tone.c
9896 views
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(*f)*(argc-1));
19
amp=alloca(sizeof(*amp)*(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.f;
28
else
29
amp[i]=32767.f;
30
31
fprintf(stderr,"%g Hz, %g amp\n",f[i],amp[i]);
32
33
i++;
34
}
35
36
for(i=0;i<44100*10;i++){
37
float val=0;
38
int ival;
39
for(j=0;j<argc-1;j++)
40
val+=amp[j]*sin(i/44100.f*f[j]*2*M_PI);
41
ival=rint(val);
42
43
if(ival>32767.f)ival=32767.f;
44
if(ival<-32768.f)ival=-32768.f;
45
46
fprintf(stdout,"%c%c%c%c",
47
(char)(ival&0xff),
48
(char)((ival>>8)&0xff),
49
(char)(ival&0xff),
50
(char)((ival>>8)&0xff));
51
}
52
return(0);
53
}
54
55
56