[SCM] calf/master: + RotarySpeaker: added acceleration/decceleration for "Off" speed + RotarySpeaker: fixed(?) panning bug, by changing filter characteristics

js at users.alioth.debian.org js at users.alioth.debian.org
Tue May 7 15:36:56 UTC 2013


The following commit has been merged in the master branch:
commit 9692760f74a0722697dcfaf3481b80b3abe8569b
Author: kfoltman <kfoltman at 78b06b96-2940-0410-b7fc-879d825d01d8>
Date:   Thu Jan 10 21:17:19 2008 +0000

    + RotarySpeaker: added acceleration/decceleration for "Off" speed
    + RotarySpeaker: fixed(?) panning bug, by changing filter characteristics
    
    
    
    git-svn-id: https://calf.svn.sourceforge.net/svnroot/calf/trunk@85 78b06b96-2940-0410-b7fc-879d825d01d8

diff --git a/src/calf/modules_dev.h b/src/calf/modules_dev.h
index 1bf821c..a9a8bb8 100644
--- a/src/calf/modules_dev.h
+++ b/src/calf/modules_dev.h
@@ -128,19 +128,21 @@ public:
     {
         vibrato_mode = fastf2i_drm(*params[par_speed]);
         if (!vibrato_mode)
-            return;
-        float speed = vibrato_mode - 1;
-        if (vibrato_mode == 3)
-            speed = hold_value;
-        if (vibrato_mode == 4)
-            speed = mwhl_value;
-        dspeed = (speed < 0.5f) ? 0 : 1;
+            dspeed = -1;
+        else {
+            float speed = vibrato_mode - 1;
+            if (vibrato_mode == 3)
+                speed = hold_value;
+            if (vibrato_mode == 4)
+                speed = mwhl_value;
+            dspeed = (speed < 0.5f) ? 0 : 1;
+        }
         update_speed();
     }
     void update_speed()
     {
-        float speed_h = 48 + (400-48) * aspeed_h;
-        float speed_l = 40 + (342-40) * aspeed_l;
+        float speed_h = aspeed_h >= 0 ? (48 + (400-48) * aspeed_h) : (48 * (1 + aspeed_h));
+        float speed_l = aspeed_l >= 0 ? 40 + (342-40) * aspeed_l : (40 * (1 + aspeed_l));
         dphase_h = speed_h / (60 * srate);
         dphase_l = speed_l / (60 * srate);
         cos_h = (int)(16384*16384*cos(dphase_h * 2 * PI));
@@ -158,74 +160,67 @@ public:
     inline bool update_speed(float &aspeed, float delta_decc, float delta_acc)
     {
         if (aspeed < dspeed) {
-            aspeed = min(1.f, aspeed + delta_acc);
+            aspeed = min(dspeed, aspeed + delta_acc);
             return true;
         }
         else if (aspeed > dspeed) 
         {
-            aspeed = max(0.f, aspeed - delta_decc);
+            aspeed = max(dspeed, aspeed - delta_decc);
             return true;
         }        
         return false;
     }
     uint32_t process(uint32_t offset, uint32_t nsamples, uint32_t inputs_mask, uint32_t outputs_mask)
     {
-        if (vibrato_mode)
-        {
-            long long int xl0 = (int)(10000*16384*cos(phase_l * 2 * PI));
-            long long int yl0 = (int)(10000*16384*sin(phase_l * 2 * PI));
-            long long int xh0 = (int)(10000*16384*cos(phase_h * 2 * PI));
-            long long int yh0 = (int)(10000*16384*sin(phase_h * 2 * PI));
-            // printf("xl=%d yl=%d dx=%d dy=%d\n", (int)(xl0>>14), (int)(yl0 >> 14), cos_l, sin_l);
-            for (unsigned int i = 0; i < nsamples; i++) {
-                float in_l = ins[0][i + offset], in_r = ins[1][i + offset];
-                float in_mono = 0.5f * (in_l + in_r);
-                
-                // int xl = (int)(10000 * cos(phase_l)), yl = (int)(10000 * sin(phase_l));
-                //int xh = (int)(10000 * cos(phase_h)), yh = (int)(10000 * sin(phase_h));
-                update_euler(xl0, yl0, cos_l, sin_l);
-                int xl = xl0 >> 14, yl = yl0 >> 14;
-                int xh = xh0 >> 14, yh = yh0 >> 14;
-                // printf("xl=%d yl=%d xl'=%f yl'=%f\n", xl, yl, 16384*cos((phase_l + dphase_l * i) * 2 * PI), 16384*sin((phase_l + dphase_l * i) * 2 * PI));
-                update_euler(xh0, yh0, cos_h, sin_h);
-                
-                float out_hi_l = delay.get_interp_1616(500000 + 40 * xh) + 0.0001 * xh * delay.get_interp_1616(500000 - 40 * yh) - delay.get_interp_1616(800000 - 60 * xh);
-                float out_hi_r = delay.get_interp_1616(550000 - 48 * yh) - 0.0001 * yh * delay.get_interp_1616(700000 + 46 * xh) - delay.get_interp_1616(1000000 + 76 * yh);
+        long long int xl0 = (int)(10000*16384*cos(phase_l * 2 * PI));
+        long long int yl0 = (int)(10000*16384*sin(phase_l * 2 * PI));
+        long long int xh0 = (int)(10000*16384*cos(phase_h * 2 * PI));
+        long long int yh0 = (int)(10000*16384*sin(phase_h * 2 * PI));
+        // printf("xl=%d yl=%d dx=%d dy=%d\n", (int)(xl0>>14), (int)(yl0 >> 14), cos_l, sin_l);
+        for (unsigned int i = 0; i < nsamples; i++) {
+            float in_l = ins[0][i + offset], in_r = ins[1][i + offset];
+            float in_mono = 0.5f * (in_l + in_r);
+            
+            // int xl = (int)(10000 * cos(phase_l)), yl = (int)(10000 * sin(phase_l));
+            //int xh = (int)(10000 * cos(phase_h)), yh = (int)(10000 * sin(phase_h));
+            int xl = xl0 >> 14, yl = yl0 >> 14;
+            int xh = xh0 >> 14, yh = yh0 >> 14;
+            update_euler(xl0, yl0, cos_l, sin_l);
+            // printf("xl=%d yl=%d xl'=%f yl'=%f\n", xl, yl, 16384*cos((phase_l + dphase_l * i) * 2 * PI), 16384*sin((phase_l + dphase_l * i) * 2 * PI));
+            update_euler(xh0, yh0, cos_h, sin_h);
+            
+            float out_hi_l = delay.get_interp_1616(500000 + 40 * xh) + 0.0001 * xh * delay.get_interp_1616(650000 - 40 * yh) - delay.get_interp_1616(800000 - 60 * xh);
+            float out_hi_r = delay.get_interp_1616(550000 - 48 * yh) - 0.0001 * yh * delay.get_interp_1616(700000 + 46 * xh) + delay.get_interp_1616(1000000 + 76 * yh);
 
-                float out_lo_l = 0.5f * in_mono + delay.get_interp_1616(400000 + 34 * xl) + delay.get_interp_1616(650000 - 18 * yl);
-                float out_lo_r = 0.5f * in_mono + delay.get_interp_1616(600000 - 50 * xl) - delay.get_interp_1616(900000 + 15 * yl);
-                
-                out_hi_l = crossover2l.process_d2(out_hi_l); // sanitize(out_hi_l);
-                out_hi_r = crossover2r.process_d2(out_hi_r); // sanitize(out_hi_r);
-                out_lo_l = crossover1l.process_d2(out_lo_l); // sanitize(out_lo_l);
-                out_lo_r = crossover1r.process_d2(out_lo_r); // sanitize(out_lo_r);
-                
-                float out_l = out_hi_l + out_lo_l;
-                float out_r = out_hi_r + out_lo_r;
-                
-                in_mono += 0.06f * (out_l + out_r);
-                sanitize(in_mono);
-                
-                outs[0][i + offset] = out_l;
-                outs[1][i + offset] = out_r;
-                delay.put(in_mono);
-            }
-            crossover1l.sanitize_d2();
-            crossover1r.sanitize_d2();
-            crossover2l.sanitize_d2();
-            crossover2r.sanitize_d2();
-            phase_l = fmod(phase_l + nsamples * dphase_l, 1.0);
-            phase_h = fmod(phase_h + nsamples * dphase_h, 1.0);
-            float delta = nsamples * 1.0 / srate;
-            bool u1 = update_speed(aspeed_l, delta * 0.2, delta * 0.14);
-            bool u2 = update_speed(aspeed_h, delta, delta * 0.5);
-            if (u1 || u2)
-                set_vibrato();
-        } else
-        {
-            memcpy(outs[0] + offset, ins[0] + offset, sizeof(float) * nsamples);
-            memcpy(outs[1] + offset, ins[1] + offset, sizeof(float) * nsamples);
+            float out_lo_l = 0.5f * in_mono - delay.get_interp_1616(400000 + 34 * xl) + delay.get_interp_1616(650000 - 18 * yl);
+            float out_lo_r = 0.5f * in_mono + delay.get_interp_1616(600000 - 50 * xl) - delay.get_interp_1616(900000 + 15 * yl);
+            
+            out_hi_l = crossover2l.process_d2(out_hi_l); // sanitize(out_hi_l);
+            out_hi_r = crossover2r.process_d2(out_hi_r); // sanitize(out_hi_r);
+            out_lo_l = crossover1l.process_d2(out_lo_l); // sanitize(out_lo_l);
+            out_lo_r = crossover1r.process_d2(out_lo_r); // sanitize(out_lo_r);
+            
+            float out_l = out_hi_l + out_lo_l;
+            float out_r = out_hi_r + out_lo_r;
+            
+            in_mono += 0.06f * (out_l + out_r);
+            sanitize(in_mono);
+            
+            outs[0][i + offset] = out_l * 0.5f;
+            outs[1][i + offset] = out_r * 0.5f;
+            delay.put(in_mono);
         }
+        crossover1l.sanitize_d2();
+        crossover1r.sanitize_d2();
+        crossover2l.sanitize_d2();
+        crossover2r.sanitize_d2();
+        phase_l = fmod(phase_l + nsamples * dphase_l, 1.0);
+        phase_h = fmod(phase_h + nsamples * dphase_h, 1.0);
+        float delta = nsamples * 1.0 / srate;
+        bool u1 = update_speed(aspeed_l, delta * 0.2, delta * 0.14);
+        bool u2 = update_speed(aspeed_h, delta, delta * 0.5);
+        if (u1 || u2)
+            set_vibrato();
         return outputs_mask;
     }
     virtual void control_change(int ctl, int val)

-- 
calf audio plugins packaging



More information about the pkg-multimedia-commits mailing list