From 1459fc5be967f26800d0495d9b0676235f8ea9bf Mon Sep 17 00:00:00 2001 From: minjaesong Date: Tue, 21 Nov 2023 11:59:58 +0900 Subject: [PATCH] put lin-log scale conversion into separate functions --- src/net/torvald/terrarum/audio/AudioMixer.kt | 28 +++++++++++-------- .../terrarum/ui/BasicDebugInfoWindow.kt | 6 +--- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/src/net/torvald/terrarum/audio/AudioMixer.kt b/src/net/torvald/terrarum/audio/AudioMixer.kt index 94ef6aaaa..9ca933614 100644 --- a/src/net/torvald/terrarum/audio/AudioMixer.kt +++ b/src/net/torvald/terrarum/audio/AudioMixer.kt @@ -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) } \ No newline at end of file diff --git a/src/net/torvald/terrarum/ui/BasicDebugInfoWindow.kt b/src/net/torvald/terrarum/ui/BasicDebugInfoWindow.kt index c56a5cf44..b130016bd 100644 --- a/src/net/torvald/terrarum/ui/BasicDebugInfoWindow.kt +++ b/src/net/torvald/terrarum/ui/BasicDebugInfoWindow.kt @@ -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