[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