1 /* Generate a header file for a particular
2 single or double frequency */
11 static float loudness
=16384.0;
13 static int calc_samples(int freq
)
16 /* Calculate the number of samples at 8000hz sampling
17 we need to have this wave form */
19 /* Take out common 2's up to six times */
25 /* Take out common 5's (up to three times */
31 /* No more common factors. */
35 int main(int argc
, char *argv
[])
41 int x
, samples1
, samples2
=0, samples
=0;
44 fprintf(stderr
, "Usage: gensound <name> <freq1> [freq2]\n");
47 freq1
= atoi(argv
[2]);
49 freq2
= atoi(argv
[3]);
52 wlen1
= 8000.0/(float)freq1
;
53 samples1
= calc_samples(freq1
);
54 printf("Wavelength 1 (in samples): %10.5f\n", wlen1
);
55 printf("Minimum samples (1): %d (%f.3 wavelengths)\n", samples1
, samples1
/ wlen1
);
57 wlen2
= 8000.0/(float)freq2
;
58 samples2
= calc_samples(freq2
);
59 printf("Wavelength 1 (in samples): %10.5f\n", wlen2
);
60 printf("Minimum samples (1): %d (%f.3 wavelengths)\n", samples2
, samples2
/ wlen2
);
64 while(samples
% samples2
)
67 printf("Need %d samples\n", samples
);
68 snprintf(fn
, sizeof(fn
), "%s.h", argv
[1]);
69 if ((f
= fopen(fn
, "w"))) {
71 fprintf(f
, "/* %s: Generated from frequencies %d and %d \n"
72 " by gentone. %d samples */\n", fn
, freq1
, freq2
, samples
);
74 fprintf(f
, "/* %s: Generated from frequency %d\n"
75 " by gentone. %d samples */\n", fn
, freq1
, samples
);
76 fprintf(f
, "static short %s[%d] = {\n\t", argv
[1], samples
);
77 for (x
=0;x
<samples
;x
++) {
78 val
= loudness
* sin((freq1
* 2.0 * M_PI
* x
)/8000.0);
80 val
+= loudness
* sin((freq2
* 2.0 * M_PI
* x
)/8000.0);
81 fprintf(f
, "%5d, ", (int)val
);
89 printf("Wrote %s\n", fn
);
91 fprintf(stderr
, "Unable to open %s for writing\n", fn
);