[SCM] calf/master: + Wavetable: new wavetables, new presets

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 ec8dedc173a25ccfad9e230bcd3a497b15d3031a
Author: Krzysztof Foltman <wdev at foltman.com>
Date:   Tue Mar 3 21:07:56 2009 +0000

    + Wavetable: new wavetables, new presets

diff --git a/presets.xml b/presets.xml
index 4bee691..dbebfd7 100644
--- a/presets.xml
+++ b/presets.xml
@@ -3966,4 +3966,123 @@
   <param name="adsr3_r" value="50" />
   <param name="adsr3_v" value="0" />
 </preset>
+<preset plugin="wavetable" name="Reed">
+  <param name="o1wave" value="23" />
+  <param name="o1offset" value="-0.28" />
+  <param name="o1trans" value="0" />
+  <param name="o1detune" value="6" />
+  <param name="o1level" value="0.1" />
+  <param name="o2wave" value="24" />
+  <param name="o2offset" value="0.4" />
+  <param name="o2trans" value="0" />
+  <param name="o2detune" value="-6" />
+  <param name="o2level" value="0.0669858" />
+  <param name="adsr_a" value="78.0644" />
+  <param name="adsr_d" value="350" />
+  <param name="adsr_s" value="0.5" />
+  <param name="adsr_r" value="50" />
+  <param name="adsr_v" value="0" />
+  <param name="adsr2_a" value="1" />
+  <param name="adsr2_d" value="350" />
+  <param name="adsr2_s" value="0.5" />
+  <param name="adsr2_r" value="50" />
+  <param name="adsr2_v" value="0" />
+  <param name="adsr3_a" value="1" />
+  <param name="adsr3_d" value="350" />
+  <param name="adsr3_s" value="0.5" />
+  <param name="adsr3_r" value="50" />
+  <param name="adsr3_v" value="0" />
+</preset>
+<preset plugin="wavetable" name="Double Reed">
+  <param name="o1wave" value="24" />
+  <param name="o1offset" value="0.02" />
+  <param name="o1trans" value="0" />
+  <param name="o1detune" value="6" />
+  <param name="o1level" value="0.1" />
+  <param name="o2wave" value="23" />
+  <param name="o2offset" value="0.24" />
+  <param name="o2trans" value="-12" />
+  <param name="o2detune" value="-6" />
+  <param name="o2level" value="0.0669858" />
+  <param name="adsr_a" value="78.0644" />
+  <param name="adsr_d" value="350" />
+  <param name="adsr_s" value="0.5" />
+  <param name="adsr_r" value="50" />
+  <param name="adsr_v" value="0" />
+  <param name="adsr2_a" value="1" />
+  <param name="adsr2_d" value="350" />
+  <param name="adsr2_s" value="0.5" />
+  <param name="adsr2_r" value="50" />
+  <param name="adsr2_v" value="0" />
+  <param name="adsr3_a" value="1" />
+  <param name="adsr3_d" value="350" />
+  <param name="adsr3_s" value="0.5" />
+  <param name="adsr3_r" value="50" />
+  <param name="adsr3_v" value="0" />
+</preset>
+<preset plugin="wavetable" name="Sharp Sync">
+  <param name="o1wave" value="0" />
+  <param name="o1offset" value="-0.06" />
+  <param name="o1trans" value="0" />
+  <param name="o1detune" value="6" />
+  <param name="o1level" value="0.03125" />
+  <param name="o2wave" value="11" />
+  <param name="o2offset" value="-0.52" />
+  <param name="o2trans" value="0" />
+  <param name="o2detune" value="-5" />
+  <param name="o2level" value="0.0441942" />
+  <param name="adsr_a" value="1" />
+  <param name="adsr_d" value="350" />
+  <param name="adsr_s" value="0.5" />
+  <param name="adsr_r" value="50" />
+  <param name="adsr_v" value="0" />
+  <param name="adsr2_a" value="1" />
+  <param name="adsr2_d" value="350" />
+  <param name="adsr2_s" value="0.5" />
+  <param name="adsr2_r" value="50" />
+  <param name="adsr2_v" value="0" />
+  <param name="adsr3_a" value="1" />
+  <param name="adsr3_d" value="350" />
+  <param name="adsr3_s" value="0.5" />
+  <param name="adsr3_r" value="50" />
+  <param name="adsr3_v" value="0" />
+</preset>
+<preset plugin="wavetable" name="Swish">
+  <param name="o1wave" value="1" />
+  <param name="o1offset" value="-0.32" />
+  <param name="o1trans" value="0" />
+  <param name="o1detune" value="6" />
+  <param name="o1level" value="0.1" />
+  <param name="o2wave" value="0" />
+  <param name="o2offset" value="0.4" />
+  <param name="o2trans" value="0" />
+  <param name="o2detune" value="-6" />
+  <param name="o2level" value="0" />
+  <param name="adsr_a" value="47.5775" />
+  <param name="adsr_d" value="350" />
+  <param name="adsr_s" value="0.5" />
+  <param name="adsr_r" value="50" />
+  <param name="adsr_v" value="0" />
+  <param name="adsr2_a" value="1" />
+  <param name="adsr2_d" value="350" />
+  <param name="adsr2_s" value="0.5" />
+  <param name="adsr2_r" value="50" />
+  <param name="adsr2_v" value="0" />
+  <param name="adsr3_a" value="1" />
+  <param name="adsr3_d" value="350" />
+  <param name="adsr3_s" value="0.5" />
+  <param name="adsr3_r" value="50" />
+  <param name="adsr3_v" value="0" />
+</preset>
+<preset plugin="reverb" name="Room">
+  <param name="decay_time" value="0.445945" />
+  <param name="hf_damp" value="5508.46" />
+  <param name="room_size" value="4" />
+  <param name="diffusion" value="0.54" />
+  <param name="amount" value="0.469761" />
+  <param name="dry" value="1" />
+  <param name="predelay" value="25" />
+  <param name="bass_cut" value="257.65" />
+  <param name="treble_cut" value="20000" />
+</preset>
 </presets>
