scope view on mixer

This commit is contained in:
minjaesong
2023-11-20 23:07:14 +09:00
parent 1a49921c77
commit b7f4eca614
3 changed files with 72 additions and 11 deletions

View File

@@ -97,6 +97,7 @@ object AudioMixer: Disposable {
init {
masterTrack.filters[0] = SoftLim
masterTrack.filters[1] = Buffer
masterTrack.filters[2] = Scope
fadeBus.addSidechainInput(musicTrack, 1.0)
fadeBus.addSidechainInput(ambientTrack, 1.0)

View File

@@ -1,6 +1,7 @@
package net.torvald.terrarum.audio
import com.jme3.math.FastMath
import net.torvald.terrarum.audio.TerrarumAudioMixerTrack.Companion.BUFFER_SIZE
import kotlin.math.tanh
abstract class TerrarumAudioFilter {
@@ -37,6 +38,40 @@ object SoftLim : TerrarumAudioFilter() {
}
}
object Scope : TerrarumAudioFilter() {
val backbufL = Array(8) { FloatArray(BUFFER_SIZE / 4) }
val backbufR = Array(8) { FloatArray(BUFFER_SIZE / 4) }
private val sqrt2p = 0.7071067811865476
override fun thru(inbuf0: List<FloatArray>, inbuf1: List<FloatArray>, outbuf0: List<FloatArray>, outbuf1: List<FloatArray>) {
// shift buffer
for (i in backbufL.lastIndex downTo 1) {
backbufL[i] = backbufL[i - 1]
backbufR[i] = backbufR[i - 1]
}
backbufL[0] = FloatArray(BUFFER_SIZE / 4)
backbufR[0] = FloatArray(BUFFER_SIZE / 4)
// plot dots
for (i in 0 until BUFFER_SIZE/4) {
val x0 = inbuf1[0][i] * 0.7
val y0 = inbuf1[1][i] * 0.7
val x = (x0*sqrt2p + y0*sqrt2p) * 1.414
val y = (x0*sqrt2p - y0*sqrt2p) * 1.414
backbufL[0][i] = x.toFloat()
backbufR[0][i] = y.toFloat()
}
// copy samples over
outbuf1.forEachIndexed { index, outTrack ->
System.arraycopy(inbuf1[index], 0, outTrack, 0, outTrack.size)
}
}
}
class Lowpass(cutoff0: Float, val rate: Int): TerrarumAudioFilter() {