mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-03-07 20:31:51 +09:00
put lin-log scale conversion into separate functions
This commit is contained in:
@@ -187,14 +187,9 @@ object AudioMixer: Disposable {
|
||||
|
||||
if (lpOutFired) {
|
||||
lpAkku += delta
|
||||
// https://www.desmos.com/calculator/dmhve2awxm
|
||||
val t = (lpAkku / lpLength).coerceIn(0.0, 1.0)
|
||||
val b = ln(lpStart / lpTarget) / -1.0
|
||||
val a = lpStart
|
||||
val cutoff = a * exp(b * t)
|
||||
val cutoff = linPercToLog(lpAkku / lpLength, lpStart, lpTarget)
|
||||
(fadeBus.filters[0] as Lowpass).setCutoff(cutoff)
|
||||
|
||||
|
||||
if (lpAkku >= lpLength) {
|
||||
lpOutFired = false
|
||||
(fadeBus.filters[0] as Lowpass).setCutoff(lpTarget)
|
||||
@@ -202,11 +197,7 @@ object AudioMixer: Disposable {
|
||||
}
|
||||
else if (lpInFired) {
|
||||
lpAkku += delta
|
||||
// https://www.desmos.com/calculator/dmhve2awxm
|
||||
val t = (lpAkku / lpLength).coerceIn(0.0, 1.0)
|
||||
val b = ln(lpStart / lpTarget) / -1.0
|
||||
val a = lpStart
|
||||
val cutoff = a * exp(b * t)
|
||||
val cutoff = linPercToLog(lpAkku / lpLength, lpStart, lpTarget)
|
||||
(fadeBus.filters[0] as Lowpass).setCutoff(cutoff)
|
||||
|
||||
if (lpAkku >= lpLength) {
|
||||
@@ -304,4 +295,19 @@ object AudioMixer: Disposable {
|
||||
tracks.forEach { it.tryDispose() }
|
||||
masterTrack.tryDispose()
|
||||
}
|
||||
}
|
||||
|
||||
fun linToLogPerc(value: Double, low: Double, high: Double): Double {
|
||||
// https://www.desmos.com/calculator/dmhve2awxm
|
||||
val b = -ln(low / high)
|
||||
val a = low
|
||||
return ln(value / a) / b
|
||||
}
|
||||
|
||||
fun linPercToLog(perc: Double, low: Double, high: Double): Double {
|
||||
// https://www.desmos.com/calculator/dmhve2awxm
|
||||
val t = perc.coerceIn(0.0, 1.0)
|
||||
val b = -ln(low / high)
|
||||
val a = low
|
||||
return a * exp(b * t)
|
||||
}
|
||||
@@ -555,11 +555,7 @@ class BasicDebugInfoWindow : UICanvas() {
|
||||
private fun drawFilterParam(batch: SpriteBatch, x: Int, y: Int, filter: TerrarumAudioFilter, track: TerrarumAudioMixerTrack) {
|
||||
when (filter) {
|
||||
is Lowpass -> {
|
||||
// https://www.desmos.com/calculator/dmhve2awxm
|
||||
val f = filter.cutoff
|
||||
val b = ln(24 / 24000.0) / -1.0
|
||||
val a = 24.0
|
||||
val perc = (ln(f / a) / b).toFloat()
|
||||
val perc = linToLogPerc(filter.cutoff, 24.0, 24000.0).toFloat()
|
||||
batch.color = COL_METER_GRAD2
|
||||
Toolkit.fillArea(batch, x.toFloat(), y.toFloat(), stripW * perc, 14f)
|
||||
batch.color = COL_METER_GRAD
|
||||
|
||||
Reference in New Issue
Block a user