mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-03-09 21:31:51 +09:00
mixer: stream lamp
This commit is contained in:
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user