[SCM] calf/master: More limiter stuff

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 a99e188a832cdb88f0a8c5714b76e48c3da891a9
Author: Markus Schmidt <schmidt at boomshop.net>
Date:   Thu Dec 1 23:41:37 2011 +0100

    More limiter stuff

diff --git a/gui/gui-multibandlimiter.xml b/gui/gui-multibandlimiter.xml
index 389c90a..5a166f3 100644
--- a/gui/gui-multibandlimiter.xml
+++ b/gui/gui-multibandlimiter.xml
@@ -41,22 +41,16 @@
     </table>
     
     <hbox attach-x="0" attach-y="1" expand-y="1" expand-x="1" spacing="5">
-        <frame label="Limit" expand="0" fill="1">
-            <vbox>
-                <vbox>
-                    <knob param="limit" size="5" type="2" />
-                    <value param="limit" />
-                </vbox>
-                <vbox>
-                    <label param="release" />
-                    <knob param="release" />
-                    <value param="release" />
-                </vbox>
-            </vbox>
-        </frame>
         
         <frame label="X-Over" expand="0" fill="1">
             <vbox>
+                <if cond="directlink">
+                    <line-graph refresh="1" width="160" height="90" param="limit" expand="0" fill="1"/>
+                </if>
+                <hbox>
+                    <label param="mode" />
+                    <combo param="mode" />
+                </hbox>
                 <hbox>
                     <table rows="3" cols="2" spacing="0" border="0" expand="0" fill="0">
                         <knob param="freq0" attach-x="0" attach-y="0" border="0" expand="0" fill="0" expand-x="0" fill-x="0" />
@@ -110,99 +104,135 @@
                         <value param="q2" attach-x="1" attach-y="2" border="0" expand="0" fill="0" expand-y="0" fill-y="0" expand-x="0" fill-x="0" width="2" align-x="0.0" />
                     </table>
                 </hbox>
+            </vbox>
+        </frame>
+        
+        <frame label="Limit" expand="0" fill="1">
+            <vbox spacing="20">
+                <vbox>
+                    <knob param="limit" size="5" type="2" />
+                    <value param="limit" />
+                </vbox>
                 <hbox>
-                    <label param="mode" />
-                    <combo param="mode" />
+                    <vbox>
+                        <label param="attack" />
+                        <knob param="attack" />
+                        <value param="attack" />
+                    </vbox>
+                    <vbox>
+                        <label param="minrel" />
+                        <toggle param="minrel" />
+                        <label/>
+                    </vbox>
+                    <vbox>
+                        <label param="release" />
+                        <knob param="release" />
+                        <value param="release" />
+                    </vbox>
                 </hbox>
-                <if cond="directlink">
-                    <line-graph refresh="1" width="220" height="90" param="limit" expand="0" fill="1"/>
-                </if>
             </vbox>
         </frame>
+        
         <vbox>
             <frame label="Low Band">
             
                 <hbox>
                     <hbox>
-                        <vbox expand="0" fill="0" spacing="3">
-                            <label/>
-                            <label param="weight0" align-x="1.0" />
-                            <value param="weight0" align-x="1.0" />
+                        <knob param="release0" size="2" type="1" />
+                        <vbox expand="1" spacing="3">
+                            <label param="release0" align-x="0.0" />
+                            <value param="release0" align-x="0.0" />
+                            <value param="effrelease0" align-x="0.0" />
                         </vbox>
-                        <knob param="weight0" size="2" type="1" />
                     </hbox>
-                    <vumeter param="att0" mode="2" hold="1.5" falloff="2.5" width="100" height="28" position="1" />
+                    <vbox>
+                        <label text="Low Attenuation"/>
+                        <vumeter param="att0" mode="2" hold="1.5" falloff="2.5" width="100" height="28" position="1" />
+                    </vbox>
                     <hbox>
-                        <knob param="release0" size="2" type="1" />
-                        <vbox expand="0" fill="0" spacing="3">
+                        <vbox expand="1" spacing="3">
+                            <label param="weight0" align-x="1.0" />
+                            <value param="weight0" align-x="1.0" />
                             <label/>
-                            <label param="release0" align-x="0.0" />
-                            <value param="release0" align-x="0.0" />
                         </vbox>
