Fix ADSR release timing

This commit is contained in:
2024-08-12 20:35:49 +02:00
parent 0a55c8ff82
commit 696a700122
3 changed files with 14 additions and 5 deletions

View File

@@ -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>

View File

@@ -1,5 +1,5 @@
plugins {
kotlin("multiplatform") version "2.0.0"
kotlin("multiplatform") version "2.0.20-RC"
id("maven-publish")
}

View File

@@ -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 -> {