shithub: soundpipe

Download patch

ref: ffe16b59b7ae8c2e00dffa7bba7c9d7b9238c9f5
parent: f6d97317c22b5d2e703844728a3f41b6bc3a74a4
author: Paul Batchelor <thisispaulbatchelor@gmail.com>
date: Sat Jan 30 05:51:12 EST 2021

reworked phasor to use sndkit phasor

--- a/config.def.mk
+++ b/config.def.mk
@@ -97,6 +97,7 @@
 tangled/peakeq.o \
 tangled/modalres.o \
 tangled/phasewarp.o \
+tangled/phasor.o \
 
 NO_LIBSNDFILE=1
 CFLAGS += -DNO_LIBSNDFILE
--- a/h/phasor.h
+++ b/h/phasor.h
@@ -1,6 +1,10 @@
+#ifndef SK_PHASOR_H
+typedef struct sk_phasor sk_phasor;
+#endif
+
 typedef struct sp_phasor{
-    SPFLOAT freq, phs;
-    SPFLOAT onedsr;
+    sk_phasor *phasor;
+    SPFLOAT freq;
 } sp_phasor;
 
 int sp_phasor_create(sp_phasor **p);
--- a/modules/phasor.c
+++ b/modules/phasor.c
@@ -4,9 +4,13 @@
  * A phasor produces a non-bandlimited sawtooth wave,
  * normalized to be in range 0-1. Phasors are most
  * frequently used to create table-lookup oscillators.
+ *
+ * This code is placed in the public domain.
  */
 
 #include <stdlib.h>
+#define SK_PHASOR_PRIV
+#include "tangled/phasor.h"
 #include "soundpipe.h"
 
 int sp_phasor_create(sp_phasor **p)
@@ -17,6 +21,9 @@
 
 int sp_phasor_destroy(sp_phasor **p)
 {
+    sp_phasor *pp;
+    pp = *p;
+    free(pp->phasor);
     free(*p);
     return SP_OK;
 }
@@ -23,30 +30,16 @@
 
 int sp_phasor_init(sp_data *sp, sp_phasor *p, SPFLOAT iphs)
 {
+    p->phasor = malloc(sizeof(sk_phasor));
     p->freq = 440;
-    p->phs = iphs;
-    p->onedsr = 1.0 / sp->sr;
+    sk_phasor_init(p->phasor, sp->sr, iphs);
+    sk_phasor_freq(p->phasor, p->freq);
     return SP_OK;
 }
 
 int sp_phasor_compute(sp_data *sp, sp_phasor *p, SPFLOAT *in, SPFLOAT *out)
 {
-    SPFLOAT phs;
-    SPFLOAT incr;
-
-    phs = p->phs;
-    incr = p->freq * p->onedsr;
-
-    *out = phs;
-
-    phs += incr;
-
-    if (phs >= 1.0) {
-        phs -= 1.0;
-    } else if (phs < 0.0) {
-        phs += 1.0;
-    }
-
-    p->phs = phs;
+    sk_phasor_freq(p->phasor, p->freq);
+    *out = sk_phasor_tick(p->phasor);
     return SP_OK;
 }
--- /dev/null
+++ b/tangled/phasor.c
@@ -1,0 +1,40 @@
+#line 49 "phasor.org"
+#define SK_PHASOR_PRIV
+#include "phasor.h"
+#line 84 "phasor.org"
+void sk_phasor_init(sk_phasor *ph, int sr, SKFLT iphs)
+{
+    ph->phs = iphs;
+    ph->onedsr = 1.0 / sr;
+    sk_phasor_freq(ph, 440);
+}
+#line 102 "phasor.org"
+void sk_phasor_freq(sk_phasor *ph, SKFLT freq)
+{
+    ph->freq = freq;
+}
+#line 128 "phasor.org"
+SKFLT sk_phasor_tick(sk_phasor *ph)
+{
+    SKFLT phs;
+    SKFLT incr;
+    SKFLT out;
+
+    phs = ph->phs;
+    incr = ph->freq * ph->onedsr;
+
+    out = phs;
+
+    phs += incr;
+
+    if (phs >= 1.0) {
+        phs -= 1.0;
+    } else if (phs < 0.0) {
+        phs += 1.0;
+    }
+
+    ph->phs = phs;
+
+    return out;
+}
+#line 49 "phasor.org"
--- /dev/null
+++ b/tangled/phasor.h
@@ -1,0 +1,28 @@
+#line 32 "phasor.org"
+#ifndef SK_PHASOR_H
+#define SK_PHASOR_H
+
+#ifndef SKFLT
+#define SKFLT float
+#endif
+
+#line 60 "phasor.org"
+typedef struct sk_phasor sk_phasor;
+#line 32 "phasor.org"
+#line 79 "phasor.org"
+void sk_phasor_init(sk_phasor *ph, int sr, SKFLT iphs);
+#line 97 "phasor.org"
+void sk_phasor_freq(sk_phasor *ph, SKFLT freq);
+#line 113 "phasor.org"
+SKFLT sk_phasor_tick(sk_phasor *ph);
+#line 41 "phasor.org"
+#ifdef SK_PHASOR_PRIV
+#line 70 "phasor.org"
+struct sk_phasor {
+    SKFLT freq;
+    SKFLT phs;
+    SKFLT onedsr;
+};
+#line 43 "phasor.org"
+#endif
+#endif