+                        <knob param="weight0" size="2" type="1" />
                     </hbox>
+                    
                 </hbox>
             </frame>
             <frame label="LowMid Band">
                 <hbox>
                     <hbox>
-                        <vbox expand="0" fill="0" spacing="3">
-                            <label/>
-                            <label param="weight1" align-x="1.0" />
-                            <value param="weight1" align-x="1.0" />
+                        <knob param="release1" size="2" type="1" />
+                        <vbox expand="1" spacing="3">
+                            <label param="release1" align-x="0.0" />
+                            <value param="release1" align-x="0.0" />
+                            <value param="effrelease1" align-x="0.0" />
                         </vbox>
-                        <knob param="weight1" size="2" type="1" />
                     </hbox>
-                    <vumeter param="att1" mode="2" hold="1.5" falloff="2.5" width="100" height="28" position="1" />
+                    <vbox>
+                        <label text="LowMid Attenuation"/>
+                        <vumeter param="att1" mode="2" hold="1.5" falloff="2.5" width="100" height="28" position="1" />
+                    </vbox>
                     <hbox>
-                        <knob param="release1" size="2" type="1" />
-                        <vbox expand="0" fill="0" spacing="3">
+                        <vbox expand="1" spacing="3">
+                            <label param="weight1" align-x="1.0" />
+                            <value param="weight1" align-x="1.0" />
                             <label/>
-                            <label param="release1" align-x="0.0" />
-                            <value param="release1" align-x="0.0" />
                         </vbox>
+                        <knob param="weight1" size="2" type="1" />
                     </hbox>
+                    
                 </hbox>
             </frame>
             <frame label="HiMid Band">
                 <hbox>
                     <hbox>
-                        <vbox expand="0" fill="0" spacing="3">
-                            <label/>
-                            <label param="weight2" align-x="1.0" />
-                            <value param="weight2" align-x="1.0" />
+                        <knob param="release2" size="2" type="1" />
+                        <vbox expand="1" spacing="3">
+                            <label param="release2" align-x="0.0" />
+                            <value param="release2" align-x="0.0" />
+                            <value param="effrelease2" align-x="0.0" />
                         </vbox>
-                        <knob param="weight2" size="2" type="1" />
                     </hbox>
-                    <vumeter param="att2" mode="2" hold="1.5" falloff="2.5" width="100" height="28" position="1" />
+                    <vbox>
+                        <label text="HiMid Attenuation"/>
+                        <vumeter param="att2" mode="2" hold="1.5" falloff="2.5" width="100" height="28" position="1" />
+                    </vbox>
                     <hbox>
-                        <knob param="release2" size="2" type="1" />
-                        <vbox expand="0" fill="0" spacing="3">
+                        <vbox expand="1" spacing="3">
+                            <label param="weight2" align-x="1.0" />
+                            <value param="weight2" align-x="1.0" />
                             <label/>
-                            <label param="release2" align-x="0.0" />
-                            <value param="release2" align-x="0.0" />
                         </vbox>
+                        <knob param="weight2" size="2" type="1" />
                     </hbox>
+                    
                 </hbox>
             </frame>
             <frame label="High Band">
                 <hbox>
                     <hbox>
-                        <vbox expand="0" fill="0" spacing="3">
-                            <label/>
-                            <label param="weight3" align-x="1.0" />
-                            <value param="weight3" align-x="1.0" />
+                        <knob param="release3" size="2" type="1" />
+                        <vbox expand="1" spacing="3">
+                            <label param="release3" align-x="0.0" />
+                            <value param="release3" align-x="0.0" />
+                            <value param="effrelease3" align-x="0.0" />
                         </vbox>
-                        <knob param="weight3" size="2" type="1" />
                     </hbox>
-                    <vumeter param="att3" mode="2" hold="1.5" falloff="2.5" width="100" height="28" position="1" />
+                    <vbox>
+                        <label text="High Attenuation"/>
+                        <vumeter param="att3" mode="2" hold="1.5" falloff="2.5" width="100" height="28" position="1" />
+                    </vbox>
                     <hbox>
