[SCM] calf/master: min release and release coeff for multiband limiter

js at users.alioth.debian.org js at users.alioth.debian.org
Tue May 7 15:40:42 UTC 2013


The following commit has been merged in the master branch:
commit 2a843cdc9f37c9a63996d326e6d0c70cf440a972
Author: Markus Schmidt <schmidt at boomshop.net>
Date:   Thu Dec 1 13:00:07 2011 +0100

    min release and release coeff for multiband limiter

diff --git a/src/audio_fx.cpp b/src/audio_fx.cpp
index df69576..649f99b 100644
--- a/src/audio_fx.cpp
+++ b/src/audio_fx.cpp
@@ -558,6 +558,7 @@ void lookahead_limiter::activate()
     attack = 0.005;
     pos_next = -1;
     use_multi = false;
+    weight = 1.f;
 }
 
 void lookahead_limiter::set_multi(bool set) { use_multi = set; }
@@ -587,7 +588,6 @@ void lookahead_limiter::set_params(float l, float a, float r, float w, bool ar,
     auto_release = ar;
     debug = d;
     weight = w;
-    
     if( attack != attack__) {
         // rebuild buffer
         buffer_size = (int)srate * attack * channels; // buffer size attack rate multiplied by 2 channels
@@ -606,7 +606,7 @@ void lookahead_limiter::process(float &left, float &right, float * multi_buffer)
     
     // are we using multiband? get the multiband coefficient
     float multi_coeff = (use_multi) ? multi_buffer[pos] : 1.f;
-    if(debug) printf("%.5f\n", multi_coeff);
+    
     // input peak - impact in left or right channel?
     peak = fabs(left) > fabs(right) ? fabs(left) : fabs(right);
     
diff --git a/src/calf/metadata.h b/src/calf/metadata.h
index adcb154..cceead2 100644
--- a/src/calf/metadata.h
+++ b/src/calf/metadata.h
@@ -253,9 +253,10 @@ struct multibandlimiter_metadata: public plugin_metadata<multibandlimiter_metada
            param_sep0, param_sep1, param_sep2,
            param_q0, param_q1, param_q2,
            param_mode,
-           param_limit, param_attack, param_release,
+           param_limit, param_attack, param_release, param_minrel,
            param_att0, param_att1, param_att2, param_att3,
            param_weight0, param_weight1, param_weight2, param_weight3, 
+           param_release0, param_release1, param_release2, param_release3, 
            param_count };
     PLUGIN_NAME_ID_LABEL("multiband_limiter", "multibandlimiter", "Multiband Limiter")
 };
diff --git a/src/metadata.cpp b/src/metadata.cpp
index 7da140e..fdbd299 100644
--- a/src/metadata.cpp
+++ b/src/metadata.cpp
@@ -554,6 +554,7 @@ CALF_PORT_PROPS(multibandlimiter) = {
     { 1,      0.0625, 1,     0,  PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_DB, NULL, "limit", "Limit" },
     { 5,         0.1,        100,  0,  PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "attack", "Attack" },
     { 50,         1,        1000,  0,  PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "release", "Release" },
+    { 1,           0,           1,     0,  PF_BOOL | PF_CTL_TOGGLE, NULL, "minrel", "Min Release" },
     
     { 1,           0.125,     1,     0,  PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_CTLO_REVERSE | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL| PF_PROP_GRAPH, NULL, "att0", "Low" },
     { 1,           0.125,     1,     0,  PF_FLOAT | PF_SCALE_GAIN | PF_CTL_METER | PF_CTLO_LABEL | PF_CTLO_REVERSE | PF_UNIT_DB | PF_PROP_OUTPUT | PF_PROP_OPTIONAL| PF_PROP_GRAPH, NULL, "att1", "LMid" },
@@ -565,6 +566,11 @@ CALF_PORT_PROPS(multibandlimiter) = {
     { 0.f,      -1.f,         1.f,   0,  PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "weight2", "Weight 3" },
     { 0.f,      -1.f,         1.f,   0,  PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "weight3", "Weight 4" },
     
+    { 0.f,      -1.f,         1.f,   0,  PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "release0", "Release 1" },
+    { 0.f,      -1.f,         1.f,   0,  PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "release1", "Release 2" },
+    { 0.f,      -1.f,         1.f,   0,  PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "release2", "Release 3" },
+    { 0.f,      -1.f,         1.f,   0,  PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "release3", "Release 4" },
+    
     {}
 };
 
diff --git a/src/modules_limit.cpp b/src/modules_limit.cpp
index f826f05..daf031f 100644
--- a/src/modules_limit.cpp
+++ b/src/modules_limit.cpp
@@ -296,10 +296,19 @@ void multibandlimiter_audio_module::params_changed()
         q_old[2]    = *params[param_q2];
     }
     // set the params of all strips
-    strip[0].set_params(*params[param_limit], *params[param_attack], std::max(3 * (1.f / 30), *params[param_release]), *params[param_weight0] + 1, true, true);
-    strip[1].set_params(*params[param_limit], *params[param_attack], std::max(3 * (1.f / *params[param_freq0]), *params[param_release]), *params[param_weight1] + 1, true);
-    strip[2].set_params(*params[param_limit], *params[param_attack], std::max(3 * (1.f / *params[param_freq1]), *params[param_release]), *params[param_weight2] + 1, true);
-    strip[3].set_params(*params[param_limit], *params[param_attack], std::max(3 * (1.f / *params[param_freq2]), *params[param_release]), *params[param_weight3] + 1, true);
+    float rel;
+    rel = *params[param_release] * *params[param_release0]
+    rel = (*params[param_minrel] < 0.5) ? std::max(3 * (1.f / 30), rel);
+    strip[0].set_params(*params[param_limit], *params[param_attack], rel, pow(0.5, *params[param_weight0] * -1), true, true);
+    rel = *params[param_release] * *params[param_release0]
+    rel = (*params[param_minrel] < 0.5) ? std::max(3 * (1.f / *params[param_freq0]), rel);
+    strip[1].set_params(*params[param_limit], *params[param_attack], rel, pow(0.5, *params[param_weight1] * -1), true);
+    rel = *params[param_release] * *params[param_release0]
+    rel = (*params[param_minrel] < 0.5) ? std::max(3 * (1.f / *params[param_freq1]), rel);
+    strip[2].set_params(*params[param_limit], *params[param_attack], rel, pow(0.5, *params[param_weight2] * -1), true);
+    rel = *params[param_release] * *params[param_release0]
+    rel = (*params[param_minrel] < 0.5) ? std::max(3 * (1.f / *params[param_freq2]), rel);
+    strip[3].set_params(*params[param_limit], *params[param_attack], rel, pow(0.5, *params[param_weight3] * -1), true);
     
     // rebuild multiband buffer
     if( *params[param_attack] != attack_old) {

-- 
calf audio plugins packaging



More information about the pkg-multimedia-commits mailing list