diff options
author | Damien Zammit <damien@zamaudio.com> | 2016-07-05 15:07:06 +1000 |
---|---|---|
committer | Damien Zammit <damien@zamaudio.com> | 2016-07-05 15:07:06 +1000 |
commit | bf7c4c7d60e5211ce388ce14a17e45feddd78735 (patch) | |
tree | 31c10f37b4e47d57d5ed4bec08a69b74b02f89aa /libs | |
parent | fef79d46bb54c0e9179e54a0977eeb602e4b2db3 (diff) |
a-comp: Fix peak level on both stereo and mono plugins
Diffstat (limited to 'libs')
-rw-r--r-- | libs/plugins/a-comp.lv2/a-comp.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/libs/plugins/a-comp.lv2/a-comp.c b/libs/plugins/a-comp.lv2/a-comp.c index 9449c2741e..77895410f2 100644 --- a/libs/plugins/a-comp.lv2/a-comp.c +++ b/libs/plugins/a-comp.lv2/a-comp.c @@ -308,9 +308,9 @@ run_mono(LV2_Handle instance, uint32_t n_samples) for (i = 0; i < n_samples; i++) { in0 = input[i]; sc0 = sc[i]; - ingain = usesidechain ? sc0 : in0; + ingain = usesidechain ? fabs(sc0) : fabs(in0); Lyg = 0.f; - Lxg = (ingain==0.f) ? -160.f : to_dB(fabs(ingain)); + Lxg = (ingain==0.f) ? -160.f : to_dB(ingain); Lxg = sanitize_denormal(Lxg); Lyg = Lxg + (1.f/ratio-1.f)*(Lxg-thresdb+width/2.f)*(Lxg-thresdb+width/2.f)/(2.f*width); @@ -336,8 +336,8 @@ run_mono(LV2_Handle instance, uint32_t n_samples) *(acomp->gainr) = Lyl; - if (in0 > in_peak) { - in_peak = in0; + if (ingain > in_peak) { + in_peak = ingain; } lgaininp = in0 * Lgain; output[i] = lgaininp * from_dB(*(acomp->makeup)); @@ -398,6 +398,7 @@ run_stereo(LV2_Handle instance, uint32_t n_samples) float in0; float in1; float sc0; + float maxabslr; float ratio = *(acomp->ratio); float thresdb = *(acomp->thresdb); @@ -424,7 +425,8 @@ run_stereo(LV2_Handle instance, uint32_t n_samples) in0 = input0[i]; in1 = input1[i]; sc0 = sc[i]; - ingain = usesidechain ? fabs(sc0) : fmaxf(fabs(in0), fabs(in1)); + maxabslr = fmaxf(fabs(in0), fabs(in1)); + ingain = usesidechain ? fabs(sc0) : maxabslr; Lyg = 0.f; Lxg = (ingain==0.f) ? -160.f : to_dB(ingain); Lxg = sanitize_denormal(Lxg); @@ -460,7 +462,7 @@ run_stereo(LV2_Handle instance, uint32_t n_samples) output0[i] = lgaininp * from_dB(*(acomp->makeup)); output1[i] = rgaininp * from_dB(*(acomp->makeup)); - max = (fmaxf(fabsf(output0[i]), fabsf(output1[i])) > max) ? fmaxf(fabsf(output0[i]), fabsf(output1[i])) : sanitize_denormal(max); + max = (fmaxf(fabs(output0[i]), fabs(output1[i])) > max) ? fmaxf(fabs(output0[i]), fabs(output1[i])) : sanitize_denormal(max); // TODO re-use local variables on stack // store values back to acomp at the end of the inner-loop |