ADSR envelope

This commit is contained in:
2024-06-30 20:33:16 +02:00
parent 6147bfe5db
commit 0a55c8ff82
2 changed files with 44 additions and 1 deletions

View File

@@ -0,0 +1,43 @@
package nl.astraeus.vst
object ADSR {
fun calculate(
attack: Double,
decay: Double,
sustain: Double,
release: Double,
startTime: Double,
time: Double,
releaseTime: Double? = null
): Double {
val attackTime = startTime + attack
val decayTime = attackTime + decay
return when {
time < startTime -> {
0.0
}
time < attackTime -> {
(time - startTime) / attack
}
time < decayTime -> {
sustain + ((1 - (((time - attackTime) / decay))) * (1 - sustain))
}
releaseTime == null -> {
sustain
}
time < releaseTime + release -> {
(1 - ((time - releaseTime) / release)) * sustain
}
else -> {
0.0
}
}
}
}

View File

@@ -40,4 +40,4 @@ abstract external class AudioWorkletProcessor {
external fun registerProcessor(name: String, processorCtor: JsClass<*>)
external val sampleRate: Int
external val currentTime: Double
external val currentTime: Double