From 2016be562bb35db0ab4ef5bbca476ce1497c598c Mon Sep 17 00:00:00 2001 From: minjaesong Date: Wed, 24 Jan 2024 17:51:00 +0900 Subject: [PATCH] static effect looops --- .../audio/effects/static/film_pops_lowpass.ogg | 3 +++ .../basegame/audio/effects/static/phono_pops.ogg | 3 +++ .../basegame/audio/effects/static/tape_hiss.ogg | 3 +++ src/net/torvald/terrarum/audio/AudioMixer.kt | 11 +++++++---- .../terrarum/audio/MixerTrackProcessor.kt | 16 +++++++++------- src/net/torvald/terrarum/audio/dsp/LoFi.kt | 5 +++-- src/net/torvald/terrarum/audio/dsp/Phono.kt | 2 +- .../modulebasegame/gameactors/FixtureJukebox.kt | 2 +- .../torvald/terrarum/ui/BasicDebugInfoWindow.kt | 3 ++- 9 files changed, 32 insertions(+), 16 deletions(-) create mode 100644 assets/mods/basegame/audio/effects/static/film_pops_lowpass.ogg create mode 100644 assets/mods/basegame/audio/effects/static/phono_pops.ogg create mode 100644 assets/mods/basegame/audio/effects/static/tape_hiss.ogg diff --git a/assets/mods/basegame/audio/effects/static/film_pops_lowpass.ogg b/assets/mods/basegame/audio/effects/static/film_pops_lowpass.ogg new file mode 100644 index 000000000..8627968db --- /dev/null +++ b/assets/mods/basegame/audio/effects/static/film_pops_lowpass.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e9387069f61546e8e2061b062f8fa578a004fe7fac0b86b4d26e838dc641f41c +size 764060 diff --git a/assets/mods/basegame/audio/effects/static/phono_pops.ogg b/assets/mods/basegame/audio/effects/static/phono_pops.ogg new file mode 100644 index 000000000..612817a6a --- /dev/null +++ b/assets/mods/basegame/audio/effects/static/phono_pops.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5b07662b0d92370ab5c9154a8f15b8a59c9ba17c5f6bcca07fa7d02c3a2440c0 +size 499230 diff --git a/assets/mods/basegame/audio/effects/static/tape_hiss.ogg b/assets/mods/basegame/audio/effects/static/tape_hiss.ogg new file mode 100644 index 000000000..0a8e2f949 --- /dev/null +++ b/assets/mods/basegame/audio/effects/static/tape_hiss.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c0d82a76da58290da9400d24561c9ddc95be0da34c69a5e14e01ff45c3b6a5b0 +size 396039 diff --git a/src/net/torvald/terrarum/audio/AudioMixer.kt b/src/net/torvald/terrarum/audio/AudioMixer.kt index 64f36ac8e..c6e81ffe7 100644 --- a/src/net/torvald/terrarum/audio/AudioMixer.kt +++ b/src/net/torvald/terrarum/audio/AudioMixer.kt @@ -32,6 +32,9 @@ class AudioMixer(val bufferSize: Int): Disposable { const val SPEED_OF_SOUND = 340f const val DEFAULT_FADEOUT_LEN = 1.8 + + internal const val DS_FLTIDX_PAN = 2 + internal const val DS_FLTIDX_LOW = 3 } @@ -229,11 +232,11 @@ class AudioMixer(val bufferSize: Int): Disposable { it.addSidechainInput(sfxSumBus, 1.0) } - convolveBusOpen.filters[1] = Convolv(ModMgr.getFile("basegame", "audio/convolution/EchoThief - PurgatoryChasm.bin"), decibelsToFullscale(-6.0).toFloat()) + convolveBusOpen.filters[1] = Convolv("basegame", "audio/convolution/EchoThief - PurgatoryChasm.bin", decibelsToFullscale(-6.0).toFloat()) convolveBusOpen.filters[2] = Gain(decibelsToFullscale(17.0).toFloat()) // don't make it too loud; it'll sound like a shit convolveBusOpen.volume = 0.5 // will be controlled by the other updater which surveys the world - convolveBusCave.filters[1] = Convolv(ModMgr.getFile("basegame", "audio/convolution/EchoThief - WaterplacePark-trimmed.bin"), decibelsToFullscale(-3.0).toFloat()) + convolveBusCave.filters[1] = Convolv("basegame", "audio/convolution/EchoThief - WaterplacePark-trimmed.bin", decibelsToFullscale(-3.0).toFloat()) convolveBusCave.filters[2] = Gain(decibelsToFullscale(16.0).toFloat()) convolveBusCave.volume = 0.5 // will be controlled by the other updater which surveys the world @@ -247,8 +250,8 @@ class AudioMixer(val bufferSize: Int): Disposable { dynamicTracks.forEach { - it.filters[0] = BinoPan(0f) - it.filters[1] = Lowpass(SAMPLING_RATE / 2f) + it.filters[DS_FLTIDX_PAN] = BinoPan(0f) + it.filters[DS_FLTIDX_LOW] = Lowpass(SAMPLING_RATE / 2f) sfxSumBus.addSidechainInput(it, 1.0) } diff --git a/src/net/torvald/terrarum/audio/MixerTrackProcessor.kt b/src/net/torvald/terrarum/audio/MixerTrackProcessor.kt index cea85f40d..c81ca35d8 100644 --- a/src/net/torvald/terrarum/audio/MixerTrackProcessor.kt +++ b/src/net/torvald/terrarum/audio/MixerTrackProcessor.kt @@ -3,6 +3,8 @@ package net.torvald.terrarum.audio import com.badlogic.gdx.utils.Queue import net.torvald.reflection.forceInvoke import net.torvald.terrarum.* +import net.torvald.terrarum.audio.AudioMixer.Companion.DS_FLTIDX_LOW +import net.torvald.terrarum.audio.AudioMixer.Companion.DS_FLTIDX_PAN import net.torvald.terrarum.audio.AudioMixer.Companion.SPEED_OF_SOUND_AIR import net.torvald.terrarum.audio.TerrarumAudioMixerTrack.Companion.SAMPLING_RATE import net.torvald.terrarum.audio.TerrarumAudioMixerTrack.Companion.SAMPLING_RATED @@ -117,22 +119,22 @@ class MixerTrackProcessor(bufferSize: Int, val rate: Int, val track: TerrarumAud // update panning and shits if (track.trackType == TrackType.DYNAMIC_SOURCE && track.isPlaying) { - (track.filters[0] as BinoPan).earDist = App.audioMixer.listenerHeadSize + (track.filters[DS_FLTIDX_PAN] as BinoPan).earDist = App.audioMixer.listenerHeadSize if (App.audioMixer.actorNowPlaying != null) { if (track.trackingTarget == null || track.trackingTarget == App.audioMixer.actorNowPlaying) { // "reset" the track track.volume = track.maxVolume - (track.filters[0] as BinoPan).pan = 0f - (track.filters[1] as Lowpass).setCutoff(SAMPLING_RATE / 2f) + (track.filters[DS_FLTIDX_PAN] as BinoPan).pan = 0f + (track.filters[DS_FLTIDX_LOW] as Lowpass).setCutoff(SAMPLING_RATE / 2f) } else if (track.trackingTarget is ActorWithBody) { val relativeXpos = relativeXposition(App.audioMixer.actorNowPlaying!!, track.trackingTarget as ActorWithBody) val distFromActor = distBetweenActors(App.audioMixer.actorNowPlaying!!, track.trackingTarget as ActorWithBody) val vol = track.maxVolume * getVolFun(distFromActor / distFalloff).coerceAtLeast(0.0) track.volume = vol - (track.filters[0] as BinoPan).pan = (1.3f * relativeXpos / distFalloff).toFloat() - (track.filters[1] as Lowpass).setCutoff( + (track.filters[DS_FLTIDX_PAN] as BinoPan).pan = (1.3f * relativeXpos / distFalloff).toFloat() + (track.filters[DS_FLTIDX_LOW] as Lowpass).setCutoff( (SAMPLING_RATED*0.5) / (24.0 * (distFromActor / distFalloff).sqr() + 1.0) ) @@ -155,8 +157,8 @@ class MixerTrackProcessor(bufferSize: Int, val rate: Int, val track: TerrarumAud else { // "reset" the track track.volume = track.maxVolume - (track.filters[0] as BinoPan).pan = 0f - (track.filters[1] as Lowpass).setCutoff(SAMPLING_RATE / 2f) + (track.filters[DS_FLTIDX_PAN] as BinoPan).pan = 0f + (track.filters[DS_FLTIDX_LOW] as Lowpass).setCutoff(SAMPLING_RATE / 2f) } } diff --git a/src/net/torvald/terrarum/audio/dsp/LoFi.kt b/src/net/torvald/terrarum/audio/dsp/LoFi.kt index f5bf2ba46..9cdacc551 100644 --- a/src/net/torvald/terrarum/audio/dsp/LoFi.kt +++ b/src/net/torvald/terrarum/audio/dsp/LoFi.kt @@ -6,6 +6,7 @@ import net.torvald.reflection.forceInvoke import net.torvald.terrarum.App import net.torvald.terrarum.audio.AudioHelper import net.torvald.terrarum.audio.AudioProcessBuf.Companion.MP3_CHUNK_SIZE +import net.torvald.terrarum.audio.decibelsToFullscale import net.torvald.terrarum.serialise.toUint import java.io.File import kotlin.math.absoluteValue @@ -43,8 +44,8 @@ open class LoFi( private fun staticMixThru(inbuf: List, outbuf: List) { for (h in 0 until App.audioBufferSize) { - outbuf[0][h] = inbuf[0][h] + staticSample[0][staticSamplePlayCursor] - outbuf[1][h] = inbuf[1][h] + staticSample[1][staticSamplePlayCursor] + outbuf[0][h] = inbuf[0][h] + staticSample[0][staticSamplePlayCursor] * 2.512f // +8 dB + outbuf[1][h] = inbuf[1][h] + staticSample[1][staticSamplePlayCursor] * 2.512f // +8 dB staticSamplePlayCursor = (staticSamplePlayCursor + 1) % staticSample[0].size } } diff --git a/src/net/torvald/terrarum/audio/dsp/Phono.kt b/src/net/torvald/terrarum/audio/dsp/Phono.kt index 6b39e5ef7..8f4f5524a 100644 --- a/src/net/torvald/terrarum/audio/dsp/Phono.kt +++ b/src/net/torvald/terrarum/audio/dsp/Phono.kt @@ -30,6 +30,6 @@ class Tape(irModule: String, irPath: String, crossfeed: Float, gain: Float) : Lo * Created by minjaesong on 2024-01-24. */ class Holo(irModule: String, irPath: String, crossfeed: Float, gain: Float) : LoFi( - "basegame", "audio/effects/static/film_pops.ogg", + "basegame", "audio/effects/static/film_pops_lowpass.ogg", irModule, irPath, crossfeed, gain ) \ No newline at end of file diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureJukebox.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureJukebox.kt index e8e37ebaf..58413590d 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureJukebox.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureJukebox.kt @@ -42,7 +42,7 @@ class FixtureJukebox : Electric, PlaysMusic { @Transient private val backLamp: SheetSpriteAnimation - @Transient private val filterIndex = 2 + @Transient private val filterIndex = 0 internal val discInventory = ArrayList() diff --git a/src/net/torvald/terrarum/ui/BasicDebugInfoWindow.kt b/src/net/torvald/terrarum/ui/BasicDebugInfoWindow.kt index a9511c1ef..518ba566c 100644 --- a/src/net/torvald/terrarum/ui/BasicDebugInfoWindow.kt +++ b/src/net/torvald/terrarum/ui/BasicDebugInfoWindow.kt @@ -14,6 +14,7 @@ import net.torvald.terrarum.Terrarum.mouseTileY import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZE import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZED import net.torvald.terrarum.audio.* +import net.torvald.terrarum.audio.AudioMixer.Companion.DS_FLTIDX_PAN import net.torvald.terrarum.audio.dsp.* import net.torvald.terrarum.controller.TerrarumController import net.torvald.terrarum.gameworld.GameWorld @@ -519,7 +520,7 @@ class BasicDebugInfoWindow : UICanvas() { Toolkit.fillArea(batch, x, y, miniW, miniH) // pan - val panw = (track.filters[0] as BinoPan).pan * 0.5f * miniW + val panw = (track.filters[DS_FLTIDX_PAN] as BinoPan).pan * 0.5f * miniW batch.color = COL_METER_GRAD Toolkit.fillArea(batch, x.toFloat(), y.toFloat(), miniW.toFloat(), 2f) batch.color = COL_METER_GRAD2