[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