[SCM] calf/master: Add Width parameter to Vintage Delay.
js at users.alioth.debian.org
js at users.alioth.debian.org
Tue May 7 15:40:11 UTC 2013
The following commit has been merged in the master branch:
commit 067cff88f6490e4332f44aae9b297a9d18a01619
Author: Krzysztof Foltman <wdev at foltman.com>
Date: Sat May 8 11:28:49 2010 +0100
Add Width parameter to Vintage Delay.
diff --git a/gui/gui-vintagedelay.xml b/gui/gui-vintagedelay.xml
index 0bbc270..c311d1b 100644
--- a/gui/gui-vintagedelay.xml
+++ b/gui/gui-vintagedelay.xml
@@ -21,31 +21,36 @@
<frame label="Mixing">
<hbox>
- <vbox fill="0" expand="0" border="10" spacing="5">
- <label param="feedback" fill="0" expand="0" />
- <knob param="feedback" fill="0" expand="0" size="4"/>
- <value param="feedback" fill="0" expand="0" />
- </vbox>
-
<table expand="0" rows="2" cols="2">
- <vbox fill="0" attach-x="0" attach-y="1" fill-y="0">
- <label param="mix_mode" />
- <combo param="mix_mode" fill-y="0" />
- </vbox>
- <vbox fill="0" attach-x="1" attach-y="1" fill-y="0">
- <label param="medium" />
- <combo param="medium" fill-y="0" />
- </vbox>
- <vbox fill="0" attach-x="0" attach-y="0" pad-x="10">
+ <vbox fill="0" attach-x="0" attach-y="0" pad-x="10">
+ <label param="feedback" fill="0" expand="0" />
+ <knob param="feedback" fill="0" expand="0" />
+ <value param="feedback" fill="0" expand="0" />
+ </vbox>
+ <vbox fill="0" attach-x="1" attach-y="0" pad-x="10">
<label param="dry" />
<knob param="dry"/>
<value param="dry"/>
</vbox>
- <vbox fill="0" attach-x="1" attach-y="0" pad-x="10">
+ <vbox fill="0" attach-x="2" attach-y="0" pad-x="10">
<label param="amount" />
<knob param="amount"/>
<value param="amount"/>
</vbox>
+
+ <vbox fill="0" attach-x="0" attach-y="1" fill-y="0">
+ <label param="mix_mode" />
+ <combo param="mix_mode" fill-y="0" />
+ </vbox>
+ <vbox fill="0" attach-x="1" attach-y="1" >
+ <label param="width" fill="0" expand="0" />
+ <knob param="width" fill="0" expand="0" type="1" />
+ <value param="width" fill="0" expand="0" />
+ </vbox>
+ <vbox fill="0" attach-x="2" attach-y="1" fill-y="0">
+ <label param="medium" />
+ <combo param="medium" fill-y="0" />
+ </vbox>
</table>
</hbox>
</frame>
diff --git a/src/calf/metadata.h b/src/calf/metadata.h
index 63788fe..ecdf772 100644
--- a/src/calf/metadata.h
+++ b/src/calf/metadata.h
@@ -70,7 +70,7 @@ struct reverb_metadata: public plugin_metadata<reverb_metadata>
struct vintage_delay_metadata: public plugin_metadata<vintage_delay_metadata>
{
- enum { par_bpm, par_divide, par_time_l, par_time_r, par_feedback, par_amount, par_mixmode, par_medium, par_dryamount, param_count };
+ enum { par_bpm, par_divide, par_time_l, par_time_r, par_feedback, par_amount, par_mixmode, par_medium, par_dryamount, par_width, param_count };
enum { in_count = 2, out_count = 2, ins_optional = 0, outs_optional = 0, rt_capable = true, support_midi = false, require_midi = false };
PLUGIN_NAME_ID_LABEL("vintage_delay", "vintagedelay", "Vintage Delay")
};
diff --git a/src/calf/modules.h b/src/calf/modules.h
index eec49cd..d204218 100644
--- a/src/calf/modules.h
+++ b/src/calf/modules.h
@@ -65,7 +65,7 @@ public:
/// number of table entries written (value is only important when it is less than MAX_DELAY, which means that the buffer hasn't been totally filled yet)
int age;
- dsp::gain_smoothing amt_left, amt_right, fb_left, fb_right, dry;
+ dsp::gain_smoothing amt_left, amt_right, fb_left, fb_right, dry, chmix;
dsp::biquad_d2<float> biquad_left[2], biquad_right[2];
diff --git a/src/metadata.cpp b/src/metadata.cpp
index e87bbc7..4da39e3 100644
--- a/src/metadata.cpp
+++ b/src/metadata.cpp
@@ -161,6 +161,7 @@ CALF_PORT_PROPS(vintage_delay) = {
{ 1, 0, 3, 0, PF_ENUM | PF_CTL_COMBO, vintage_delay_mixmodes, "mix_mode", "Mix mode" },
{ 1, 0, 2, 0, PF_ENUM | PF_CTL_COMBO, vintage_delay_fbmodes, "medium", "Medium" },
{ 1.0, 0, 4, 0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "dry", "Dry Amount" },
+ { 1.0, -1, 1, 0, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB , NULL, "width", "Stereo Width" },
};
CALF_PLUGIN_INFO(vintage_delay) = { 0x8482, "VintageDelay", "Calf Vintage Delay", "Krzysztof Foltman", calf_plugins::calf_copyright_info, "DelayPlugin" };
diff --git a/src/modules.cpp b/src/modules.cpp
index 2df608a..fdfab11 100644
--- a/src/modules.cpp
+++ b/src/modules.cpp
@@ -150,6 +150,7 @@ void vintage_delay_audio_module::params_changed()
amt_right.set_inertia(*params[par_amount]);
break;
}
+ chmix.set_inertia((1 - *params[par_width]) * 0.5);
if (medium != old_medium)
calc_filters();
}
@@ -183,11 +184,11 @@ void vintage_delay_audio_module::calc_filters()
}
/// Single delay line with feedback at the same tap
-static inline void delayline_impl(int age, int deltime, float dry_value, const float &delayed_value, float &out, float &del, gain_smoothing &amt, gain_smoothing &fb, float dry)
+static inline void delayline_impl(int age, int deltime, float dry_value, const float &delayed_value, float &out, float &del, gain_smoothing &amt, gain_smoothing &fb)
{
// if the buffer hasn't been cleared yet (after activation), pretend we've read zeros
if (age <= deltime) {
- out = dry * dry_value;
+ out = 0;
amt.step();
fb.step();
}
@@ -195,28 +196,36 @@ static inline void delayline_impl(int age, int deltime, float dry_value, const f
{
float delayed = delayed_value; // avoid dereferencing the pointer in 'then' branch of the if()
dsp::sanitize(delayed);
- out = dry * dry_value + delayed * amt.get();
+ out = delayed * amt.get();
del = dry_value + delayed * fb.get();
}
}
/// Single delay line with tap output
-static inline void delayline2_impl(int age, int deltime, float dry_value, const float &delayed_value, const float &delayed_value_for_fb, float &out, float &del, gain_smoothing &amt, gain_smoothing &fb, float dry)
+static inline void delayline2_impl(int age, int deltime, float dry_value, const float &delayed_value, const float &delayed_value_for_fb, float &out, float &del, gain_smoothing &amt, gain_smoothing &fb)
{
if (age <= deltime) {
- out = dry * dry_value;
+ out = 0;
amt.step();
fb.step();
}
else
{
- out = dry * dry_value + delayed_value * amt.get();
+ out = delayed_value * amt.get();
del = dry_value + delayed_value_for_fb * fb.get();
dsp::sanitize(out);
dsp::sanitize(del);
}
}
+static inline void delay_mix(float dry_left, float dry_right, float &out_left, float &out_right, float dry, float chmix)
+{
+ float tmp_left = lerp(out_left, out_right, chmix);
+ float tmp_right = lerp(out_right, out_left, chmix);
+ out_left = dry_left * dry + tmp_left;
+ out_right = dry_right * dry + tmp_right;
+}
+
uint32_t vintage_delay_audio_module::process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask)
{
uint32_t ostate = 3; // XXXKF optimize!
@@ -232,9 +241,9 @@ uint32_t vintage_delay_audio_module::process(uint32_t offset, uint32_t numsample
int v = mixmode == MIXMODE_PINGPONG ? 1 : 0;
for(uint32_t i = offset; i < end; i++)
{
- float cur_dry = dry.get();
- delayline_impl(age, deltime_l, ins[0][i], buffers[v][(bufptr - deltime_l) & ADDR_MASK], out_left, del_left, amt_left, fb_left, cur_dry);
- delayline_impl(age, deltime_r, ins[1][i], buffers[1 - v][(bufptr - deltime_r) & ADDR_MASK], out_right, del_right, amt_right, fb_right, cur_dry);
+ delayline_impl(age, deltime_l, ins[0][i], buffers[v][(bufptr - deltime_l) & ADDR_MASK], out_left, del_left, amt_left, fb_left);
+ delayline_impl(age, deltime_r, ins[1][i], buffers[1 - v][(bufptr - deltime_r) & ADDR_MASK], out_right, del_right, amt_right, fb_right);
+ delay_mix(ins[0][i], ins[1][i], out_left, out_right, dry.get(), chmix.get());
age++;
outs[0][i] = out_left; outs[1][i] = out_right; buffers[0][bufptr] = del_left; buffers[1][bufptr] = del_right;
@@ -253,9 +262,9 @@ uint32_t vintage_delay_audio_module::process(uint32_t offset, uint32_t numsample
for(uint32_t i = offset; i < end; i++)
{
- float cur_dry = dry.get();
- delayline2_impl(age, deltime_l, ins[0][i], buffers[v][(bufptr - deltime_l_corr) & ADDR_MASK], buffers[v][(bufptr - deltime_fb) & ADDR_MASK], out_left, del_left, amt_left, fb_left, cur_dry);
- delayline2_impl(age, deltime_r, ins[1][i], buffers[1 - v][(bufptr - deltime_r_corr) & ADDR_MASK], buffers[1-v][(bufptr - deltime_fb) & ADDR_MASK], out_right, del_right, amt_right, fb_right, cur_dry);
+ delayline2_impl(age, deltime_l, ins[0][i], buffers[v][(bufptr - deltime_l_corr) & ADDR_MASK], buffers[v][(bufptr - deltime_fb) & ADDR_MASK], out_left, del_left, amt_left, fb_left);
+ delayline2_impl(age, deltime_r, ins[1][i], buffers[1 - v][(bufptr - deltime_r_corr) & ADDR_MASK], buffers[1-v][(bufptr - deltime_fb) & ADDR_MASK], out_right, del_right, amt_right, fb_right);
+ delay_mix(ins[0][i], ins[1][i], out_left, out_right, dry.get(), chmix.get());
age++;
outs[0][i] = out_left; outs[1][i] = out_right; buffers[0][bufptr] = del_left; buffers[1][bufptr] = del_right;
--
calf audio plugins packaging
More information about the pkg-multimedia-commits
mailing list