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