[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