audio filters moved to its own files

This commit is contained in:
minjaesong
2023-11-28 13:56:15 +09:00
parent ce6f5909a8
commit af48a171eb
22 changed files with 542 additions and 459 deletions

View File

@@ -0,0 +1,49 @@
package net.torvald.terrarum.audio.dsp
import com.jme3.math.FastMath
import net.torvald.terrarum.audio.TerrarumAudioMixerTrack
import kotlin.math.roundToInt
class Reverb(val delayMS: Float = 36f, var feedback: Float = 0.92f, var lowpass: Float = 1200f): TerrarumAudioFilter() {
private val highpass = 80f
private var delay = (TerrarumAudioMixerTrack.SAMPLING_RATEF * delayMS / 1000f).roundToInt()
private val bufSize = delay + 2
private val buf = Array(2) { FloatArray(bufSize) }
private fun unshift(sample: Float, buf: FloatArray) {
for (i in bufSize - 1 downTo 1) {
buf[i] = buf[i - 1]
}
buf[0] = sample
}
private val out0 = FloatArray(2)
override fun thru(inbuf: List<FloatArray>, outbuf: List<FloatArray>) {
val RCLo: Float = 1f / (lowpass * FastMath.TWO_PI)
val RCHi: Float = 1f / (highpass * FastMath.TWO_PI)
val dt: Float = 1f / TerrarumAudioMixerTrack.SAMPLING_RATEF
val alphaLo = dt / (RCLo + dt)
val alphaHi = RCHi / (RCHi + dt)
for (ch in outbuf.indices) {
for (i in 0 until TerrarumAudioMixerTrack.BUFFER_SIZE / 4) {
val inn = inbuf[ch][i]
// reverb
val rev = buf[ch][delay - 1]
val out = inn - rev * feedback
// fill lpbuf
val lp0 = buf[ch][0]
val lp = lp0 + alphaLo * (out - lp0)
unshift(lp, buf[ch])
outbuf[ch][i] = out
}
}
}
}