From 55dba6dbed09582113d76108afc072948f4ee1bb Mon Sep 17 00:00:00 2001 From: KubaPro010 Date: Tue, 30 Dec 2025 23:16:03 +0100 Subject: [PATCH] reduce gain --- filter/bs412.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/filter/bs412.c b/filter/bs412.c index 4d4d9a4..d2724d6 100644 --- a/filter/bs412.c +++ b/filter/bs412.c @@ -86,6 +86,14 @@ float bs412_compress(BS412Compressor* mpx, float sample) { float limit_threshold = dbr_to_deviation(mpx->target + 0.1f) / mpx->mpx_deviation; output_sample = soft_clip_tanh(output_sample, limit_threshold); + if(deviation_to_dbr(avg_deviation * mpx->gain) > mpx->target && deviation_to_dbr(avg_deviation) < mpx->target) { + // Gain is too much, reduce + float overshoot_dbr = deviation_to_dbr(avg_deviation * mpx->gain) - mpx->target; + float reduction_factor = powf(10.0f, -overshoot_dbr / 10.0f); + mpx->gain *= reduction_factor; + mpx->gain = fmaxf(0.0f, fminf(mpx->max, mpx->gain)); + } + mpx->sample_counter++; return output_sample; }