diff --git a/.idea/artifacts/vst_worklet_base_js_1_0_0_SNAPSHOT.xml b/.idea/artifacts/vst_worklet_base_js_1_0_0_SNAPSHOT.xml index a216cf2..51b2d36 100644 --- a/.idea/artifacts/vst_worklet_base_js_1_0_0_SNAPSHOT.xml +++ b/.idea/artifacts/vst_worklet_base_js_1_0_0_SNAPSHOT.xml @@ -1,6 +1,8 @@ $PROJECT_DIR$/build/libs - + + + \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index 8c286f8..ee2a39d 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - kotlin("multiplatform") version "2.0.0" + kotlin("multiplatform") version "2.0.20-RC" id("maven-publish") } diff --git a/src/jsMain/kotlin/nl/astraeus/vst/ADSR.kt b/src/jsMain/kotlin/nl/astraeus/vst/ADSR.kt index ed6bd25..b242d28 100644 --- a/src/jsMain/kotlin/nl/astraeus/vst/ADSR.kt +++ b/src/jsMain/kotlin/nl/astraeus/vst/ADSR.kt @@ -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 -> {