shithub: soundpipe

Download patch

ref: 8c93ccfb85d09bba58f8997930a110e6be2bbcd4
parent: 7de74a9d01cbb87b74def34099ce2f30a0fb6e6e
author: Paul Batchelor <thisispaulbatchelor@gmail.com>
date: Fri Oct 30 05:05:16 EDT 2020

added gen_composite

--- a/h/ftbl.h
+++ b/h/ftbl.h
@@ -15,3 +15,4 @@
 int sp_gen_vals(sp_data *sp, sp_ftbl *ft, const char *string);
 int sp_gen_sine(sp_data *sp, sp_ftbl *ft);
 void sp_gen_triangle(sp_data *sp, sp_ftbl *ft);
+void sp_gen_composite(sp_data *sp, sp_ftbl *ft, const char *argstring);
--- a/modules/ftbl.c
+++ b/modules/ftbl.c
@@ -127,3 +127,29 @@
         counter += step;
     }
 }
+
+void sp_gen_composite(sp_data *sp, sp_ftbl *ft, const char *argstring)
+{
+    SPFLOAT phs, inc, amp, dc, tpdlen;
+    int i, n;
+    sp_ftbl *args;
+
+    sp_ftbl_create(sp, &args, 1);
+    sp_gen_vals(sp, args, argstring);
+
+    tpdlen = 2 * M_PI / (SPFLOAT) ft->size;
+
+    for (n = 0; n < args->size; n += 4) {
+        inc = args->tbl[n] * tpdlen;
+        amp = args->tbl[n + 1];
+        phs = args->tbl[n + 2] * tpd360;
+        dc = args->tbl[n + 3];
+
+        for (i = 0; i <ft->size ; i++) {
+            ft->tbl[i] += (SPFLOAT) (sin(phs) * amp + dc);
+            if ((phs += inc) >= 2 * M_PI) phs -= 2 * M_PI;
+        }
+    }
+
+    sp_ftbl_destroy(&args);
+}