diff options
author | Vito Caputo <vcaputo@pengaru.com> | 2020-02-03 04:09:05 -0800 |
---|---|---|
committer | Vito Caputo <vcaputo@pengaru.com> | 2020-02-03 04:27:33 -0800 |
commit | 503ac37cb590eb35f1891b81b2256b07a3f89592 (patch) | |
tree | 695d70d3ff2540e130578f7714e391d2efb11dd5 /src/libs/sig/ops_sin.c | |
parent | d583e88bf3372e23afe7c52510b19aeffcdc32fa (diff) |
libs/sig: convert ops_sin_ctxt_t.hz to a sig_t *
Now hz can vary with time as well...
Diffstat (limited to 'src/libs/sig/ops_sin.c')
-rw-r--r-- | src/libs/sig/ops_sin.c | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/src/libs/sig/ops_sin.c b/src/libs/sig/ops_sin.c index b228b49..fa9dfa5 100644 --- a/src/libs/sig/ops_sin.c +++ b/src/libs/sig/ops_sin.c @@ -5,7 +5,7 @@ typedef struct ops_sin_ctxt_t { - float hz; + sig_t *hz; } ops_sin_ctxt_t; @@ -21,21 +21,35 @@ static void ops_sin_init(void *context, va_list ap) assert(ctxt); - ctxt->hz = va_arg(ap, double); - assert(ctxt->hz >= .0001f); + ctxt->hz = va_arg(ap, sig_t *); +} + + +static void ops_sin_destroy(void *context) +{ + ops_sin_ctxt_t *ctxt = context; + + assert(ctxt); + + sig_free(ctxt->hz); } static float ops_sin_output(void *context, unsigned ticks_ms) { ops_sin_ctxt_t *ctxt = context; - float rads_per_ms, rads; + float rads_per_ms, rads, hz; unsigned ms_per_cycle; assert(ctxt); + assert(ctxt->hz); + + hz = sig_output(ctxt->hz, ticks_ms); + if (hz < .0001f) + return 0.f; - ms_per_cycle = ctxt->hz * 1000.f; - rads_per_ms = (M_PI * 2.f) * ctxt->hz * .001f; + ms_per_cycle = hz * 1000.f; + rads_per_ms = (M_PI * 2.f) * hz * .001f; rads = (float)(ticks_ms % ms_per_cycle) * rads_per_ms; return sinf(rads); @@ -45,5 +59,6 @@ static float ops_sin_output(void *context, unsigned ticks_ms) sig_ops_t sig_ops_sin = { .size = ops_sin_size, .init = ops_sin_init, + .destroy = ops_sin_destroy, .output = ops_sin_output, }; |