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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user