[SCM] calf/master: + Wavetable: add a "proper" wavetable, interpolate the envelope values, tweak parameters a bit

js at users.alioth.debian.org js at users.alioth.debian.org
Tue May 7 15:39:24 UTC 2013


The following commit has been merged in the master branch:
commit ddcf1a3de1216b942b7a10401ed7cb619b0290fe
Author: Krzysztof Foltman <wdev at foltman.com>
Date:   Sat Feb 28 22:24:41 2009 +0000

    + Wavetable: add a "proper" wavetable, interpolate the envelope values, tweak parameters a bit

diff --git a/src/modules.cpp b/src/modules.cpp
index 49ad571..dc4f620 100644
--- a/src/modules.cpp
+++ b/src/modules.cpp
@@ -514,16 +514,16 @@ CALF_PLUGIN_INFO(wavetable) = { 0x8701, "Wavetable", "Calf Wavetable", "Krzyszto
 
 CALF_PORT_PROPS(wavetable) = {
     { 0,       0,  organ_enums::wave_count - 1, 0, PF_ENUM | PF_SCALE_LINEAR | PF_CTL_COMBO, organ_wave_names, "o1wave", "Osc1 Wave" },
-    { 0.5,     0,      1,  0, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "o1offset", "Osc1 Ctl"},
+    { 0.2,     -1,      1,  0, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "o1offset", "Osc1 Ctl"},
     { 0,        -48,   48, 48*2+1, PF_INT   | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_SEMITONES, NULL, "o1trans", "Osc1 Transpose" },
-    { 0,       -100,  100,      0, PF_INT   | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "o1detune", "Osc1 Detune" },
-    { 0.2,        0,   1,     0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "o1level", "Osc1 Level" },
+    { 6,       -100,  100,      0, PF_INT   | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "o1detune", "Osc1 Detune" },
+    { 0.1,      0,   1,     0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "o1level", "Osc1 Level" },
 
     { 0,       0,  organ_enums::wave_count - 1, 0, PF_ENUM | PF_SCALE_LINEAR | PF_CTL_COMBO, organ_wave_names, "o2wave", "Osc2 Wave" },
-    { 0.5,     0,      1,  0, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "o2offset", "Osc2 Ctl"},
+    { 0.4,     -1,      1,  0, PF_FLOAT | PF_SCALE_PERC | PF_CTL_KNOB | PF_UNIT_COEF, NULL, "o2offset", "Osc2 Ctl"},
     { 0,        -48,   48, 48*2+1, PF_INT   | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_SEMITONES, NULL, "o2trans", "Osc2 Transpose" },
-    { 0,       -100,  100,      0, PF_INT   | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "o2detune", "Osc2 Detune" },
-    { 0.2,        0,   1,     0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "o2level", "Osc2 Level" },
+    { -6,     -100,  100,      0, PF_INT   | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "o2detune", "Osc2 Detune" },
+    { 0.1,        0,   1,     0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "o2level", "Osc2 Level" },
 };
 
 ////////////////////////////////////////////////////////////////////////////
diff --git a/src/wavetable.cpp b/src/wavetable.cpp
index 6ad4a75..27f0b62 100644
--- a/src/wavetable.cpp
+++ b/src/wavetable.cpp
@@ -84,16 +84,20 @@ void wavetable_voice::render_block()
     for (int j = 0; j < OscCount; j++)
         oscs[j].set_freq(note_to_hz(note, *params[wavetable_metadata::par_o1transpose + j * spc] * 100+ *params[wavetable_metadata::par_o1detune + j * spc]), sample_rate);
     
+    float prev_value = envs[0].value;
+    for (int i = 0; i < EnvCount; i++)
+        envs[i].advance();    
+    float cur_value = envs[0].value;
+    
     for (int i = 0; i < BlockSize; i++) {        
         float value = 0.f;
         
+        float env = prev_value + (cur_value - prev_value) * i * (1.0 / BlockSize);
         for (int j = 0; j < OscCount; j++)
-            value += oscs[j].get(dsp::clip(fastf2i_drm((envs[0].value + *params[wavetable_metadata::par_o1offset + j * spc]) * 127.0), 0, 127)) * *params[wavetable_metadata::par_o1level + j * spc];
+            value += oscs[j].get(dsp::clip(fastf2i_drm((env + *params[wavetable_metadata::par_o1offset + j * spc]) * 127.0), 0, 127)) * *params[wavetable_metadata::par_o1level + j * spc];
         
-        output_buffer[i][0] = output_buffer[i][1] = value * envs[0].value * envs[0].value * value;
+        output_buffer[i][0] = output_buffer[i][1] = value * env * env;
     }
-    for (int i = 0; i < EnvCount; i++)
-        envs[i].advance();    
     if (envs[0].stopped())
         released = true;
 }
@@ -107,7 +111,12 @@ wavetable_audio_module::wavetable_audio_module()
     {
         for (int j = 0; j < 256; j++)
         {
-            tables[i][j] = i < j ? -32767 : 32767;
+            //tables[i][j] = i < j ? -32767 : 32767;
+            float ph = j * 2 * M_PI / 256;
+            float ii = i / 128.0;
+            float peak = (32 * ii * ii);
+            float rezo = lerp(sin(floor(peak) * ph), sin(floor(peak+1) * ph), peak - floor(peak));
+            tables[i][j] = 32767 * sin (ph + 2 * ii * sin(2 * ph) + 2 * ii * ii * sin(4 * ph) + ii * ii * rezo);
         }
     }
 }

-- 
calf audio plugins packaging



More information about the pkg-multimedia-commits mailing list