a-Delay: Add feedback control 0 to 90 percent
authorDamien Zammit <damien@zamaudio.com>
Tue, 19 Jul 2016 04:42:53 +0000 (14:42 +1000)
committerDamien Zammit <damien@zamaudio.com>
Tue, 19 Jul 2016 04:43:43 +0000 (14:43 +1000)
libs/plugins/a-delay.lv2/a-delay.c
libs/plugins/a-delay.lv2/a-delay.ttl.in

index 3f125d6f5b60cbde53381942063d1bf0ff4606f7..f9ddb2a23d96c692960493a130afc29153564f73 100644 (file)
@@ -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);
index 627f3e4ad92cd0e36e1135f5c53728f8ac17ce17..b321ec5d60577e521045c98543727a38119d6167 100644 (file)
     [
         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 ;
     ] ,
     [
         a lv2:InputPort, lv2:ControlPort ;
-        lv2:index 9 ;
+        lv2:index 10 ;
         lv2:name "Output Gain" ;
         lv2:symbol "gain" ;
         lv2:default 0.000000 ;
     ] ,
     [
         a lv2:OutputPort, lv2:ControlPort ;
-        lv2:index 10 ;
+        lv2:index 11 ;
         lv2:name "Delaytime" ;
         lv2:symbol "delaytime" ;
         lv2:default 0.000000 ;