[SCM] calf/master: + Wavetable: buncha new wavetables, add a bit of second envelope

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


The following commit has been merged in the master branch:
commit c013e793150cbb7026e87d329ce700e386b61876
Author: Krzysztof Foltman <wdev at foltman.com>
Date:   Mon Mar 2 20:50:31 2009 +0000

    + Wavetable: buncha new wavetables, add a bit of second envelope

diff --git a/src/calf/metadata.h b/src/calf/metadata.h
index 1ccf88a..984cba8 100644
--- a/src/calf/metadata.h
+++ b/src/calf/metadata.h
@@ -222,6 +222,11 @@ struct wavetable_metadata: public plugin_metadata<wavetable_metadata>
         wt_bell,
         wt_blah,
         wt_pluck,
+        wt_stretch,
+        wt_stretch2,
+        wt_hardsync,
+        wt_hardsync2,
+        wt_softsync,
         wt_count
     };
     enum { 
diff --git a/src/modules.cpp b/src/modules.cpp
index 0041b65..2b96037 100644
--- a/src/modules.cpp
+++ b/src/modules.cpp
@@ -512,6 +512,11 @@ const char *wavetable_names[] = {
     "Bell",
     "Blah",
     "Pluck",
+    "Stretch",
+    "Stretch 2",
+    "Hard Sync",
+    "Hard Sync 2",
+    "Soft Sync",
 };
 
 const char *wavetable_init_soundfont = "";
@@ -523,7 +528,7 @@ CALF_PORT_NAMES(wavetable) = {
 CALF_PLUGIN_INFO(wavetable) = { 0x8701, "Wavetable", "Calf Wavetable", "Krzysztof Foltman", calf_plugins::calf_copyright_info, "SynthesizerPlugin" };
 
 CALF_PORT_PROPS(wavetable) = {
-    { 6,       0,  wavetable_metadata::wt_count - 1, 0, PF_ENUM | PF_SCALE_LINEAR | PF_CTL_COMBO, wavetable_names, "o1wave", "Osc1 Wave" },
+    { wavetable_metadata::wt_count - 1,       0,  wavetable_metadata::wt_count - 1, 0, PF_ENUM | PF_SCALE_LINEAR | PF_CTL_COMBO, wavetable_names, "o1wave", "Osc1 Wave" },
     { 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" },
     { 6,       -100,  100,      0, PF_INT   | PF_SCALE_LINEAR | PF_CTL_KNOB | PF_UNIT_CENTS, NULL, "o1detune", "Osc1 Detune" },
diff --git a/src/wavetable.cpp b/src/wavetable.cpp
index d69817b..40dda71 100644
--- a/src/wavetable.cpp
+++ b/src/wavetable.cpp
@@ -94,10 +94,10 @@ void wavetable_voice::render_block()
         envs[j].set(*params[md::par_eg1attack + o] * s, *params[md::par_eg1decay + o] * s, *params[md::par_eg1sustain + o], *params[md::par_eg1release + o] * s, sample_rate / BlockSize); 
     }
     
-    float prev_value = envs[0].value;
+    float prev_value = envs[0].value + envs[1].value * 0.2;
     for (int i = 0; i < EnvCount; i++)
         envs[i].advance();    
-    float cur_value = envs[0].value;
+    float cur_value = envs[0].value + envs[1].value * 0.2;
     
     for (int i = 0; i < BlockSize; i++) {        
         float value = 0.f;
@@ -115,6 +115,13 @@ void wavetable_voice::render_block()
 
 /////////////////////////////////////////////////////////////////////////////////////////////////////
 
+static inline float sincl(float x, float clip)
+{
+    if (fabs(x) > clip)
+        return 0;
+    return sin(M_PI * x);
+}
+
 wavetable_audio_module::wavetable_audio_module()
 {
     panic_flag = false;
@@ -122,7 +129,6 @@ wavetable_audio_module::wavetable_audio_module()
     {
         for (int j = 0; j < 256; j++)
         {
-            //tables[i][j] = i < j ? -32767 : 32767;
             float ph = j * 2 * M_PI / 256;
             float ii = (i & ~3) / 128.0;
             float ii2 = ((i & ~3) + 4) / 128.0;
@@ -138,7 +144,6 @@ wavetable_audio_module::wavetable_audio_module()
     {
         for (int j = 0; j < 256; j++)
         {
-            //tables[i][j] = i < j ? -32767 : 32767;
             float ph = j * 2 * M_PI / 256;
             float ii = (i & ~3) / 128.0;
             float ii2 = ((i & ~3) + 4) / 128.0;
@@ -154,7 +159,6 @@ wavetable_audio_module::wavetable_audio_module()
     {
         for (int j = 0; j < 256; j++)
         {
-            //tables[i][j] = i < j ? -32767 : 32767;
             float ph = j * 2 * M_PI / 256;
             float ii = (i & ~3) / 128.0;
             float ii2 = ((i & ~3) + 4) / 128.0;
@@ -171,10 +175,8 @@ wavetable_audio_module::wavetable_audio_module()
     {
         for (int j = 0; j < 256; j++)
         {
-            //tables[i][j] = i < j ? -32767 : 32767;
             float ph = j * 2 * M_PI / 256;
             float ii = i / 128.0;
-            //float v = (sin(ph) + ii * sin(ph + 2 * ii * sin(ph)) + ii * ii * sin(ph + 3 * ii * ii * sin(3 * ph)) + ii * ii * ii * sin(ph + 5 * ii * ii * ii * sin(5 * ph))) / 4;
             float v = (sin(ph) + ii * sin(ph + 2 * ii * sin(ph)) + ii * ii * sin(ph + 6 * ii * ii * sin(6 * ph)) + ii * ii * ii * ii * sin(ph + 11 * ii * ii * ii * ii * sin(11 * ph))) / 4;
             tables[wavetable_metadata::wt_metal][i][j] = 32767 * v;
         }
@@ -183,10 +185,8 @@ wavetable_audio_module::wavetable_audio_module()
     {
         for (int j = 0; j < 256; j++)
         {
-            //tables[i][j] = i < j ? -32767 : 32767;
             float ph = j * 2 * M_PI / 256;
             float ii = i / 128.0;
-            //float v = (sin(ph) + ii * sin(ph + 2 * ii * sin(ph)) + ii * ii * sin(ph + 3 * ii * ii * sin(3 * ph)) + ii * ii * ii * sin(ph + 5 * ii * ii * ii * sin(5 * ph))) / 4;
             float v = (sin(ph) + ii * sin(ph - 3 * ii * sin(ph)) + ii * ii * sin(5 * ph - 5 * ii * ii * ii * ii * sin(11 * ph))) / 3;
             tables[wavetable_metadata::wt_bell][i][j] = 32767 * v;
         }
@@ -195,7 +195,6 @@ wavetable_audio_module::wavetable_audio_module()
     {
         for (int j = 0; j < 256; j++)
         {
-            //tables[i][j] = i < j ? -32767 : 32767;
             float ph = j * 2 * M_PI / 256;
             float ii = i / 128.0;
             //float v = (sin(ph) + ii * sin(ph + 2 * ii * sin(ph)) + ii * ii * sin(ph + 3 * ii * ii * sin(3 * ph)) + ii * ii * ii * sin(ph + 5 * ii * ii * ii * sin(5 * ph))) / 4;
@@ -211,13 +210,65 @@ wavetable_audio_module::wavetable_audio_module()
     for (int i = 127; i >= 0; i--)
     {
         int16_t *parent = tables[wavetable_metadata::wt_pluck][i + 1];
-        //float damp = 0.05 + 0.05 * i * i / (127.0 * 127.0);
         float damp = 0.05;
         for (int j = 0; j < 256; j++)
         {
             tables[wavetable_metadata::wt_pluck][i][j] = (1 - 2*damp) * parent[j] + damp * parent[(j+1)&255] + damp * parent[(j+2)&255];// + 0.1 * parent[(j-1)&255]+ 0.1 * parent[(j-2)&255];
         }
     }
+    for (int i = 0; i < 129; i++)
+    {
+        for (int j = 0; j < 256; j++)
+        {
+            float ph = j / 128.0 - 1.0;
+            float ii = i / 128.0;
+            float v = sincl(ph * (1 + 15 * ii), 1);
+            tables[wavetable_metadata::wt_stretch][i][j] = 32767 * v;
+        }
+    }
+    for (int i = 0; i < 129; i++)
+    {
+        for (int j = 0; j < 256; j++)
+        {
+            float ph = j / 128.0 - 1.0;
+            float ii = i / 128.0;
+            float v = sincl(ph * (1 + 15 * ii), 4) * sincl(j / 256.0, 1);
+            tables[wavetable_metadata::wt_stretch2][i][j] = 32000 * v;
+        }
+    }
+    for (int i = 0; i < 129; i++)
+    {
+        for (int j = 0; j < 256; j++)
+        {
+            float ph = j / 128.0 - 1.0;
+            float ii = i / 128.0;
+            float w = sincl(ph * (1 + 15 * ii), 4);
+            float v = pow(w, 9) * sincl(j / 256.0, 1);
+            tables[wavetable_metadata::wt_hardsync][i][j] = 32000 * v;
+        }
+    }
+    for (int i = 0; i < 129; i++)
+    {
+        for (int j = 0; j < 256; j++)
+        {
+            float ph = j / 128.0 - 1.0;
+            float ii = i / 128.0;
+            float w = sincl(ph * (1 + 31 * ii), 3);
+            float v = pow(w, 5) * sincl(j / 256.0, 1);
+            tables[wavetable_metadata::wt_hardsync2][i][j] = 32000 * v;
+        }
+    }
+    for (int i = 0; i < 129; i++)
+    {
+        for (int j = 0; j < 256; j++)
+        {
+            float ph = j / 128.0 - 1.0;
+            float ii = i / 128.0;
+            float w = sincl(ph * ph * (1 + 15 * ii), 2);
+            float v = pow(w, 4) * sincl(j / 256.0, 1);
+            tables[wavetable_metadata::wt_softsync][i][j] = 32000 * v;
+        }
+    }
 }
 
 

-- 
calf audio plugins packaging



More information about the pkg-multimedia-commits mailing list