[SCM] calf/master: + Monosynth: constant time release in envelope + Monosynth: smoothed out first 1/16 of Skewed Saw wave

js at users.alioth.debian.org js at users.alioth.debian.org
Tue May 7 15:36:48 UTC 2013


The following commit has been merged in the master branch:
commit fe5a947e5aa04c10fd037d3dee3f53fc00a6d694
Author: kfoltman <kfoltman at 78b06b96-2940-0410-b7fc-879d825d01d8>
Date:   Sun Dec 23 16:49:16 2007 +0000

    + Monosynth: constant time release in envelope
    + Monosynth: smoothed out first 1/16 of Skewed Saw wave
    
    
    
    git-svn-id: https://calf.svn.sourceforge.net/svnroot/calf/trunk@40 78b06b96-2940-0410-b7fc-879d825d01d8

diff --git a/src/calf/modules_synths.h b/src/calf/modules_synths.h
index a29ecd3..b20eda3 100644
--- a/src/calf/modules_synths.h
+++ b/src/calf/modules_synths.h
@@ -209,11 +209,11 @@ public:
         waves[wave_varistep].make(bl, data);
 
         for (int i = 0; i < 2048; i++) {
-            data[i] = -1 + fmod (i * i / 8192.0, 2.0);
+            data[i] = (min(1.f, (float)(i / 64.f))) * (-1 + fmod (i * i / 8192.0, 2.0));
         }
         waves[wave_skewsaw].make(bl, data);
         for (int i = 0; i < 2048; i++) {
-            data[i] = fmod (i * i / 2048.0, 2.0) < 1.0 ? -1.0 : +1.0;
+            data[i] = (min(1.f, (float)(i / 64.f))) * (fmod (i * i / 2048.0, 2.0) < 1.0 ? -1.0 : +1.0);
         }
         waves[wave_skewsqr].make(bl, data);
     }
diff --git a/src/calf/synth.h b/src/calf/synth.h
index b256008..7df5b97 100644
--- a/src/calf/synth.h
+++ b/src/calf/synth.h
@@ -167,11 +167,11 @@ public:
     env_state state;
     // note: these are *rates*, not times
     double attack, decay, sustain, release;
-    double value;
+    double value, thisrelease, releasemul;
     
     adsr()
     {
-        attack = decay = sustain = release = 0.f;
+        attack = decay = sustain = release = thisrelease = releasemul = 0.f;
         reset();
     }
     inline void reset()
@@ -185,6 +185,7 @@ public:
         decay = (1 - s) / (d * er);
         sustain = s;
         release = s / (r * er);
+        thisrelease = releasemul * release;
     }
     inline bool released()
     {
@@ -198,10 +199,16 @@ public:
     {
         if (state == STOP)
             return;
-        if (value > sustain && decay > release)
-            state = LOCKDECAY;
+        if (sustain > 0)
+            releasemul = value / sustain;
         else
+            releasemul = 1.f;
+        thisrelease = releasemul * release;
+        if (value > sustain && decay > thisrelease)
+            state = LOCKDECAY;
+        else {
             state = RELEASE;
+        }
     }
     inline void advance()
     {
@@ -229,6 +236,8 @@ public:
                 if (value < 0.f)
                     value = 0.f;
                 state = RELEASE;
+                thisrelease = release;
+                releasemul = 1.f;
             }
             break;
         case SUSTAIN:
@@ -239,8 +248,8 @@ public:
             }
             break;
         case RELEASE:
-            value -= release;
-            if (value < 0.f) {
+            value -= thisrelease;
+            if (value <= 0.f) {
                 value = 0.f;
                 state = STOP;
             }

-- 
calf audio plugins packaging



More information about the pkg-multimedia-commits mailing list