diff --git a/src/net/torvald/terrarum/audio/AudioProcessBuf.kt b/src/net/torvald/terrarum/audio/AudioProcessBuf.kt index 00a5f042a..a4442c4b7 100644 --- a/src/net/torvald/terrarum/audio/AudioProcessBuf.kt +++ b/src/net/torvald/terrarum/audio/AudioProcessBuf.kt @@ -34,9 +34,9 @@ class AudioProcessBuf(val size: Int) { updateFloats() } - fun getL0() = FloatArray(size / 4) { fbuf0[2*it] } - fun getR0() = FloatArray(size / 4) { fbuf0[2*it+1] } - fun getL1() = FloatArray(size / 4) { fbuf1[2*it] } - fun getR1() = FloatArray(size / 4) { fbuf1[2*it+1] } + fun getL0(volume: Double) = FloatArray(size / 4) { (volume * fbuf0[2*it]).toFloat() } + fun getR0(volume: Double) = FloatArray(size / 4) { (volume * fbuf0[2*it+1]).toFloat() } + fun getL1(volume: Double) = FloatArray(size / 4) { (volume * fbuf1[2*it]).toFloat() } + fun getR1(volume: Double) = FloatArray(size / 4) { (volume * fbuf1[2*it+1]).toFloat() } } \ No newline at end of file diff --git a/src/net/torvald/terrarum/audio/MixerTrackProcessor.kt b/src/net/torvald/terrarum/audio/MixerTrackProcessor.kt index 49932b62b..c1490ee6f 100644 --- a/src/net/torvald/terrarum/audio/MixerTrackProcessor.kt +++ b/src/net/torvald/terrarum/audio/MixerTrackProcessor.kt @@ -82,27 +82,29 @@ class MixerTrackProcessor(val bufferSize: Int, val track: TerrarumAudioMixerTrac var samplesR1: FloatArray if (track.isMaster) { - val streamBuf = track.sidechainInputs[0]!!.first.processor.streamBuf - samplesL0 = streamBuf.getL0() - samplesR0 = streamBuf.getR0() - samplesL1 = streamBuf.getL1() - samplesR1 = streamBuf.getR1() + // TEST CODE must combine all the inputs + samplesL0 = track.sidechainInputs[0]!!.first.processor.fout0[0] + samplesR0 = track.sidechainInputs[0]!!.first.processor.fout0[1] + samplesL1 = track.sidechainInputs[0]!!.first.processor.fout1[0] + samplesR1 = track.sidechainInputs[0]!!.first.processor.fout1[1] } else { - samplesL0 = streamBuf.getL0() - samplesR0 = streamBuf.getR0() - samplesL1 = streamBuf.getL1() - samplesR1 = streamBuf.getR1() + samplesL0 = streamBuf.getL0(track.volume) + samplesR0 = streamBuf.getR0(track.volume) + samplesL1 = streamBuf.getL1(track.volume) + samplesR1 = streamBuf.getR1(track.volume) } // run the input through the stack of filters + val filterStack = track.filters.filter { !it.bypass } + val fin0 = listOf(samplesL0, samplesR0) val fin1 = listOf(samplesL1, samplesR1) fout0 = fout1 fout1 = listOf(FloatArray(bufferSize / 4), FloatArray(bufferSize / 4)) val filter = if (track.isMaster) testFilter else NullFilter - filter.thru(fin0, fin1, fout0, fout1) + filter(fin0, fin1, fout0, fout1) // final writeout diff --git a/src/net/torvald/terrarum/audio/TerrarumAudioFilter.kt b/src/net/torvald/terrarum/audio/TerrarumAudioFilter.kt index b970665b3..68a6c3319 100644 --- a/src/net/torvald/terrarum/audio/TerrarumAudioFilter.kt +++ b/src/net/torvald/terrarum/audio/TerrarumAudioFilter.kt @@ -2,11 +2,20 @@ package net.torvald.terrarum.audio import com.jme3.math.FastMath -interface TerrarumAudioFilter { - fun thru(inbuf0: List, inbuf1: List, outbuf0: List, outbuf1: List) +abstract class TerrarumAudioFilter { + var bypass = false + protected abstract fun thru(inbuf0: List, inbuf1: List, outbuf0: List, outbuf1: List) + operator fun invoke(inbuf0: List, inbuf1: List, outbuf0: List, outbuf1: List) { + if (bypass) { + outbuf1.forEachIndexed { index, outTrack -> + System.arraycopy(inbuf1[index], 0, outTrack, 0, outTrack.size) + } + } + else thru(inbuf0, inbuf1, outbuf0, outbuf1) + } } -object NullFilter: TerrarumAudioFilter { +object NullFilter: TerrarumAudioFilter() { override fun thru(inbuf0: List, inbuf1: List, outbuf0: List, outbuf1: List) { outbuf1.forEachIndexed { index, outTrack -> System.arraycopy(inbuf1[index], 0, outTrack, 0, outTrack.size) @@ -15,7 +24,7 @@ object NullFilter: TerrarumAudioFilter { } -class Lowpass(cutoff: Int, rate: Int): TerrarumAudioFilter { +class Lowpass(cutoff: Int, rate: Int): TerrarumAudioFilter() { val alpha: Float init { diff --git a/src/net/torvald/terrarum/audio/TerrarumAudioMixerTrack.kt b/src/net/torvald/terrarum/audio/TerrarumAudioMixerTrack.kt index b9e9f7722..6e701bbdb 100644 --- a/src/net/torvald/terrarum/audio/TerrarumAudioMixerTrack.kt +++ b/src/net/torvald/terrarum/audio/TerrarumAudioMixerTrack.kt @@ -114,7 +114,7 @@ class TerrarumAudioMixerTrack(val name: String, val isMaster: Boolean = false): // 1st ring of the hell: the THREADING HELL // - internal var processor = MixerTrackProcessor(32768, this) + internal var processor = MixerTrackProcessor(4096, this) private val processorThread = Thread(processor).also { it.start() }