summaryrefslogtreecommitdiff
path: root/libs/plugins
diff options
context:
space:
mode:
authorDamien Zammit <damien@zamaudio.com>2016-07-19 14:42:53 +1000
committerDamien Zammit <damien@zamaudio.com>2016-07-19 14:43:43 +1000
commitf8207524e9e014a21ce75f7907c607a4abf27bfe (patch)
tree0af7b18c70c5dde1d25dc33697706e7630ab6ed0 /libs/plugins
parent0b5f2c5d5877de5787a884229f445bc52182f328 (diff)
a-Delay: Add feedback control 0 to 90 percent
Diffstat (limited to 'libs/plugins')
-rw-r--r--libs/plugins/a-delay.lv2/a-delay.c13
-rw-r--r--libs/plugins/a-delay.lv2/a-delay.ttl.in14
2 files changed, 23 insertions, 4 deletions
diff --git a/libs/plugins/a-delay.lv2/a-delay.c b/libs/plugins/a-delay.lv2/a-delay.c
index 3f125d6f5b..f9ddb2a23d 100644
--- a/libs/plugins/a-delay.lv2/a-delay.c
+++ b/libs/plugins/a-delay.lv2/a-delay.c
@@ -42,6 +42,7 @@ typedef enum {
ADELAY_TIME,
ADELAY_DIVISOR,
ADELAY_WETDRY,
+ ADELAY_FEEDBACK,
ADELAY_LPF,
ADELAY_GAIN,
@@ -73,6 +74,7 @@ typedef struct {
float* time;
float* divisor;
float* wetdry;
+ float* feedback;
float* lpf;
float* gain;
@@ -81,7 +83,6 @@ typedef struct {
float srate;
float bpm;
float beatunit;
- int beatuniti;
int bpmvalid;
uint32_t posz;
@@ -91,6 +92,7 @@ typedef struct {
int next;
float fbstate;
float lpfold;
+ float feedbackold;
float divisorold;
float gainold;
float invertold;
@@ -187,6 +189,9 @@ connect_port(LV2_Handle instance,
case ADELAY_WETDRY:
adelay->wetdry = (float*)data;
break;
+ case ADELAY_FEEDBACK:
+ adelay->feedback = (float*)data;
+ break;
case ADELAY_LPF:
adelay->lpf = (float*)data;
break;
@@ -364,6 +369,9 @@ run(LV2_Handle instance, uint32_t n_samples)
if (*(adelay->time) != adelay->timeold) {
recalc = 1;
}
+ if (*(adelay->feedback) != adelay->feedbackold) {
+ recalc = 1;
+ }
if (*(adelay->divisor) != adelay->divisorold) {
recalc = 1;
}
@@ -387,7 +395,7 @@ run(LV2_Handle instance, uint32_t n_samples)
xfade = 0.f;
for (i = 0; i < n_samples; i++) {
in = input[i];
- adelay->z[adelay->posz] = in; // + feedb / 100. * fbstate;
+ adelay->z[adelay->posz] = in + *adelay->feedback / 100. * adelay->fbstate;
adelay->fbstate = 0.f;
int p = adelay->posz - adelay->tap[adelay->active]; // active line
if (p<0) p += MAX_DELAY;
@@ -406,6 +414,7 @@ run(LV2_Handle instance, uint32_t n_samples)
}
}
adelay->lpfold = *(adelay->lpf);
+ adelay->feedbackold = *(adelay->feedback);
adelay->divisorold = *(adelay->divisor);
adelay->gainold = *(adelay->gain);
adelay->invertold = *(adelay->inv);
diff --git a/libs/plugins/a-delay.lv2/a-delay.ttl.in b/libs/plugins/a-delay.lv2/a-delay.ttl.in
index 627f3e4ad9..b321ec5d60 100644
--- a/libs/plugins/a-delay.lv2/a-delay.ttl.in
+++ b/libs/plugins/a-delay.lv2/a-delay.ttl.in
@@ -110,6 +110,16 @@
[
a lv2:InputPort, lv2:ControlPort ;
lv2:index 8 ;
+ lv2:name "Feedback" ;
+ lv2:symbol "feedback" ;
+ lv2:default 20.000000 ;
+ lv2:minimum 0.000000 ;
+ lv2:maximum 90.000000 ;
+ unit:unit unit:pc ;
+ ] ,
+ [
+ a lv2:InputPort, lv2:ControlPort ;
+ lv2:index 9 ;
lv2:name "LPF" ;
lv2:symbol "lpf" ;
lv2:default 6000.000000 ;
@@ -120,7 +130,7 @@
] ,
[
a lv2:InputPort, lv2:ControlPort ;
- lv2:index 9 ;
+ lv2:index 10 ;
lv2:name "Output Gain" ;
lv2:symbol "gain" ;
lv2:default 0.000000 ;
@@ -130,7 +140,7 @@
] ,
[
a lv2:OutputPort, lv2:ControlPort ;
- lv2:index 10 ;
+ lv2:index 11 ;
lv2:name "Delaytime" ;
lv2:symbol "delaytime" ;
lv2:default 0.000000 ;