[SCM] calf/master: tap function for vintage delay

js at users.alioth.debian.org js at users.alioth.debian.org
Tue May 7 15:41:10 UTC 2013


The following commit has been merged in the master branch:
commit 9f76ec2b0161cc102d0783bccb0ea4e06f3f48e2
Author: Markus Schmidt <schmidt at boomshop.net>
Date:   Thu Sep 13 17:53:22 2012 +0200

    tap function for vintage delay

diff --git a/gui/gui-vintagedelay.xml b/gui/gui-vintagedelay.xml
index c311d1b..dd65504 100644
--- a/gui/gui-vintagedelay.xml
+++ b/gui/gui-vintagedelay.xml
@@ -2,10 +2,17 @@
     <frame label="Delay time">
     	<vbox>
 		    <table rows="4" cols="2">
-		        <vbox attach-x="0" attach-y="0" attach-h="3" spacing="5" pad-x="20">
+		        <vbox attach-x="0" attach-y="0" attach-h="3" spacing="12" pad-x="10" pad-y="15">
+		            
 		            <label param="bpm" />
-		            <align attach-x="1" attach-y="0" scale-x="0"><knob param="bpm" size="5" /></align>
-		            <spin attach-x="2" attach-y="0" param="bpm" digits="2" fill="0" expand="0"/>
+		            <align><knob param="bpm" size="5" /></align>
+		            
+		            <hbox fill="0" expand="0" spacing="5">
+		                <spin param="bpm" digits="2"/>
+		                <button param="tap" fill="0" expand="0" />
+		                <led param="waiting" fill="0" expand="0" />
+		            </hbox>
+		            
 		        </vbox>
 		        <label attach-x="1" attach-y="0" param="subdiv" />
 		        <hscale attach-x="2" attach-y="0" param="subdiv" />
diff --git a/src/calf/metadata.h b/src/calf/metadata.h
index 589efc4..9adb932 100644
--- a/src/calf/metadata.h
+++ b/src/calf/metadata.h
@@ -73,7 +73,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, par_width, 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, par_tap, par_waiting, 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 5e68c76..7b7cfbe 100644
--- a/src/calf/modules.h
+++ b/src/calf/modules.h
@@ -79,6 +79,9 @@ public:
     void set_sample_rate(uint32_t sr);
     void calc_filters();
     uint32_t process(uint32_t offset, uint32_t numsamples, uint32_t inputs_mask, uint32_t outputs_mask);
+    
+    long _tap_avg;
+    long _tap_last;
 };
 
 template<typename FilterClass, typename Metadata>
diff --git a/src/metadata.cpp b/src/metadata.cpp
index 795ab83..b92fefe 100644
--- a/src/metadata.cpp
+++ b/src/metadata.cpp
@@ -166,6 +166,8 @@ CALF_PORT_PROPS(vintage_delay) = {
     { 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" },
+    { 0,         0,    1,     2, PF_BOOL | PF_CTL_BUTTON , NULL, "tap", "Tap" },
+    { 0,         0,    1,     0, PF_BOOL | PF_CTL_LED | PF_PROP_OUTPUT | PF_PROP_OPTIONAL, NULL, "waiting", "Waiting" },
     {}
 };
 
diff --git a/src/modules.cpp b/src/modules.cpp
index 8898f45..dd2b6fa 100644
--- a/src/modules.cpp
+++ b/src/modules.cpp
@@ -25,7 +25,7 @@
 #include <calf/giface.h>
 #include <calf/modules.h>
 #include <calf/modules_dev.h>
-
+#include <sys/time.h>
 
 using namespace dsp;
 using namespace calf_plugins;
@@ -113,10 +113,27 @@ vintage_delay_audio_module::vintage_delay_audio_module()
         buffers[0][i] = 0.f;
         buffers[1][i] = 0.f;
     }
+    _tap_avg = 0;
+    _tap_last = 0;
 }
 
 void vintage_delay_audio_module::params_changed()
 {
+    if(*params[par_tap] >= .5f) {
+        timeval tv;
+        gettimeofday(&tv, 0);
+        long _now = tv.tv_sec * 1000000 + tv.tv_usec;
+        if(_tap_last) {
+            if(_tap_avg)
+                _tap_avg = (_tap_avg * 3 + (_now - _tap_last)) / 4.f;
+            else
+                _tap_avg = _now - _tap_last;
+            *params[par_bpm] = 60.f / (float)(_tap_avg / 1000000.f);
+            printf("bpm: %.5f\n", *params[par_bpm]);
+        }
+        _tap_last = _now;
+        *params[par_tap] = 0.f;
+    }
     float unit = 60.0 * srate / (*params[par_bpm] * *params[par_divide]);
     deltime_l = dsp::fastf2i_drm(unit * *params[par_time_l]);
     deltime_r = dsp::fastf2i_drm(unit * *params[par_time_r]);
@@ -302,6 +319,22 @@ uint32_t vintage_delay_audio_module::process(uint32_t offset, uint32_t numsample
         biquad_left[1].sanitize();biquad_right[1].sanitize();
         
     }
+    
+    // get microseconds
+    if(_tap_last) {
+        timeval tv;
+        gettimeofday(&tv, 0);
+        long _now = tv.tv_sec * 1000 * 1000 + tv.tv_usec;
+        if(_now > _tap_last + 2000000) {
+            // user stopped tapping
+            _tap_avg = 0;
+            _tap_last = 0;
+        }
+        *params[par_waiting] = 1.f;
+    } else {
+        *params[par_waiting] = 0.f;
+    }
+    
     return ostate;
 }
 

-- 
calf audio plugins packaging



More information about the pkg-multimedia-commits mailing list