[SCM] calf/master: + ChangeLog: update + Rotary Speaker: another attempt at making it useful

js at users.alioth.debian.org js at users.alioth.debian.org
Tue May 7 15:37:31 UTC 2013


The following commit has been merged in the master branch:
commit f03e0c3dbb55b402871a5f6db10900725401dffc
Author: kfoltman <kfoltman at 78b06b96-2940-0410-b7fc-879d825d01d8>
Date:   Mon Aug 11 21:48:03 2008 +0000

    + ChangeLog: update
    + Rotary Speaker: another attempt at making it useful
    
    
    git-svn-id: https://calf.svn.sourceforge.net/svnroot/calf/trunk@268 78b06b96-2940-0410-b7fc-879d825d01d8

diff --git a/ChangeLog b/ChangeLog
index 7e82781..f57f889 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,8 +1,9 @@
-Version 0.0.15 (unreleased) 
+Version 0.0.15
 
 + Organ: new percussive section, using 2-operator FM synthesis for
   monophonic or polyphonic percussive attack; added global transpose and
-  detune
+  detune; rearrangement of controls between sections
++ Rotary Speaker: another attempt at making it useful (thanks FishB8)
 + JACK host: eliminate deadlock on exit
 + GUI: bipolar knobs now have a "dead zone" (magnet) in the middle point
 + GUI: dragging a knob with SHIFT held allows for fine adjustments
diff --git a/src/calf/modules.h b/src/calf/modules.h
index d11b260..355d60b 100644
--- a/src/calf/modules.h
+++ b/src/calf/modules.h
@@ -573,7 +573,7 @@ public:
 class rotary_speaker_audio_module: public null_audio_module
 {
 public:
-    enum { par_speed, par_spacing, par_shift, par_moddepth, par_treblespeed, par_bassspeed, param_count };
+    enum { par_speed, par_spacing, par_shift, par_moddepth, par_treblespeed, par_bassspeed, par_micdistance, param_count };
     enum { in_count = 2, out_count = 2, support_midi = true, rt_capable = true };
     static const char *port_names[];
     float *ins[in_count]; 
@@ -697,6 +697,7 @@ public:
     {
         int shift = (int)(300000 * (*params[par_shift])), pdelta = (int)(300000 * (*params[par_spacing]));
         int md = (int)(100 * (*params[par_moddepth]));
+        float mix = 0.5 * (1.0 - *params[par_micdistance]);
         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);
@@ -705,11 +706,11 @@ public:
             int xh = pseudo_sine_scl(phase_h), yh = pseudo_sine_scl(phase_h + 0x40000000);
             // printf("%d %d %d\n", shift, pdelta, shift + pdelta + 20 * xl);
             
-            float out_hi_l = 0.5f * in_mono - delay.get_interp_1616(shift + md * xh) + 0.0001 * xh * delay.get_interp_1616(shift + md * 65536 + pdelta - md * yh) - delay.get_interp_1616(shift + md * 65536 + pdelta + pdelta - md * xh);
-            float out_hi_r = 0.5f * in_mono + delay.get_interp_1616(shift + md * 65536 - md * yh) - 0.0001 * yh * delay.get_interp_1616(shift + pdelta + md * xh) + delay.get_interp_1616(shift + pdelta + pdelta + md * yh);
+            float out_hi_l = in_mono - delay.get_interp_1616(shift + md * xh) + delay.get_interp_1616(shift + md * 65536 + pdelta - md * yh) - delay.get_interp_1616(shift + md * 65536 + pdelta + pdelta - md * xh);
+            float out_hi_r = in_mono + delay.get_interp_1616(shift + md * 65536 - md * yh) - delay.get_interp_1616(shift + pdelta + md * xh) + delay.get_interp_1616(shift + pdelta + pdelta + md * yh);
 
-            float out_lo_l = 0.5f * in_mono - delay.get_interp_1616(shift + md * xl) + delay.get_interp_1616(shift + md * 65536 + pdelta - md * yl);
-            float out_lo_r = 0.5f * in_mono + delay.get_interp_1616(shift + md * 65536 - md * xl) - delay.get_interp_1616(shift + pdelta + md * yl);
+            float out_lo_l = in_mono - delay.get_interp_1616(shift + md * xl) + delay.get_interp_1616(shift + md * 65536 + pdelta - md * yl);
+            float out_lo_r = in_mono + delay.get_interp_1616(shift + md * 65536 - md * xl) - delay.get_interp_1616(shift + pdelta + md * 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);
@@ -719,11 +720,11 @@ public:
             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);
+            float mic_l = out_l + mix * (out_r - out_l);
+            float mic_r = out_r + mix * (out_l - out_r);
             
-            outs[0][i + offset] = out_l * 0.5f;
-            outs[1][i + offset] = out_r * 0.5f;
+            outs[0][i + offset] = mic_l * 0.5f;
+            outs[1][i + offset] = mic_r * 0.5f;
             delay.put(in_mono);
             phase_l += dphase_l;
             phase_h += dphase_h;
diff --git a/src/modules.cpp b/src/modules.cpp
index 6486ebe..a9f8f6a 100644
--- a/src/modules.cpp
+++ b/src/modules.cpp
@@ -166,9 +166,10 @@ parameter_properties rotary_speaker_audio_module::param_props[] = {
     { 2,         0,  5, 1.01, PF_ENUM | PF_CTL_COMBO, rotary_speaker_speed_names, "vib_speed", "Speed Mode" },
     { 0.5,        0,    1,    0, PF_FLOAT | PF_CTL_KNOB | PF_SCALE_PERC, NULL, "spacing", "Tap Spacing" },
     { 0.5,        0,    1,    0, PF_FLOAT | PF_CTL_KNOB | PF_SCALE_PERC, NULL, "shift", "Tap Offset" },
-    { 0.15,       0,    1,    0, PF_FLOAT | PF_CTL_KNOB | PF_SCALE_PERC, NULL, "mod_depth", "Mod Depth" },
+    { 0.10,       0,    1,    0, PF_FLOAT | PF_CTL_KNOB | PF_SCALE_PERC, NULL, "mod_depth", "Mod Depth" },
     { 390,       10,   600,    0, PF_FLOAT | PF_CTL_KNOB | PF_SCALE_LOG | PF_UNIT_RPM, NULL, "treble_speed", "Treble Motor" },
     { 410,      10,   600,    0, PF_FLOAT | PF_CTL_KNOB | PF_SCALE_LOG | PF_UNIT_RPM, NULL, "bass_speed", "Bass Motor" },
+    { 0.3,        0,    1,  101, PF_FLOAT | PF_CTL_KNOB | PF_SCALE_PERC, NULL, "mic_distance", "Mic Distance" },
 };
 
 static synth::ladspa_info rotary_speaker_info = { 0x8483, "RotarySpeaker", "Calf Rotary Speaker", "Krzysztof Foltman", copyright, "SimulationPlugin" };

-- 
calf audio plugins packaging



More information about the pkg-multimedia-commits mailing list