-                        <knob param="release3" size="2" type="1" />
-                        <vbox expand="0" fill="0" spacing="3">
+                        <vbox expand="1" spacing="3">
+                            <label param="weight3" align-x="1.0" />
+                            <value param="weight3" align-x="1.0" />
                             <label/>
-                            <label param="release3" align-x="0.0" />
-                            <value param="release3" align-x="0.0" />
                         </vbox>
+                        <knob param="weight3" size="2" type="1" />
                     </hbox>
+                    
                 </hbox>
             </frame>
         </vbox>
diff --git a/src/audio_fx.cpp b/src/audio_fx.cpp
index 7fcdf8e..f41d605 100644
--- a/src/audio_fx.cpp
+++ b/src/audio_fx.cpp
@@ -588,6 +588,7 @@ void lookahead_limiter::set_params(float l, float a, float r, float w, bool ar,
     auto_release = ar;
     debug = d;
     weight = w;
+    //if(debug) printf("%.5f\n", release);
     if( attack != attack__) {
         // rebuild buffer
         buffer_size = (int)srate * attack * channels; // buffer size attack rate multiplied by 2 channels
@@ -606,7 +607,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("%03d: %.5f\n", pos, multi_coeff);
+    //if(debug) printf("%03d: %.5f\n", pos,  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 cceead2..07e3053 100644
--- a/src/calf/metadata.h
+++ b/src/calf/metadata.h
@@ -256,7 +256,8 @@ struct multibandlimiter_metadata: public plugin_metadata<multibandlimiter_metada
            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_release0, param_release1, param_release2, param_release3,
+           param_effrelease0, param_effrelease1, param_effrelease2, param_effrelease3, 
            param_count };
     PLUGIN_NAME_ID_LABEL("multiband_limiter", "multibandlimiter", "Multiband Limiter")
 };
