mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-06-14 12:34:05 +09:00
mixer overlay wip
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user