[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