ADSR envelope
This commit is contained in:
43
src/jsMain/kotlin/nl/astraeus/vst/ADSR.kt
Normal file
43
src/jsMain/kotlin/nl/astraeus/vst/ADSR.kt
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user