BUFFER_SIZE is now strictly samples count

This commit is contained in:
minjaesong
2023-12-11 14:03:34 +09:00
parent 949376b26a
commit 96c9aed25a
11 changed files with 83 additions and 78 deletions

View File

@@ -17,7 +17,7 @@ class BinoPan(var pan: Float, var earDist: Float = 0.18f): TerrarumAudioFilter()
private val PANNING_CONST = 3.0 // 3dB panning rule
private val delayLine = FloatArray(TerrarumAudioMixerTrack.BUFFER_SIZE / 4)
private val delayLine = FloatArray(TerrarumAudioMixerTrack.AUDIO_BUFFER_SIZE)
private fun getFrom(index: Float, buf0: FloatArray, buf1: FloatArray): Float {
val index = index.toInt() // TODO resampling
@@ -55,7 +55,7 @@ class BinoPan(var pan: Float, var earDist: Float = 0.18f): TerrarumAudioFilter()
}
for (ch in 0..1) {
for (i in 0 until TerrarumAudioMixerTrack.BUFFER_SIZE / 4) {
for (i in 0 until TerrarumAudioMixerTrack.AUDIO_BUFFER_SIZE) {
outbuf[ch][i] = getFrom(i - delays[ch], delayLine, inbuf[0]) * mults[ch]
}
}

View File

@@ -6,7 +6,7 @@ import net.torvald.terrarum.roundToFloat
class Bitcrush(var steps: Int, var inputGain: Float = 1f): TerrarumAudioFilter() {
override fun thru(inbuf: List<FloatArray>, outbuf: List<FloatArray>) {
for (ch in outbuf.indices) {
for (i in 0 until TerrarumAudioMixerTrack.BUFFER_SIZE / 4) {
for (i in 0 until TerrarumAudioMixerTrack.AUDIO_BUFFER_SIZE) {
val inn = ((inbuf[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

View File

@@ -1,10 +1,9 @@
package net.torvald.terrarum.audio.dsp
import com.jme3.math.FastMath
import net.torvald.terrarum.App.measureDebugTime
import net.torvald.terrarum.App.setDebugTime
import net.torvald.terrarum.audio.*
import net.torvald.terrarum.audio.TerrarumAudioMixerTrack.Companion.BUFFER_SIZE
import net.torvald.terrarum.audio.TerrarumAudioMixerTrack.Companion.AUDIO_BUFFER_SIZE
import java.io.File
class Convolv(ir: File, val gain: Float = 1f / 256f): TerrarumAudioFilter() {
@@ -13,7 +12,7 @@ class Convolv(ir: File, val gain: Float = 1f / 256f): TerrarumAudioFilter() {
private val convFFT: Array<ComplexArray>
private val inbuf: Array<ComplexArray>
private val BLOCKSIZE = TerrarumAudioMixerTrack.BUFFER_SIZE / 4
private val BLOCKSIZE = TerrarumAudioMixerTrack.AUDIO_BUFFER_SIZE
var processingSpeed = 1f; private set
@@ -60,7 +59,7 @@ class Convolv(ir: File, val gain: Float = 1f / 256f): TerrarumAudioFilter() {
// fill up part* dictionary
// define "master" array
var c = BUFFER_SIZE / 4
var c = AUDIO_BUFFER_SIZE
val master0 = arrayListOf(c)
while (c < fftLen) {
master0.add(c)

View File

@@ -4,7 +4,7 @@ import net.torvald.terrarum.audio.TerrarumAudioMixerTrack
class Gain(var gain: Float): TerrarumAudioFilter() {
override fun thru(inbuf: List<FloatArray>, outbuf: List<FloatArray>) {
for (i in 0 until TerrarumAudioMixerTrack.BUFFER_SIZE / 4) {
for (i in 0 until TerrarumAudioMixerTrack.AUDIO_BUFFER_SIZE) {
outbuf[0][i] = inbuf[0][i] * gain
outbuf[1][i] = inbuf[1][i] * gain
}

View File

@@ -30,7 +30,7 @@ class Reverb(val delayMS: Float = 36f, var feedback: Float = 0.92f, var lowpass:
val alphaHi = RCHi / (RCHi + dt)
for (ch in outbuf.indices) {
for (i in 0 until TerrarumAudioMixerTrack.BUFFER_SIZE / 4) {
for (i in 0 until TerrarumAudioMixerTrack.AUDIO_BUFFER_SIZE) {
val inn = inbuf[ch][i]
// reverb

View File

@@ -4,10 +4,10 @@ import net.torvald.terrarum.audio.TerrarumAudioMixerTrack
import kotlin.math.roundToInt
class Scope : TerrarumAudioFilter() {
val backbufL = Array((4096f / TerrarumAudioMixerTrack.BUFFER_SIZE * 4).roundToInt().coerceAtLeast(1)) { FloatArray(
TerrarumAudioMixerTrack.BUFFER_SIZE / 4) }
val backbufR = Array((4096f / TerrarumAudioMixerTrack.BUFFER_SIZE * 4).roundToInt().coerceAtLeast(1)) { FloatArray(
TerrarumAudioMixerTrack.BUFFER_SIZE / 4) }
val backbufL = Array((4096f / TerrarumAudioMixerTrack.AUDIO_BUFFER_SIZE).roundToInt().coerceAtLeast(1)) { FloatArray(
TerrarumAudioMixerTrack.AUDIO_BUFFER_SIZE) }
val backbufR = Array((4096f / TerrarumAudioMixerTrack.AUDIO_BUFFER_SIZE).roundToInt().coerceAtLeast(1)) { FloatArray(
TerrarumAudioMixerTrack.AUDIO_BUFFER_SIZE) }
private val sqrt2p = 0.7071067811865475
@@ -17,11 +17,11 @@ class Scope : TerrarumAudioFilter() {
backbufL[i] = backbufL[i - 1]
backbufR[i] = backbufR[i - 1]
}
backbufL[0] = FloatArray(TerrarumAudioMixerTrack.BUFFER_SIZE / 4)
backbufR[0] = FloatArray(TerrarumAudioMixerTrack.BUFFER_SIZE / 4)
backbufL[0] = FloatArray(TerrarumAudioMixerTrack.AUDIO_BUFFER_SIZE)
backbufR[0] = FloatArray(TerrarumAudioMixerTrack.AUDIO_BUFFER_SIZE)
// plot dots
for (i in 0 until TerrarumAudioMixerTrack.BUFFER_SIZE /4) {
for (i in 0 until TerrarumAudioMixerTrack.AUDIO_BUFFER_SIZE) {
val y0 = inbuf[0][i] * 0.7
val x0 = -inbuf[1][i] * 0.7 // rotate the domain by -90 deg

View File

@@ -4,7 +4,7 @@ import net.torvald.terrarum.audio.TerrarumAudioMixerTrack
object XYtoMS: TerrarumAudioFilter() {
override fun thru(inbuf: List<FloatArray>, outbuf: List<FloatArray>) {
for (i in 0 until TerrarumAudioMixerTrack.BUFFER_SIZE / 4) {
for (i in 0 until TerrarumAudioMixerTrack.AUDIO_BUFFER_SIZE) {
val X = inbuf[0][i]
val Y = inbuf[1][i]
val M = (X + Y) / 2f
@@ -17,7 +17,7 @@ object XYtoMS: TerrarumAudioFilter() {
object MStoXY: TerrarumAudioFilter() {
override fun thru(inbuf: List<FloatArray>, outbuf: List<FloatArray>) {
for (i in 0 until TerrarumAudioMixerTrack.BUFFER_SIZE / 4) {
for (i in 0 until TerrarumAudioMixerTrack.AUDIO_BUFFER_SIZE) {
val M = inbuf[0][i]
val S = inbuf[1][i]
val X = M + S