[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