[SCM] calf/master: + Wavetable: add Pluck wavetable (generated using plain Karplus-Strong algorithm)

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 b301110c34fc61daff3be5aac243f4da1171421e
Author: Krzysztof Foltman <wdev at foltman.com>
Date:   Sun Mar 1 22:31:39 2009 +0000

    + Wavetable: add Pluck wavetable (generated using plain Karplus-Strong algorithm)

diff --git a/src/calf/metadata.h b/src/calf/metadata.h
index 99f852c..1ccf88a 100644
--- a/src/calf/metadata.h
+++ b/src/calf/metadata.h
@@ -221,6 +221,7 @@ struct wavetable_metadata: public plugin_metadata<wavetable_metadata>
         wt_metal,
         wt_bell,
         wt_blah,
+        wt_pluck,
         wt_count
     };
     enum { 
diff --git a/src/modules.cpp b/src/modules.cpp
index 7b5ee5f..0041b65 100644
--- a/src/modules.cpp
+++ b/src/modules.cpp
@@ -511,6 +511,7 @@ const char *wavetable_names[] = {
     "Metal",
     "Bell",
     "Blah",
+    "Pluck",
 };
 
 const char *wavetable_init_soundfont = "";
@@ -522,7 +523,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) = {
-    { 0,       0,  wavetable_metadata::wt_count - 1, 0, PF_ENUM | PF_SCALE_LINEAR | PF_CTL_COMBO, wavetable_names, "o1wave", "Osc1 Wave" },
+    { 6,       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" },
@@ -532,7 +533,7 @@ CALF_PORT_PROPS(wavetable) = {
     { 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" },
     { -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" },
+    { 0,        0,   1,     0, PF_FLOAT | PF_SCALE_GAIN | PF_CTL_KNOB | PF_UNIT_COEF | PF_PROP_NOBOUNDS, NULL, "o2level", "Osc2 Level" },
 
     { 1,          1,20000,    0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "adsr_a", "EG1 Attack" },
     { 350,       10,20000,    0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "adsr_d", "EG1 Decay" },
diff --git a/src/wavetable.cpp b/src/wavetable.cpp
index 75a7a8f..d69817b 100644
--- a/src/wavetable.cpp
+++ b/src/wavetable.cpp
@@ -203,6 +203,21 @@ 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;
+    }
+    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];
+        }
+    }
 }
 
 

-- 
calf audio plugins packaging



More information about the pkg-multimedia-commits mailing list