diff --git a/src/metadata.cpp b/src/metadata.cpp
index 717271c..1f461a1 100644
--- a/src/metadata.cpp
+++ b/src/metadata.cpp
@@ -509,7 +509,7 @@ CALF_PORT_PROPS(limiter) = {
     { 0,           0,           1,     0,  PF_FLOAT | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "clip_outR", "0dB-OutR" },
     
     { 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" },
+    { 5,         0.1,        100,  0,  PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "attack", "Lookahead" },
     { 50,         1,        1000,  0,  PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "release", "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, "att", "Attenuation" },
@@ -552,9 +552,9 @@ CALF_PORT_PROPS(multibandlimiter) = {
     { 1,      0,  1,    0, PF_ENUM | PF_CTL_COMBO, multibandlimiter_filter_choices, "mode", "Filter Mode" },
     
     { 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" },
-    { 40,         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" },
+    { 4,         0.1,        100,  0,  PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "attack", "Lookahead" },
+    { 30,         1,        1000,  0,  PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "release", "Release" },
+    { 0,           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" },
@@ -571,12 +571,15 @@ CALF_PORT_PROPS(multibandlimiter) = {
     { -0.1f,      -1.f,         1.f,   0,  PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "release2", "Release 3" },
     { -0.2f,      -1.f,         1.f,   0,  PF_FLOAT | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_GRAPH, NULL, "release3", "Release 4" },
     
+    { 1,         0.f,        1000,  0,  PF_FLOAT | PF_UNIT_MSEC | PF_PROP_OUTPUT, NULL, "effrelease0", "Effectively Release 1" },
+    { 1,         0.f,        1000,  0,  PF_FLOAT | PF_UNIT_MSEC | PF_PROP_OUTPUT, NULL, "effrelease1", "Effectively Release 2" },
+    { 1,         0.f,        1000,  0,  PF_FLOAT | PF_UNIT_MSEC | PF_PROP_OUTPUT, NULL, "effrelease2", "Effectively Release 3" },
+    { 1,         0.f,        1000,  0,  PF_FLOAT | PF_UNIT_MSEC | PF_PROP_OUTPUT, NULL, "effrelease3", "Effectively Release 4" },
     {}
 };
 
 CALF_PLUGIN_INFO(multibandlimiter) = { 0x8520, "Multibandlimiter", "Calf Multiband Limiter", "Markus Schmidt / Christian Holschuh", calf_plugins::calf_copyright_info, "LimiterPlugin" };
 
-
 ////////////////////////////////////////////////////////////////////////////
 // A few macros to make 
 
diff --git a/src/modules_limit.cpp b/src/modules_limit.cpp
index 43d2ab7..030b306 100644
--- a/src/modules_limit.cpp
+++ b/src/modules_limit.cpp
@@ -298,17 +298,21 @@ void multibandlimiter_audio_module::params_changed()
     // set the params of all strips
     float rel;
     rel = *params[param_release] *  pow(0.25, *params[param_release0] * -1);
-    rel = (*params[param_minrel] > 0.5) ? std::max(3 * (1.f / 30), rel) : rel;
+    rel = (*params[param_minrel] > 0.5) ? std::max(2500 * (1.f / 30), rel) : rel;
     strip[0].set_params(*params[param_limit], *params[param_attack], rel, pow(0.25, *params[param_weight0] * -1), true, true);
-    rel = *params[param_release] *  pow(0.25, *params[param_release0] * -1);
-    rel = (*params[param_minrel] > 0.5) ? std::max(3 * (1.f / *params[param_freq0]), rel) : rel;
+    *params[param_effrelease0] = rel;
+    rel = *params[param_release] *  pow(0.25, *params[param_release1] * -1);
+    rel = (*params[param_minrel] > 0.5) ? std::max(2500 * (1.f / *params[param_freq0]), rel) : rel;
     strip[1].set_params(*params[param_limit], *params[param_attack], rel, pow(0.25, *params[param_weight1] * -1), true);
-    rel = *params[param_release] *  pow(0.25, *params[param_release0] * -1);
-    rel = (*params[param_minrel] > 0.5) ? std::max(3 * (1.f / *params[param_freq1]), rel) : rel;
+    *params[param_effrelease1] = rel;
+    rel = *params[param_release] *  pow(0.25, *params[param_release2] * -1);
+    rel = (*params[param_minrel] > 0.5) ? std::max(2500 * (1.f / *params[param_freq1]), rel) : rel;
     strip[2].set_params(*params[param_limit], *params[param_attack], rel, pow(0.25, *params[param_weight2] * -1), true);
-    rel = *params[param_release] *  pow(0.25, *params[param_release0] * -1);
-    rel = (*params[param_minrel] > 0.5) ? std::max(3 * (1.f / *params[param_freq2]), rel) : rel;
+    *params[param_effrelease2] = rel;
+    rel = *params[param_release] *  pow(0.25, *params[param_release3] * -1);
+    rel = (*params[param_minrel] > 0.5) ? std::max(2500 * (1.f / *params[param_freq2]), rel) : rel;
     strip[3].set_params(*params[param_limit], *params[param_attack], rel, pow(0.25, *params[param_weight3] * -1), true);
+    *params[param_effrelease3] = rel;
     
     // rebuild multiband buffer
     if( *params[param_attack] != attack_old) {
@@ -433,16 +437,16 @@ uint32_t multibandlimiter_audio_module::process(uint32_t offset, uint32_t numsam
                 float k;
                 switch (i) {
                     case 0:
-                        k = *params[param_weight0] + 1;
+                        k = pow(0.25, *params[param_weight0] * -1);
                         break;
                     case 1:
-                        k = *params[param_weight1] + 1;
+                        k = pow(0.25, *params[param_weight1] * -1);
                         break;
                     case 2:
-                        k = *params[param_weight2] + 1;
+                        k = pow(0.25, *params[param_weight2] * -1);
                         break;
                     case 3:
-                        k = *params[param_weight3] + 1;
+                        k = pow(0.25, *params[param_weight3] * -1);
                         break;
                 }
                             
@@ -452,7 +456,7 @@ uint32_t multibandlimiter_audio_module::process(uint32_t offset, uint32_t numsam
             
             // write multiband coefficient to buffer
             buffer[pos] = *params[param_limit] / std::min(fabs(sum_left), fabs(sum_right));
-            //printf("%03d: %.5f\n", pos, fabs(sum_left));
+            //printf("%03d: %.5f\n", pos, buffer[pos]);
             for (int i = 0; i < strips; i++) {
                 // process gain reduction
                 strip[i].process(_tmpL[i], _tmpR[i], buffer);

-- 
calf audio plugins packaging



More information about the pkg-multimedia-commits mailing list