From e0257dfe3d230e89acb6038c58ea5c5b08f77aef Mon Sep 17 00:00:00 2001 From: minjaesong Date: Thu, 23 Nov 2023 20:10:36 +0900 Subject: [PATCH] bitcrusher --- .../torvald/terrarum/audio/TerrarumAudioFilter.kt | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/net/torvald/terrarum/audio/TerrarumAudioFilter.kt b/src/net/torvald/terrarum/audio/TerrarumAudioFilter.kt index 7f0b27195..d474aca7b 100644 --- a/src/net/torvald/terrarum/audio/TerrarumAudioFilter.kt +++ b/src/net/torvald/terrarum/audio/TerrarumAudioFilter.kt @@ -5,6 +5,7 @@ import com.jme3.math.FastMath.sin import net.torvald.terrarum.audio.AudioMixer.SPEED_OF_SOUND import net.torvald.terrarum.audio.TerrarumAudioMixerTrack.Companion.BUFFER_SIZE import net.torvald.terrarum.audio.TerrarumAudioMixerTrack.Companion.SAMPLING_RATEF +import net.torvald.terrarum.roundToFloat import kotlin.math.absoluteValue import kotlin.math.roundToInt import kotlin.math.tanh @@ -235,3 +236,16 @@ class BinoPan(var pan: Float, var earDist: Float = 0.18f): TerrarumAudioFilter() } } } + +class Bitcrush(var steps: Int, var inputGain: Float = 1f): TerrarumAudioFilter() { + override fun thru(inbuf0: List, inbuf1: List, outbuf0: List, outbuf1: List) { + for (ch in 0 until outbuf1.size) { + for (i in 0 until BUFFER_SIZE / 4) { + val inn = ((inbuf1[ch][i] * inputGain).coerceIn(-1f, 1f) + 1f) / 2f // 0f..1f + val stepped = (inn * (steps - 1)).roundToFloat() / (steps - 1) + val out = (stepped * 2f) - 1f // -1f..1f + outbuf1[ch][i] = out + } + } + } +} \ No newline at end of file