Fix a-EQ when parameter changes are very slow
authorNil Geisweiller <ngeiswei@gmail.com>
Sun, 4 Jun 2017 18:34:48 +0000 (21:34 +0300)
committerRobin Gareus <robin@gareus.org>
Tue, 6 Jun 2017 12:44:19 +0000 (14:44 +0200)
If the parameters change too slowly the filter may never get updated. Indeed,
in spite of v_f0, v_g or v_bw being updated, set_params may never be called,
thus v_filter never updated.

libs/plugins/a-eq.lv2/a-eq.c

index d286552e033b41f43220c0e604cf052b0c978eb5..7a15c8a14f3938f1c5e4e094422740ac71e6a6ab 100644 (file)
@@ -393,23 +393,17 @@ run(LV2_Handle instance, uint32_t n_samples)
                        if (!is_eq(aeq->v_f0[i], *aeq->f0[i], 0.1)) {
                                aeq->v_f0[i] += tau * (*aeq->f0[i] - aeq->v_f0[i]);
                                changed = true;
-                       } else {
-                               aeq->v_f0[i] = *aeq->f0[i];
                        }
 
                        if (*aeq->filtog[i] <= 0 || *aeq->enable <= 0) {
                                if (!is_eq(aeq->v_g[i], 0.f, 0.05)) {
                                        aeq->v_g[i] += tau * (0.0 - aeq->v_g[i]);
                                        changed = true;
-                               } else {
-                                       aeq->v_g[i] = 0.0;
                                }
                        } else {
                                if (!is_eq(aeq->v_g[i], *aeq->g[i], 0.05)) {
                                        aeq->v_g[i] += tau * (*aeq->g[i] - aeq->v_g[i]);
                                        changed = true;
-                               } else {
-                                       aeq->v_g[i] = *aeq->g[i];
                                }
                        }
 
@@ -417,8 +411,6 @@ run(LV2_Handle instance, uint32_t n_samples)
                                if (!is_eq(aeq->v_bw[i], *aeq->bw[i], 0.001)) {
                                        aeq->v_bw[i] += tau * (*aeq->bw[i] - aeq->v_bw[i]);
                                        changed = true;
-                               } else {
-                                       aeq->v_bw[i] = *aeq->bw[i];
                                }
                        }