mixer: stream lamp

This commit is contained in:
minjaesong
2023-11-19 02:22:15 +09:00
parent 19315ac6e8
commit 574c2e6745
3 changed files with 32 additions and 13 deletions

View File

@@ -21,7 +21,7 @@ import kotlin.math.pow
* Created by minjaesong on 2023-11-07.
*/
object AudioMixer: Disposable {
const val DEFAULT_FADEOUT_LEN = 2.4
const val DEFAULT_FADEOUT_LEN = 1.8
/** Returns a master volume */
val masterVolume: Double
@@ -54,12 +54,20 @@ object AudioMixer: Disposable {
get() = tracks[0]
val ambientTrack: TerrarumAudioMixerTrack
get() = tracks[1]
val sfxMixTrack: TerrarumAudioMixerTrack
get() = tracks[2]
val guiTrack: TerrarumAudioMixerTrack
get() = tracks[3]
init {
musicTrack.filters[0] = Lowpass(48000f, TerrarumAudioMixerTrack.SAMPLING_RATE)
ambientTrack.filters[0] = Lowpass(48000f, TerrarumAudioMixerTrack.SAMPLING_RATE)
sfxMixTrack.filters[0] = Lowpass(48000f, TerrarumAudioMixerTrack.SAMPLING_RATE)
}
val faderTrack = arrayOf(musicTrack, ambientTrack, sfxMixTrack)
private var fadeAkku = 0.0
private var fadeLength = DEFAULT_FADEOUT_LEN
private var fadeoutFired = false
@@ -83,27 +91,30 @@ object AudioMixer: Disposable {
if (fadeoutFired) {
fadeAkku += delta
val step = fadeAkku / fadeLength
musicTrack.volume = FastMath.interpolateLinear(step, fadeStart, fadeTarget)
faderTrack.forEach { it.volume = FastMath.interpolateLinear(step, fadeStart, fadeTarget) }
if (fadeAkku >= fadeLength) {
fadeoutFired = false
musicTrack.volume = fadeTarget
faderTrack.forEach { it.volume = fadeTarget }
if (fadeTarget == 0.0)
if (fadeTarget == 0.0) {
musicTrack.currentTrack = null
ambientTrack.currentTrack = null
}
}
}
else if (fadeinFired) {
fadeAkku += delta
val step = fadeAkku / fadeLength
musicTrack.volume = FastMath.interpolateLinear(step, fadeStart, fadeTarget)
faderTrack.forEach { it.volume = FastMath.interpolateLinear(step, fadeStart, fadeTarget) }
if (musicTrack.isPlaying == false) {
musicTrack.play()
}
// if (musicTrack.isPlaying == false) {
// musicTrack.play()
// }
if (fadeAkku >= fadeLength) {
musicTrack.volume = fadeTarget
faderTrack.forEach { it.volume = fadeTarget }
fadeinFired = false
}
}
@@ -115,11 +126,12 @@ object AudioMixer: Disposable {
val q = 400.0
val step = (q.pow(x) - 1) / (q - 1) // https://www.desmos.com/calculator/sttaq2qhzm
val cutoff = FastMath.interpolateLinear(step, SAMPLING_RATED / 100.0, SAMPLING_RATED)
(musicTrack.filters[0] as Lowpass).setCutoff(cutoff)
faderTrack.forEach { (it.filters[0] as Lowpass).setCutoff(cutoff) }
if (lpAkku >= lpLength) {
lpOutFired = false
(musicTrack.filters[0] as Lowpass).setCutoff(SAMPLING_RATEF)
faderTrack.forEach { (it.filters[0] as Lowpass).setCutoff(SAMPLING_RATEF) }
}
}
else if (lpInFired) {
@@ -128,10 +140,10 @@ object AudioMixer: Disposable {
val q = 400.0
val step = log((q-1) * x + 1.0, q) // https://www.desmos.com/calculator/sttaq2qhzm
val cutoff = FastMath.interpolateLinear(step, SAMPLING_RATED, SAMPLING_RATED / 100.0)
(musicTrack.filters[0] as Lowpass).setCutoff(cutoff)
faderTrack.forEach { (it.filters[0] as Lowpass).setCutoff(cutoff) }
if (lpAkku >= lpLength) {
(musicTrack.filters[0] as Lowpass).setCutoff(SAMPLING_RATEF / 100.0)
faderTrack.forEach { (it.filters[0] as Lowpass).setCutoff(SAMPLING_RATEF / 100.0) }
lpInFired = false
}
}

View File

@@ -15,6 +15,7 @@ import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZED
import net.torvald.terrarum.audio.AudioMixer
import net.torvald.terrarum.audio.Lowpass
import net.torvald.terrarum.audio.TerrarumAudioMixerTrack
import net.torvald.terrarum.audio.TerrarumAudioMixerTrack.Companion.SAMPLING_RATEF
import net.torvald.terrarum.blockproperties.BlockPropUtil
import net.torvald.terrarum.blockstats.MinimapComposer
import net.torvald.terrarum.blockstats.TileSurvey
@@ -291,7 +292,8 @@ open class TerrarumIngame(batch: FlippingSpriteBatch) : IngameInstance(batch) {
IngameRenderer.setRenderedWorld(world)
blockMarkingActor.isVisible = true
(AudioMixer.musicTrack.filters[0] as Lowpass).setCutoff(TerrarumAudioMixerTrack.SAMPLING_RATEF)
AudioMixer.faderTrack.forEach { (it.filters[0] as Lowpass).setCutoff(SAMPLING_RATEF) }
super.show() // this function sets gameInitialised = true
}

View File

@@ -488,6 +488,11 @@ class BasicDebugInfoWindow : UICanvas() {
// slider handle
drawFaderHandle(batch, x + 48f, faderY + 18f + meterHeight - dBfs * meterHeight)
// currently streaming
if (track.streamPlaying) {
batch.color = Color.LIME
App.fontSmallNumbers.draw(batch, "\u00C0", x + 17f, faderY + 1f)
}
}
private fun drawFilterParam(batch: SpriteBatch, x: Int, y: Int, filter: TerrarumAudioFilter, track: TerrarumAudioMixerTrack) {