mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-03-07 20:31:51 +09:00
mixer to properly show signals larger than 1.0
This commit is contained in:
@@ -392,7 +392,15 @@ class Convolv(ir: File, val gain: Float = decibelsToFullscale(-12.0).toFloat()):
|
||||
private fun multiply(X: Array<Complex>, H: Array<Complex>): Array<Complex> {
|
||||
if (X.size != H.size) throw IllegalArgumentException()
|
||||
return Array(X.size) {
|
||||
X[it].multiply(H[it])
|
||||
//X[it].multiply(H[it])
|
||||
|
||||
// following is a snippet of the code from org.apache.commons.math3.complex.multiply,
|
||||
// to remove the non-necessary sanity checks
|
||||
val a = X[it]
|
||||
val b = H[it]
|
||||
val re = a.real * b.real - a.imaginary * b.imaginary
|
||||
val im = a.real * b.imaginary + a.imaginary * b.real
|
||||
Complex(re, im)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -21,7 +21,6 @@ import net.torvald.terrarum.imagefont.TinyAlphNum
|
||||
import net.torvald.terrarum.modulebasegame.IngameRenderer
|
||||
import net.torvald.terrarum.modulebasegame.TerrarumIngame
|
||||
import net.torvald.terrarum.modulebasegame.ui.ItemSlotImageFactory
|
||||
import net.torvald.terrarum.modulebasegame.ui.abs
|
||||
import net.torvald.terrarum.weather.WeatherDirBox
|
||||
import net.torvald.terrarum.weather.WeatherMixer
|
||||
import net.torvald.terrarum.weather.WeatherStateBox
|
||||
@@ -373,11 +372,16 @@ class BasicDebugInfoWindow : UICanvas() {
|
||||
}
|
||||
}
|
||||
|
||||
private val meterGradSize = 9
|
||||
private val meterGradCountMinusOne = 22
|
||||
private val meterTroughHeight = meterGradCountMinusOne * meterGradSize + 5
|
||||
private val meterHeight = meterTroughHeight - 4
|
||||
|
||||
private val stripW = 56
|
||||
private val halfStripW = stripW / 2
|
||||
private val stripGap = 1
|
||||
private val stripFilterHeight = 16
|
||||
private val stripFaderHeight = 200
|
||||
private val stripFaderHeight = meterHeight + 20
|
||||
private val numberOfFilters = 10
|
||||
private val stripH = stripFaderHeight + stripFilterHeight * numberOfFilters + 16
|
||||
|
||||
@@ -395,14 +399,13 @@ class BasicDebugInfoWindow : UICanvas() {
|
||||
private val COL_SENDS_GRAD = Color(0x50751c_aa)
|
||||
private val COL_SENDS_GRAD2 = Color(0xa0f225_aa.toInt())
|
||||
private val COL_METER_BAR = Color(0x4caee5_aa)
|
||||
private val COL_METER_BAR_OVER = Color(0xef8297_aa.toInt())
|
||||
private val COL_METER_COMP_BAR = Color(0xf3d458_aa.toInt())
|
||||
private val COL_METER_COMP_BAR2 = Color(0x7f6b18_aa.toInt())
|
||||
|
||||
private val FILTER_NAME_ACTIVE = Color(0xeeeeee_bf.toInt())
|
||||
private val FILTER_BYPASSED = Color(0xf1b934_bf.toInt())
|
||||
private val trackBack = listOf(COL_WELL, COL_WELL2)
|
||||
private val meterTroughHeight = 16 * 11 + 5
|
||||
private val meterHeight = meterTroughHeight - 4
|
||||
|
||||
private val trackCount = 64//(AudioMixer.tracks + AudioMixer.masterTrack).size
|
||||
private val mixerLastTimeHadClipping = Array(trackCount) { arrayOf(0L, 0L) }
|
||||
@@ -429,7 +432,8 @@ class BasicDebugInfoWindow : UICanvas() {
|
||||
}
|
||||
}
|
||||
|
||||
private val dbLow = 48.0
|
||||
private val dbOver = 6.0
|
||||
private val dbLow = 60.0
|
||||
|
||||
private val oldPeak = Array(trackCount) { arrayOf(0.0, 0.0) }
|
||||
private val oldRMS = Array(trackCount) { arrayOf(0.0, 0.0) }
|
||||
@@ -501,34 +505,40 @@ class BasicDebugInfoWindow : UICanvas() {
|
||||
batch.color = FILTER_NAME_ACTIVE
|
||||
App.fontSmallNumbers.draw(batch, dBstr, sliderX - 23f, faderY+1f)
|
||||
|
||||
// fader trough
|
||||
// fader trough and grads
|
||||
batch.color = COL_METER_TROUGH
|
||||
Toolkit.fillArea(batch, x+16, faderY+16, 19, meterTroughHeight)
|
||||
for (i in 0..16) {
|
||||
val y = faderY + 18 + i * 11
|
||||
val x = x + if (i == 0 || i == 16) 16 else 17
|
||||
val w = if (i == 0 || i == 16) 19 else 17
|
||||
batch.color = if (i == 0 || i == 16) COL_METER_GRAD2 else COL_METER_GRAD
|
||||
for (i in 0..meterGradCountMinusOne) {
|
||||
val y = faderY + 18 + i * meterGradSize
|
||||
val x = x + if (i == 0 || i == meterGradCountMinusOne) 16 else 17
|
||||
val w = if (i == 0 || i == meterGradCountMinusOne) 19 else 17
|
||||
batch.color = if (i == 0 || i == meterGradCountMinusOne) COL_METER_GRAD2 else COL_METER_GRAD
|
||||
Toolkit.fillArea(batch, x, y, w, 1)
|
||||
}
|
||||
|
||||
// fader labels
|
||||
batch.color = FILTER_NAME_ACTIVE
|
||||
for (i in 0..16 step 2) {
|
||||
val y = faderY + 11f + i * 11
|
||||
val s = (i*dbLow/16).roundToInt().toString().padStart(2, ' ')
|
||||
for (i in 0..meterGradCountMinusOne step 2) {
|
||||
val y = faderY + meterGradSize.toFloat() + i * meterGradSize + 2
|
||||
val s = (i*3 - 6).absoluteValue.toString().padStart(2, ' ')
|
||||
App.fontSmallNumbers.draw(batch, s, x + 1f, y)
|
||||
}
|
||||
|
||||
// fader
|
||||
batch.color = COL_METER_BAR
|
||||
val decibelZeroMeterHeight = ((dbLow - dbOver) / dbLow * -meterHeight).coerceAtMost(0.0).toFloat()
|
||||
for (ch in 0..1) {
|
||||
val fs = FastMath.interpolateLinear(PEAK_SMOOTHING_FACTOR, track.processor.maxSigLevel[ch], oldPeak[index][ch])
|
||||
val dBfs = fullscaleToDecibels(fs)
|
||||
|
||||
val x = x + 19f + 7 * ch
|
||||
val h = ((dBfs + dbLow) / dbLow * -meterHeight).coerceAtMost(0.0).toFloat()
|
||||
Toolkit.fillArea(batch, x, faderY + 18f + meterHeight, 6f, h)
|
||||
val h = ((dBfs + (dbLow - dbOver)) / dbLow * -meterHeight).coerceAtMost(0.0).toFloat()
|
||||
|
||||
batch.color = COL_METER_BAR
|
||||
Toolkit.fillArea(batch, x, faderY + 17f + meterHeight, 6f, maxOf(h, decibelZeroMeterHeight))
|
||||
if (dBfs > 0.0) {
|
||||
batch.color = COL_METER_BAR_OVER
|
||||
Toolkit.fillArea(batch, x, faderY + 17f + meterHeight + decibelZeroMeterHeight, 6f, h - decibelZeroMeterHeight)
|
||||
}
|
||||
|
||||
oldPeak[index][ch] = fs
|
||||
}
|
||||
@@ -540,8 +550,8 @@ class BasicDebugInfoWindow : UICanvas() {
|
||||
val dBfs = fullscaleToDecibels(rms)
|
||||
|
||||
val x = x + 19f + 7 * ch
|
||||
val h = ((dBfs + dbLow) / dbLow * -meterHeight).coerceAtMost(0.0).toFloat()
|
||||
Toolkit.fillArea(batch, x, faderY + 19f + meterHeight + h, 6f, -2f)
|
||||
val h = ((dBfs + (dbLow - dbOver)) / dbLow * -meterHeight).coerceAtMost(0.0).toFloat()
|
||||
Toolkit.fillArea(batch, x, faderY + 18f + meterHeight + h, 6f, -2f)
|
||||
|
||||
oldRMS[index][ch] = rms
|
||||
}
|
||||
@@ -556,7 +566,7 @@ class BasicDebugInfoWindow : UICanvas() {
|
||||
|
||||
val h = meterHeight + ((dBfs + dbLow) / dbLow * -meterHeight).coerceAtMost(0.0).toFloat()
|
||||
batch.color = COL_METER_COMP_BAR
|
||||
Toolkit.fillArea(batch, x + 16f + ch * 17, faderY + 18f, 2f, h)
|
||||
Toolkit.fillArea(batch, x + 16f + ch * 17, faderY + 19f, 2f, h)
|
||||
|
||||
oldComp[index][ch] = down
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user