put lin-log scale conversion into separate functions

This commit is contained in:
minjaesong
2023-11-21 11:59:58 +09:00
parent 6229b0f60b
commit 1459fc5be9
2 changed files with 18 additions and 16 deletions

View File

@@ -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)
}

View File

@@ -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