[SCM] calf/master: + Organ: added velocity to envelope parameter for all envelopes (adsr_v, adsr2_v, adsr3_v)
js at users.alioth.debian.org
js at users.alioth.debian.org
Tue May 7 15:37:09 UTC 2013
The following commit has been merged in the master branch:
commit 7f1163a033fb93c9b175ea7abf5cdb21aed4a472
Author: kfoltman <kfoltman at 78b06b96-2940-0410-b7fc-879d825d01d8>
Date: Sat Apr 12 20:21:32 2008 +0000
+ Organ: added velocity to envelope parameter for all envelopes (adsr_v, adsr2_v, adsr3_v)
git-svn-id: https://calf.svn.sourceforge.net/svnroot/calf/trunk@158 78b06b96-2940-0410-b7fc-879d825d01d8
diff --git a/src/calf/modules_synths.h b/src/calf/modules_synths.h
index e5ed150..69377b3 100644
--- a/src/calf/modules_synths.h
+++ b/src/calf/modules_synths.h
@@ -208,9 +208,9 @@ public:
par_percdecay, par_perclevel, par_percharm, par_master,
par_f1cutoff, par_f1res, par_f1env1, par_f1env2, par_f1env3, par_f1keyf,
par_f2cutoff, par_f2res, par_f2env1, par_f2env2, par_f2env3, par_f2keyf,
- par_eg1attack, par_eg1decay, par_eg1sustain, par_eg1release,
- par_eg2attack, par_eg2decay, par_eg2sustain, par_eg2release,
- par_eg3attack, par_eg3decay, par_eg3sustain, par_eg3release,
+ par_eg1attack, par_eg1decay, par_eg1sustain, par_eg1release, par_eg1velscl,
+ par_eg2attack, par_eg2decay, par_eg2sustain, par_eg2release, par_eg2velscl,
+ par_eg3attack, par_eg3decay, par_eg3sustain, par_eg3release, par_eg3velscl,
param_count };
enum { in_count = 0, out_count = 2, support_midi = true, rt_capable = true };
static const char *port_names[];
diff --git a/src/calf/organ.h b/src/calf/organ.h
index c02c010..8fb4bb4 100644
--- a/src/calf/organ.h
+++ b/src/calf/organ.h
@@ -39,7 +39,7 @@ struct organ_parameters {
struct organ_env_parameters
{
- float attack, decay, sustain, release;
+ float attack, decay, sustain, release, velscale;
};
float drawbars[9];
@@ -106,6 +106,7 @@ protected:
biquad<float> filterL[2], filterR[2];
adsr envs[EnvCount];
inertia<linear_ramp> expression;
+ float velmod;
public:
organ_voice()
@@ -122,7 +123,7 @@ public:
}
}
- void note_on(int note, int /*vel*/) {
+ void note_on(int note, int vel) {
reset();
this->note = note;
const float sf = 0.001f;
@@ -133,6 +134,7 @@ public:
envs[i].note_on();
}
dphase.set(synth::midi_note_to_phase(note, 0, sample_rate));
+ velmod = vel * 1.0 / 127.0;
amp.set(1.0f);
released = false;
}
diff --git a/src/organ.cpp b/src/organ.cpp
index f2f9db1..2e85578 100644
--- a/src/organ.cpp
+++ b/src/organ.cpp
@@ -153,6 +153,10 @@ const char *organ_audio_module::get_gui_xml()
"<label param=\"adsr_r\" />"
"<align><knob param=\"adsr_r\" expand=\"0\" fill=\"0\"/></align><value param=\"adsr_r\"/>"
"</vbox>"
+ "<vbox>"
+ "<label param=\"adsr_v\" />"
+ "<align><knob param=\"adsr_v\" expand=\"0\" fill=\"0\"/></align><value param=\"adsr_v\"/>"
+ "</vbox>"
"</hbox>"
"</vbox>"
"</frame>"
@@ -209,6 +213,10 @@ const char *organ_audio_module::get_gui_xml()
"<label param=\"adsr2_r\" />"
"<align><knob param=\"adsr2_r\" expand=\"0\" fill=\"0\"/></align><value param=\"adsr2_r\"/>"
"</vbox>"
+ "<vbox>"
+ "<label param=\"adsr2_v\" />"
+ "<align><knob param=\"adsr2_v\" expand=\"0\" fill=\"0\"/></align><value param=\"adsr2_v\"/>"
+ "</vbox>"
"</hbox>"
"</vbox>"
"</frame>"
@@ -233,6 +241,10 @@ const char *organ_audio_module::get_gui_xml()
"<label param=\"adsr3_r\" />"
"<align><knob param=\"adsr3_r\" expand=\"0\" fill=\"0\"/></align><value param=\"adsr3_r\"/>"
"</vbox>"
+ "<vbox>"
+ "<label param=\"adsr3_v\" />"
+ "<align><knob param=\"adsr3_v\" expand=\"0\" fill=\"0\"/></align><value param=\"adsr3_v\"/>"
+ "</vbox>"
"</hbox>"
"</vbox>"
"</frame>"
@@ -347,16 +359,19 @@ parameter_properties organ_audio_module::param_props[] = {
{ 350, 10,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "adsr_d", "EG1 Decay" },
{ 0.5, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC, NULL, "adsr_s", "EG1 Sustain" },
{ 50, 10,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "adsr_r", "EG1 Release" },
+ { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC, NULL, "adsr_v", "EG1 VelMod" },
{ 1, 1,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "adsr2_a", "EG2 Attack" },
{ 350, 10,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "adsr2_d", "EG2 Decay" },
{ 0.5, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC, NULL, "adsr2_s", "EG2 Sustain" },
{ 50, 10,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "adsr2_r", "EG2 Release" },
+ { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC, NULL, "adsr2_v", "EG2 VelMod" },
{ 1, 1,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "adsr3_a", "EG3 Attack" },
{ 350, 10,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "adsr3_d", "EG3 Decay" },
{ 0.5, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC, NULL, "adsr3_s", "EG3 Sustain" },
{ 50, 10,20000, 0, PF_FLOAT | PF_SCALE_LOG | PF_CTL_KNOB | PF_UNIT_MSEC, NULL, "adsr3_r", "EG3 Release" },
+ { 0, 0, 1, 0, PF_FLOAT | PF_SCALE_PERC, NULL, "adsr3_v", "EG3 VelMod" },
};
////////////////////////////////////////////////////////////////////////////
@@ -567,13 +582,16 @@ void organ_voice::render_block() {
}
expression.set_inertia(parameters->cutoff);
phase += dphase * BlockSize;
+ float eval[EnvCount];
+ for (int i = 0; i < EnvCount; i++)
+ eval[i] = envs[i].value * (1 + parameters->envs[i].velscale * (velmod - 1));
for (int i = 0; i < FilterCount; i++)
{
- float mod = parameters->filters[i].envmod[0] * envs[0].value;
+ float mod = parameters->filters[i].envmod[0] * eval[0];
mod += parameters->filters[i].keyf * 100 * (note - 60);
for (int j = 1; j < EnvCount; j++)
{
- mod += parameters->filters[i].envmod[j] * envs[j].value;
+ mod += parameters->filters[i].envmod[j] * eval[j];
}
if (i) mod += expression.get() * 1200 * 4;
float fc = parameters->filters[i].cutoff * pow(2.0f, mod * (1.f / 1200.f));
--
calf audio plugins packaging
More information about the pkg-multimedia-commits
mailing list