[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