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