mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-03-07 12:21:52 +09:00
reverting FFT changes
This commit is contained in:
@@ -92,26 +92,26 @@ object FFT: Disposable {
|
|||||||
|
|
||||||
fun fft(signal0: FloatArray): ComplexArray {
|
fun fft(signal0: FloatArray): ComplexArray {
|
||||||
val signal = FloatArray(signal0.size * 2) { if (it % 2 == 0) signal0[it / 2] else 0f }
|
val signal = FloatArray(signal0.size * 2) { if (it % 2 == 0) signal0[it / 2] else 0f }
|
||||||
ffts[signal0.size]!!.realForward(signal)
|
ffts[signal0.size]!!.complexForward(signal)
|
||||||
return ComplexArray(signal)
|
return ComplexArray(signal)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun fft(signal0: ComplexArray) {
|
fun fft(signal0: ComplexArray) {
|
||||||
ffts[signal0.size]!!.realForward(signal0.reim)
|
ffts[signal0.size]!!.complexForward(signal0.reim)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun fftInto(signal0: ComplexArray, out: ComplexArray) {
|
fun fftInto(signal0: ComplexArray, out: ComplexArray) {
|
||||||
System.arraycopy(signal0.reim, 0, out.reim, 0, signal0.reim.size)
|
System.arraycopy(signal0.reim, 0, out.reim, 0, signal0.reim.size)
|
||||||
ffts[signal0.size]!!.realForward(out.reim)
|
ffts[signal0.size]!!.complexForward(out.reim)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun ifftAndGetReal(signal0: ComplexArray): FloatArray {
|
fun ifftAndGetReal(signal0: ComplexArray): FloatArray {
|
||||||
ffts[signal0.size]!!.realInverse(signal0.reim, true)
|
ffts[signal0.size]!!.complexInverse(signal0.reim, true)
|
||||||
return signal0.getReal()
|
return signal0.getReal()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun ifftAndGetReal(signal0: ComplexArray, output: FloatArray) {
|
fun ifftAndGetReal(signal0: ComplexArray, output: FloatArray) {
|
||||||
ffts[signal0.size]!!.realInverse(signal0.reim, true)
|
ffts[signal0.size]!!.complexInverse(signal0.reim, true)
|
||||||
for (i in 0 until signal0.size) {
|
for (i in 0 until signal0.size) {
|
||||||
output[i] = signal0.reim[i * 2]
|
output[i] = signal0.reim[i * 2]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ class Convolv(irModule: String, irPath: String, val crossfeed: Float, gain: Floa
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
pushSumCircular(gain, inbuf[0], inbuf[1], sumbuf)
|
pushSum(gain, inbuf[0], inbuf[1], sumbuf)
|
||||||
|
|
||||||
convolve(sumbuf[0], convFFT[0], fftOutL)
|
convolve(sumbuf[0], convFFT[0], fftOutL)
|
||||||
convolve(sumbuf[1], convFFT[1], fftOutR)
|
convolve(sumbuf[1], convFFT[1], fftOutR)
|
||||||
@@ -79,6 +79,20 @@ class Convolv(irModule: String, irPath: String, val crossfeed: Float, gain: Floa
|
|||||||
processingSpeed = realtime / ptime
|
processingSpeed = realtime / ptime
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun pushSum(gain: Float, sampleL: FloatArray, sampleR: FloatArray, sumbuf: Array<ComplexArray>) {
|
||||||
|
// shift numbers
|
||||||
|
System.arraycopy(sumbuf[0].reim, sampleL.size * 2, sumbuf[0].reim, 0, sumbuf[0].reim.size - sampleL.size * 2)
|
||||||
|
System.arraycopy(sumbuf[1].reim, sampleL.size * 2, sumbuf[1].reim, 0, sumbuf[1].reim.size - sampleL.size * 2)
|
||||||
|
// fill in the shifted area
|
||||||
|
val baseI = sumbuf[0].reim.size - sampleL.size * 2
|
||||||
|
for (index in sampleL.indices) {
|
||||||
|
sumbuf[0].reim[baseI + index * 2 + 0] = (sampleL[index] * 1.000000f + sampleR[index] * crossfeed) * gain
|
||||||
|
sumbuf[0].reim[baseI + index * 2 + 1] = 0f
|
||||||
|
sumbuf[1].reim[baseI + index * 2 + 0] = (sampleL[index] * crossfeed + sampleR[index] * 1.000000f) * gain
|
||||||
|
sumbuf[1].reim[baseI + index * 2 + 1] = 0f
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private var bufferIndex = 0
|
private var bufferIndex = 0
|
||||||
private fun pushSumCircular(gain: Float, sampleL: FloatArray, sampleR: FloatArray, sumbuf: Array<ComplexArray>) {
|
private fun pushSumCircular(gain: Float, sampleL: FloatArray, sampleR: FloatArray, sumbuf: Array<ComplexArray>) {
|
||||||
val baseIdx = bufferIndex * 2
|
val baseIdx = bufferIndex * 2
|
||||||
|
|||||||
Reference in New Issue
Block a user