mixer overlay wip

This commit is contained in:
minjaesong
2023-11-18 18:31:25 +09:00
parent dc2f58d754
commit 5c5f526d16
6 changed files with 145 additions and 8 deletions

View File

@@ -42,6 +42,7 @@ object AudioMixer: Disposable {
val masterTrack = TerrarumAudioMixerTrack("Master", true).also { master ->
tracks.forEach { master.addSidechainInput(it, 1.0) }
master.filters[0] = Buffer
}
val musicTrack: TerrarumAudioMixerTrack

View File

@@ -155,11 +155,15 @@ class MixerTrackProcessor(val bufferSize: Int, val rate: Int, val track: Terraru
}
}
}
fout1.map { it.maxOf { it.absoluteValue } }.forEachIndexed { index, fl ->
maxSigLevel[index] = fl.toDouble()
}
}
// by this time, the output buffer is filled with processed results, pause the execution
if (!track.isMaster) {
fout1.map { it.maxBy { it.absoluteValue } }.forEachIndexed { index, fl -> maxSigLevel[index] = fl.toDouble() }
this.pause()
}

View File

@@ -15,7 +15,7 @@ abstract class TerrarumAudioFilter {
}
}
object NullFilter: TerrarumAudioFilter() {
object NullFilter : TerrarumAudioFilter() {
override fun thru(inbuf0: List<FloatArray>, inbuf1: List<FloatArray>, outbuf0: List<FloatArray>, outbuf1: List<FloatArray>) {
outbuf1.forEachIndexed { index, outTrack ->
System.arraycopy(inbuf1[index], 0, outTrack, 0, outTrack.size)
@@ -24,11 +24,13 @@ object NullFilter: TerrarumAudioFilter() {
}
class Lowpass(cutoff: Float, val rate: Int): TerrarumAudioFilter() {
class Lowpass(cutoff0: Float, val rate: Int): TerrarumAudioFilter() {
var cutoff = cutoff0.toDouble(); private set
private var alpha: Float = 0f
init {
setCutoff(cutoff)
setCutoff(cutoff0)
}
fun setCutoff(cutoff: Float) {
@@ -36,6 +38,7 @@ class Lowpass(cutoff: Float, val rate: Int): TerrarumAudioFilter() {
val RC: Float = 1f / (cutoff * FastMath.TWO_PI)
val dt: Float = 1f / rate
alpha = dt / (RC + dt)
this.cutoff = cutoff.toDouble()
}
fun setCutoff(cutoff: Double) {
@@ -43,6 +46,7 @@ class Lowpass(cutoff: Float, val rate: Int): TerrarumAudioFilter() {
val RC: Double = 1.0 / (cutoff * Math.PI * 2.0)
val dt: Double = 1.0 / rate
alpha = (dt / (RC + dt)).toFloat()
this.cutoff = cutoff
}
override fun thru(inbuf0: List<FloatArray>, inbuf1: List<FloatArray>, outbuf0: List<FloatArray>, outbuf1: List<FloatArray>) {
@@ -59,3 +63,13 @@ class Lowpass(cutoff: Float, val rate: Int): TerrarumAudioFilter() {
}
}
object Buffer : TerrarumAudioFilter() {
init {
bypass = true
}
override fun thru(inbuf0: List<FloatArray>, inbuf1: List<FloatArray>, outbuf0: List<FloatArray>, outbuf1: List<FloatArray>) {
bypass = true
}
}

View File

@@ -18,6 +18,7 @@ class TerrarumAudioMixerTrack(val name: String, val isMaster: Boolean = false):
const val SAMPLING_RATE = 48000
const val SAMPLING_RATEF = 48000f
const val SAMPLING_RATED = 48000.0
const val BUFFER_SIZE = 8000
}
val hash = getHashStr()
@@ -125,8 +126,6 @@ class TerrarumAudioMixerTrack(val name: String, val isMaster: Boolean = false):
// 1st ring of the hell: the THREADING HELL //
val BUFFER_SIZE = 6000
internal var processor = MixerTrackProcessor(BUFFER_SIZE, SAMPLING_RATE, this)
private val processorThread = Thread(processor).also {
it.start()