diff options
author | Damien Zammit <damien@zamaudio.com> | 2015-06-13 03:45:46 +1000 |
---|---|---|
committer | Damien Zammit <damien@zamaudio.com> | 2015-06-13 03:45:46 +1000 |
commit | 97b58556b2dfe3d5f2fe1e15ec44bc2cd2233155 (patch) | |
tree | 41cfff58772758ff968df90e3f3d6d8025484f4c | |
parent | e958634bcf69e20d7f679678707d34b807ba10d7 (diff) |
Fixed limits on gate
Signed-off-by: Damien Zammit <damien@zamaudio.com>
-rw-r--r-- | plugins/ZamGate/ZamGatePlugin.cpp | 9 | ||||
-rw-r--r-- | plugins/ZamGate/ZamGatePlugin.hpp | 7 |
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))); } |