mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-06-12 19:44:05 +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.
|
* Created by minjaesong on 2023-11-07.
|
||||||
*/
|
*/
|
||||||
object AudioMixer: Disposable {
|
object AudioMixer: Disposable {
|
||||||
const val DEFAULT_FADEOUT_LEN = 2.4
|
const val DEFAULT_FADEOUT_LEN = 1.8
|
||||||
|
|
||||||
/** Returns a master volume */
|
/** Returns a master volume */
|
||||||
val masterVolume: Double
|
val masterVolume: Double
|
||||||
@@ -54,12 +54,20 @@ object AudioMixer: Disposable {
|
|||||||
get() = tracks[0]
|
get() = tracks[0]
|
||||||
val ambientTrack: TerrarumAudioMixerTrack
|
val ambientTrack: TerrarumAudioMixerTrack
|
||||||
get() = tracks[1]
|
get() = tracks[1]
|
||||||
|
val sfxMixTrack: TerrarumAudioMixerTrack
|
||||||
|
get() = tracks[2]
|
||||||
|
val guiTrack: TerrarumAudioMixerTrack
|
||||||
|
get() = tracks[3]
|
||||||
|
|
||||||
|
|
||||||
init {
|
init {
|
||||||
musicTrack.filters[0] = Lowpass(48000f, TerrarumAudioMixerTrack.SAMPLING_RATE)
|
musicTrack.filters[0] = Lowpass(48000f, TerrarumAudioMixerTrack.SAMPLING_RATE)
|
||||||
ambientTrack.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 fadeAkku = 0.0
|
||||||
private var fadeLength = DEFAULT_FADEOUT_LEN
|
private var fadeLength = DEFAULT_FADEOUT_LEN
|
||||||
private var fadeoutFired = false
|
private var fadeoutFired = false
|
||||||
@@ -83,27 +91,30 @@ object AudioMixer: Disposable {
|
|||||||
if (fadeoutFired) {
|
if (fadeoutFired) {
|
||||||
fadeAkku += delta
|
fadeAkku += delta
|
||||||
val step = fadeAkku / fadeLength
|
val step = fadeAkku / fadeLength
|
||||||
musicTrack.volume = FastMath.interpolateLinear(step, fadeStart, fadeTarget)
|
faderTrack.forEach { it.volume = FastMath.interpolateLinear(step, fadeStart, fadeTarget) }
|
||||||
|
|
||||||
if (fadeAkku >= fadeLength) {
|
if (fadeAkku >= fadeLength) {
|
||||||
fadeoutFired = false
|
fadeoutFired = false
|
||||||
musicTrack.volume = fadeTarget
|
musicTrack.volume = fadeTarget
|
||||||
|
faderTrack.forEach { it.volume = fadeTarget }
|
||||||
|
|
||||||
if (fadeTarget == 0.0)
|
if (fadeTarget == 0.0) {
|
||||||
musicTrack.currentTrack = null
|
musicTrack.currentTrack = null
|
||||||
|
ambientTrack.currentTrack = null
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (fadeinFired) {
|
else if (fadeinFired) {
|
||||||
fadeAkku += delta
|
fadeAkku += delta
|
||||||
val step = fadeAkku / fadeLength
|
val step = fadeAkku / fadeLength
|
||||||
musicTrack.volume = FastMath.interpolateLinear(step, fadeStart, fadeTarget)
|
faderTrack.forEach { it.volume = FastMath.interpolateLinear(step, fadeStart, fadeTarget) }
|
||||||
|
|
||||||
if (musicTrack.isPlaying == false) {
|
// if (musicTrack.isPlaying == false) {
|
||||||
musicTrack.play()
|
// musicTrack.play()
|
||||||
}
|
// }
|
||||||
|
|
||||||
if (fadeAkku >= fadeLength) {
|
if (fadeAkku >= fadeLength) {
|
||||||
musicTrack.volume = fadeTarget
|
faderTrack.forEach { it.volume = fadeTarget }
|
||||||
fadeinFired = false
|
fadeinFired = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -115,11 +126,12 @@ object AudioMixer: Disposable {
|
|||||||
val q = 400.0
|
val q = 400.0
|
||||||
val step = (q.pow(x) - 1) / (q - 1) // https://www.desmos.com/calculator/sttaq2qhzm
|
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)
|
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) {
|
if (lpAkku >= lpLength) {
|
||||||
lpOutFired = false
|
lpOutFired = false
|
||||||
(musicTrack.filters[0] as Lowpass).setCutoff(SAMPLING_RATEF)
|
faderTrack.forEach { (it.filters[0] as Lowpass).setCutoff(SAMPLING_RATEF) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (lpInFired) {
|
else if (lpInFired) {
|
||||||
@@ -128,10 +140,10 @@ object AudioMixer: Disposable {
|
|||||||
val q = 400.0
|
val q = 400.0
|
||||||
val step = log((q-1) * x + 1.0, q) // https://www.desmos.com/calculator/sttaq2qhzm
|
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)
|
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) {
|
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
|
lpInFired = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZED
|
|||||||
import net.torvald.terrarum.audio.AudioMixer
|
import net.torvald.terrarum.audio.AudioMixer
|
||||||
import net.torvald.terrarum.audio.Lowpass
|
import net.torvald.terrarum.audio.Lowpass
|
||||||
import net.torvald.terrarum.audio.TerrarumAudioMixerTrack
|
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.blockproperties.BlockPropUtil
|
||||||
import net.torvald.terrarum.blockstats.MinimapComposer
|
import net.torvald.terrarum.blockstats.MinimapComposer
|
||||||
import net.torvald.terrarum.blockstats.TileSurvey
|
import net.torvald.terrarum.blockstats.TileSurvey
|
||||||
@@ -291,7 +292,8 @@ open class TerrarumIngame(batch: FlippingSpriteBatch) : IngameInstance(batch) {
|
|||||||
IngameRenderer.setRenderedWorld(world)
|
IngameRenderer.setRenderedWorld(world)
|
||||||
blockMarkingActor.isVisible = true
|
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
|
super.show() // this function sets gameInitialised = true
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -488,6 +488,11 @@ class BasicDebugInfoWindow : UICanvas() {
|
|||||||
// slider handle
|
// slider handle
|
||||||
drawFaderHandle(batch, x + 48f, faderY + 18f + meterHeight - dBfs * meterHeight)
|
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) {
|
private fun drawFilterParam(batch: SpriteBatch, x: Int, y: Int, filter: TerrarumAudioFilter, track: TerrarumAudioMixerTrack) {
|
||||||
|
|||||||
Reference in New Issue
Block a user