From 9dc2dffef9eef521dad774dc97e41cbe12cd1d05 Mon Sep 17 00:00:00 2001 From: minjaesong Date: Sun, 22 Dec 2024 15:56:35 +0900 Subject: [PATCH] bandpass dsp --- .../torvald/terrarum/audio/dsp/Bandpass.kt | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 src/net/torvald/terrarum/audio/dsp/Bandpass.kt diff --git a/src/net/torvald/terrarum/audio/dsp/Bandpass.kt b/src/net/torvald/terrarum/audio/dsp/Bandpass.kt new file mode 100644 index 000000000..beb5de87b --- /dev/null +++ b/src/net/torvald/terrarum/audio/dsp/Bandpass.kt @@ -0,0 +1,48 @@ +package net.torvald.terrarum.audio.dsp + +import com.badlogic.gdx.graphics.g2d.SpriteBatch +import net.torvald.terrarum.App +import net.torvald.terrarum.ui.BasicDebugInfoWindow.Companion.FILTER_NAME_ACTIVE + +/** + * Created by minjaesong on 2024-12-22. + */ +class Bandpass(cutoffLo0: Float, cutoffHi0: Float): TerrarumAudioFilter() { + + private val LP = Lowpass(cutoffHi0) + private val HP = Highpass(cutoffLo0) + + private var midbufLen = App.audioBufferSize + private var midbuf: List = listOf(FloatArray(midbufLen), FloatArray(midbufLen)) + + override fun thru(inbuf: List, outbuf: List) { + if (inbuf[0].size != midbufLen) { + midbufLen = inbuf[0].size + midbuf = listOf(FloatArray(midbufLen), FloatArray(midbufLen)) + } + + HP.thru(inbuf, midbuf) + LP.thru(midbuf, outbuf) + } + + override fun drawDebugView(batch: SpriteBatch, x: Int, y: Int) { +// val perc = linToLogPerc(cutoff, 24.0, 24000.0).toFloat() +// batch.color = COL_METER_GRAD2 +// Toolkit.fillArea(batch, x.toFloat(), y.toFloat(), BasicDebugInfoWindow.STRIP_W * perc, 14f) +// batch.color = COL_METER_GRAD +// Toolkit.fillArea(batch, x.toFloat(), y+14f, BasicDebugInfoWindow.STRIP_W * perc, 2f) + + batch.color = FILTER_NAME_ACTIVE + App.fontSmallNumbers.draw(batch, "FL:${HP.cutoff.toInt()}", x+3f, y+1f) + App.fontSmallNumbers.draw(batch, "FH:${LP.cutoff.toInt()}", x+3f, y+17f) + } + + override val debugViewHeight = 32 + + override fun copyParamsFrom(other: TerrarumAudioFilter) { + if (other is Bandpass) { + other.LP.setCutoff(this.LP.cutoff) + other.HP.setCutoff(this.HP.cutoff) + } + } +} \ No newline at end of file