[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