From 2680a067f0d2c4af89c0d05ae0f23b4a8c5e01eb Mon Sep 17 00:00:00 2001 From: Steffen Vogel Date: Fri, 18 Jun 2021 14:31:29 -0400 Subject: [PATCH] scale: fixes for scale hook --- etc/examples/hooks/scale.conf | 19 +++++++++++++++++++ lib/hooks/scale.cpp | 18 +++++++++--------- 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/etc/examples/hooks/scale.conf b/etc/examples/hooks/scale.conf index e69de29bb..988a99b28 100644 --- a/etc/examples/hooks/scale.conf +++ b/etc/examples/hooks/scale.conf @@ -0,0 +1,19 @@ +@include "hook-nodes.conf" + +paths = ( + { + in = "signal_node" + out = "file_node" + + hooks = ( + { + type = "scale" + + signal = "sine" + + offset = 100.0 + scale = 55.0 + } + ) + } +) diff --git a/lib/hooks/scale.cpp b/lib/hooks/scale.cpp index 3f367e4d5..abc5f7485 100644 --- a/lib/hooks/scale.cpp +++ b/lib/hooks/scale.cpp @@ -104,27 +104,27 @@ public: state = State::PARSED; } - virtual Hook::Reason process(sample *smp) + virtual Hook::Reason process(struct sample *smp) { - int k = signal_index; + unsigned k = signal_index; + assert(k < smp->length); assert(state == State::STARTED); switch (sample_format(smp, k)) { case SignalType::INTEGER: - smp->data[k].i = smp->data[k].i * scale + offset; + smp->data[k].i *= scale; + smp->data[k].i += offset; break; case SignalType::FLOAT: - smp->data[k].f = smp->data[k].f * scale + offset; + smp->data[k].f *= scale; + smp->data[k].f += offset; break; case SignalType::COMPLEX: - smp->data[k].z = smp->data[k].z * (float) scale + (float) offset; - break; - - case SignalType::BOOLEAN: - smp->data[k].b = smp->data[k].b * (float) scale + (float) offset; + smp->data[k].z *= scale; + smp->data[k].z += offset; break; default: { }