diff --git a/src/calf/metadata.h b/src/calf/metadata.h
index 95ef110..1458665 100644
--- a/src/calf/metadata.h
+++ b/src/calf/metadata.h
@@ -236,6 +236,10 @@ struct wavetable_metadata: public plugin_metadata<wavetable_metadata>
         wt_gtr,
         wt_gtr2,
         wt_gtr3,
+        wt_gtr4,
+        wt_gtr5,
+        wt_reed,
+        wt_reed2,
         wt_count
     };
     enum { 
diff --git a/src/modules.cpp b/src/modules.cpp
index 80ace36..dfa2032 100644
--- a/src/modules.cpp
+++ b/src/modules.cpp
@@ -526,6 +526,10 @@ const char *wavetable_names[] = {
     "Gtr",
     "Gtr 2",
     "Gtr 3",
+    "Gtr 4",
+    "Gtr 5",
+    "Reed",
+    "Reed 2",
 };
 
 const char *wavetable_init_soundfont = "";
@@ -537,7 +541,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) = {
-    { 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" },
+    { 1 /*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 ba25e50..e698928 100644
--- a/src/wavetable.cpp
+++ b/src/wavetable.cpp
@@ -122,39 +122,59 @@ static inline float sincl(float x, float clip)
     return sin(M_PI * x);
 }
 
+static void interpolate_wt(int16_t table[129][256], int step)
+{
+    for (int i = 0; i < 128; i++)
+    {
+        if (!(i % step))
+            continue;
+        int prev = i - i % step;
+        int next = prev + step;
+        for (int j = 0; j < 256; j++)
+        {
+            table[i][j] = table[prev][j] + (i - prev) * (table[next][j] - table[prev][j]) / step;
+        }
+    }
+}
+
 wavetable_audio_module::wavetable_audio_module()
 {
     panic_flag = false;
-    for (int i = 0; i < 129; i++)
+    for (int i = 0; i < 129; i += 8)
     {
         for (int j = 0; j < 256; j++)
         {
             float ph = j * 2 * M_PI / 256;
-            float ii = (i & ~3) / 128.0;
-            float ii2 = ((i & ~3) + 4) / 128.0;
-            float peak = (32 * ii);
-            float rezo1 = sin(floor(peak) * ph);
-            float rezo2 = sin(floor(peak + 1) * ph);
-            float v1 = sin (ph + 2 * ii * sin(2 * ph) + 2 * ii * ii * sin(4 * ph) + ii * ii * rezo1);
-            float v2 = sin (ph + 2 * ii2 * sin(2 * ph) + 2 * ii2 * ii2 * sin(4 * ph) + ii2 * ii2 * rezo2);
-            tables[0][i][j] = 32767 * lerp(v1, v2, (i & 3) / 4.0);
+            int harm = 1 + 2 * (i / 8);
+            float ii = i / 128.0;
+            float rezo1 = sin(harm * ph) * sin(ph);
+            float rezo2 = sin((harm+1) * ph) * sin(ph * 2);
+            float rezo3 = sin((harm+3) * ph) * sin(ph * 4);
+            float rezo = (rezo1 + rezo2 + rezo3) / 3;
+            float v = (sin (ph) + ii * ii * rezo) / 2;
+            tables[0][i][j] = 32767 * v;
         }
     }
-    for (int i = 0; i < 129; i++)
+    interpolate_wt(tables[0], 8);
+    for (int i = 0; i < 129; i += 4)
     {
         for (int j = 0; j < 256; j++)
         {
             float ph = j * 2 * M_PI / 256;
-            float ii = (i & ~3) / 128.0;
-            float ii2 = ((i & ~3) + 4) / 128.0;
-            float peak = (32 * ii);
-            float rezo1 = sin(floor(peak) * ph);
-            float rezo2 = sin(floor(peak + 1) * ph);
-            float v1 = sin (ph + ii * ii * rezo1);
-            float v2 = sin (ph + ii2 * ii2 * rezo2);
-            tables[1][i][j] = 32767 * lerp(v1, v2, (i & 3) / 4.0);
+            int harm = 1 + (i / 4);
+            float ii = i / 128.0;
+            float h = sin(harm * ph);
+            float rezo1 = h * sin(ph);
+            float rezo2 = h * sin(ph * 2)/2;
+            float rezo3 = h * sin(ph * 3)/3;
+            float rezo4 = h * sin(ph * 4)/4;
+            float rezo5 = h * sin(ph * 5)/5;
+            float rezo = (rezo1 + rezo2 + rezo3 + rezo4 + rezo5) / 3;
+            float v = sin (ph + ii * rezo);
+            tables[1][i][j] = 32767 * v;
         }
     }
+    interpolate_wt(tables[1], 4);
     for (int i = 0; i < 129; i++)
     {
         for (int j = 0; j < 256; j++)
@@ -202,7 +222,6 @@ wavetable_audio_module::wavetable_audio_module()
             tables[wavetable_metadata::wt_blah][i][j] = 32767 * v;
         }
     }
-    float r = 0.f;
     for (int i = 0; i < 256; i++)
     {
         tables[wavetable_metadata::wt_pluck][128][i] = (i < 128) ? 32000 * fabs(sin(i / 32.0 * M_PI) * sin(i / 13.0 * M_PI) * sin(i / 19.0 * M_PI)) : 0;
@@ -352,10 +371,8 @@ wavetable_audio_module::wavetable_audio_module()
         for (int j = 0; j < 256; j++)
         {
             float ph = j * 2 * M_PI / 256;
-            float ph2 = j / 128.0 - 1;
             float ii = i / 128.0;
             float ii2 = ii;
-            //float w = sincl(ph2 * (1 + 15 * ii2 * ii2), 4) * pow(sincl(j / 256.0, 1), 1);
             float w = pow(sincl(j / 256.0, 1), 1);
             float v = sin(ph + ii2 * ii2 * ii2 * sin(3 * ph - ii2 * ii2 * ii2 * w * sin(ph + sin(3 * ph) + ii * sin(11 * ph) + ii * ii * sin(25 * ph))));
             tables[wavetable_metadata::wt_gtr][i][j] = 32767 * v;
@@ -366,10 +383,8 @@ wavetable_audio_module::wavetable_audio_module()
         for (int j = 0; j < 256; j++)
         {
             float ph = j * 2 * M_PI / 256;
-            float ph2 = j / 128.0 - 1;
             float ii = i / 128.0;
             float ii2 = dsp::clip(ii - 0.5, 0.0, 1.0);
-            //float w = sincl(ph2 * (1 + 15 * ii2 * ii2), 4) * pow(sincl(j / 256.0, 1), 1);
             float w = pow(sincl(j / 256.0, 1), 1);
             float v = sin(ph + ii * ii * ii * sin(3 * ph - ii * ii * ii * w * sin(ph + sin(3 * ph + ii2 * sin(13 * ph)))));
             tables[wavetable_metadata::wt_gtr2][i][j] = 32767 * v;
@@ -380,7 +395,6 @@ wavetable_audio_module::wavetable_audio_module()
         for (int j = 0; j < 256; j++)
         {
             float ph = j * 2 * M_PI / 256;
-            float ph2 = j / 128.0 - 1;
             float ii = i / 128.0;
             float ii2 = dsp::clip(2 * (ii - 0.5), 0.0, 1.0);
             //float w = sincl(ph2 * (1 + 15 * ii2 * ii2), 4) * pow(sincl(j / 256.0, 1), 1);
@@ -389,8 +403,55 @@ wavetable_audio_module::wavetable_audio_module()
             tables[wavetable_metadata::wt_gtr3][i][j] = 32767 * v;
         }
     }
+    for (int i = 0; i < 129; i++)
+    {
+        for (int j = 0; j < 256; j++)
+        {
+            float ph = j * 2 * M_PI / 256;
+            float ii = i / 128.0;
+            float ii2 = dsp::clip(2 * (ii - 0.5), 0.0, 1.0);
+            //float w = sincl(ph2 * (1 + 15 * ii2 * ii2), 4) * pow(sincl(j / 256.0, 1), 1);
+            float w = pow(sincl(j / 256.0, 1), 1);
+            float v = sin(ph + ii * sin(3 * ph - ii * w * sin(2 * ph + sin(5 * ph + 0.5 * ii2 * sin(13 * ph + 0.5 * sin(4 * ph))))));
+            tables[wavetable_metadata::wt_gtr4][i][j] = 32767 * v;
+        }
+    }
+    for (int i = 0; i < 129; i++)
+    {
+        for (int j = 0; j < 256; j++)
+        {
+            float ph = j * 2 * M_PI / 256;
+            float ii = i / 128.0;
+            float ii2 = dsp::clip((ii - 0.25)/0.75, 0.0, 1.0);
+            //float w = sincl(ph2 * (1 + 15 * ii2 * ii2), 4) * pow(sincl(j / 256.0, 1), 1);
+            float w = pow(sincl(j / 256.0, 1), 3);
+            float v = sin(ph + (ii + 0.05) * sin(3 * ph - 2 * ii * w * sin(5 * ph + sin(7 * ph + 0.5 * ii2 * sin(13 * ph + 0.5 * sin(11 * ph))))));
+            tables[wavetable_metadata::wt_gtr5][i][j] = 32767 * v;
+        }
+    }
+    for (int i = 0; i < 129; i++)
+    {
+        for (int j = 0; j < 256; j++)
+        {
+            float ph = j * 2 * M_PI / 256;
+            float ii = i / 128.0;
+            float w = pow(sincl(2 * (j / 256.0), 2), 3);
+            float v = sin(ph + (ii + 0.05) * sin(7 * ph - 2 * ii * w * sin(11 * ph)));
+            tables[wavetable_metadata::wt_reed][i][j] = 32767 * v;
+        }
+    }
+    for (int i = 0; i < 129; i++)
+    {
+        for (int j = 0; j < 256; j++)
+        {
+            float ph = j * 2 * M_PI / 256;
+            float ii = i / 128.0;
+            float ii2 = dsp::clip((ii - 0.25)/0.75, 0.0, 1.0);
+            float ii3 = dsp::clip((ii - 0.5)/0.5, 0.0, 1.0);
+            float v = sin(ph + (ii + 0.05) * sin(ii * sin(2 * ph) - 2 * ii2 * sin(2 * ph + ii2 * sin(3 * ph)) + 3 * ii3 * sin(3 * ph)));
+            tables[wavetable_metadata::wt_reed2][i][j] = 32767 * v;
+        }
+    }
 }
 
-
-
 #endif

-- 
calf audio plugins packaging



More information about the pkg-multimedia-commits mailing list