Fix ADSR release timing
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
<component name="ArtifactManager">
|
||||
<artifact type="jar" name="vst-worklet-base-js-1.0.0-SNAPSHOT">
|
||||
<output-path>$PROJECT_DIR$/build/libs</output-path>
|
||||
<root id="archive" name="vst-worklet-base-js-1.0.0-SNAPSHOT.jar" />
|
||||
<root id="archive" name="vst-worklet-base-js-1.0.0-SNAPSHOT.jar">
|
||||
<element id="module-output" name="vst-worklet-base.jsMain" />
|
||||
</root>
|
||||
</artifact>
|
||||
</component>
|
||||
@@ -1,5 +1,5 @@
|
||||
plugins {
|
||||
kotlin("multiplatform") version "2.0.0"
|
||||
kotlin("multiplatform") version "2.0.20-RC"
|
||||
id("maven-publish")
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package nl.astraeus.vst
|
||||
|
||||
import kotlin.math.max
|
||||
|
||||
object ADSR {
|
||||
|
||||
fun calculate(
|
||||
@@ -13,6 +15,11 @@ object ADSR {
|
||||
): Double {
|
||||
val attackTime = startTime + attack
|
||||
val decayTime = attackTime + decay
|
||||
val actualReleaseTime = if (releaseTime == null) {
|
||||
null
|
||||
} else {
|
||||
max(releaseTime, decayTime)
|
||||
}
|
||||
|
||||
return when {
|
||||
time < startTime -> {
|
||||
@@ -27,12 +34,12 @@ object ADSR {
|
||||
sustain + ((1 - (((time - attackTime) / decay))) * (1 - sustain))
|
||||
}
|
||||
|
||||
releaseTime == null -> {
|
||||
actualReleaseTime == null -> {
|
||||
sustain
|
||||
}
|
||||
|
||||
time < releaseTime + release -> {
|
||||
(1 - ((time - releaseTime) / release)) * sustain
|
||||
time < actualReleaseTime + release -> {
|
||||
(1 - ((time - actualReleaseTime) / release)) * sustain
|
||||
}
|
||||
|
||||
else -> {
|
||||
|
||||
Reference in New Issue
Block a user