aboutsummaryrefslogtreecommitdiffstats
path: root/fgen.c
diff options
context:
space:
mode:
authorEliteTK <tomasz.kramkowski@gmail.com>2014-07-10 22:35:35 +0100
committerEliteTK <tomasz.kramkowski@gmail.com>2014-07-10 22:35:35 +0100
commita8609ccd901b1942e862c14205026d841e640add (patch)
tree5eaf1d04d454bc45acfdf4c698b2860b91f48a00 /fgen.c
parent922fe2f68c39a765896d274356c7c9dc4fb9cd73 (diff)
downloadc-stuff-a8609ccd901b1942e862c14205026d841e640add.tar.gz
c-stuff-a8609ccd901b1942e862c14205026d841e640add.tar.xz
c-stuff-a8609ccd901b1942e862c14205026d841e640add.zip
More stuff.
Diffstat (limited to 'fgen.c')
-rw-r--r--fgen.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/fgen.c b/fgen.c
new file mode 100644
index 0000000..10b9b51
--- /dev/null
+++ b/fgen.c
@@ -0,0 +1,30 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+int main(int argc, char **argv)
+{
+ if (argc != 4) {
+ fprintf(stderr, "Usage: %s <sampling-frequency> <frequency> <duration> [amplitude]\n", argv[0]);
+ exit(1);
+ }
+
+ long int sfreq = strtol(argv[1], NULL, 10);
+ long double freq = strtod(argv[2], NULL);
+ if (freq <= 0) freq = 1;
+ long double duration = strtod(argv[3], NULL);
+ long double amplitude = 127;
+
+ if (argc == 5) {
+ amplitude = strtol(argv[4], NULL, 10);
+ if (amplitude > 127) amplitude = 127;
+ else if (amplitude < 0) amplitude = 0;
+ }
+
+ long double wave_length = sfreq / freq;
+
+ for (long int i = 0; i < duration / 1000 * sfreq; i++)
+ putchar((char)((sinf(i / wave_length * M_PI_2 * 4) + 1) * amplitude));
+
+ return 0;
+}