summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamien Zammit <damien@zamaudio.com>2015-06-13 03:45:46 +1000
committerDamien Zammit <damien@zamaudio.com>2015-06-13 03:45:46 +1000
commit97b58556b2dfe3d5f2fe1e15ec44bc2cd2233155 (patch)
tree41cfff58772758ff968df90e3f3d6d8025484f4c
parente958634bcf69e20d7f679678707d34b807ba10d7 (diff)
Fixed limits on gate
Signed-off-by: Damien Zammit <damien@zamaudio.com>
-rw-r--r--plugins/ZamGate/ZamGatePlugin.cpp9
-rw-r--r--plugins/ZamGate/ZamGatePlugin.hpp7
2 files changed, 12 insertions, 4 deletions
diff --git a/plugins/ZamGate/ZamGatePlugin.cpp b/plugins/ZamGate/ZamGatePlugin.cpp
index 5376a1e..377c2c0 100644
--- a/plugins/ZamGate/ZamGatePlugin.cpp
+++ b/plugins/ZamGate/ZamGatePlugin.cpp
@@ -251,13 +251,14 @@ void ZamGatePlugin::d_run(const float** inputs, float** outputs, uint32_t frames
if (gl > 1.f)
gl = 1.f;
}
- outputs[0][i] = tanh(2.0*gl) * from_dB(makeup) * inputs[0][i];
- outputs[1][i] = tanh(2.0*gr) * from_dB(makeup) * inputs[1][i];
gatestatel = gl;
gatestater = gr;
+ outputs[0][i] = tanh(2.0*gatestatel) * from_dB(makeup) * inputs[0][i];
+ outputs[1][i] = tanh(2.0*gatestater) * from_dB(makeup) * inputs[1][i];
ming = std::max(gr, gl);
- gainr = -to_dB(ming);
- outlevel = to_dB(absample);
+ gainr = (ming > 0) ? sanitize_denormal(-to_dB(ming)) : 40.0;
+ gainr = std::min(gainr, 40.f);
+ outlevel = (absample > 0) ? to_dB(absample) : -60.0;
}
}
diff --git a/plugins/ZamGate/ZamGatePlugin.hpp b/plugins/ZamGate/ZamGatePlugin.hpp
index e7eeed5..45eef8a 100644
--- a/plugins/ZamGate/ZamGatePlugin.hpp
+++ b/plugins/ZamGate/ZamGatePlugin.hpp
@@ -90,6 +90,13 @@ protected:
void d_run(const float** inputs, float** outputs, uint32_t frames) override;
static inline float
+ sanitize_denormal(float v) {
+ if(!std::isnormal(v) || !std::isfinite(v))
+ return 0.f;
+ return v;
+ }
+
+ static inline float
from_dB(float gdb) {
return (exp(gdb/20.f*log(10.f)));
}