static effect looops

This commit is contained in:
minjaesong
2024-01-24 17:51:00 +09:00
parent 89b372e4d8
commit 2016be562b
9 changed files with 32 additions and 16 deletions

Binary file not shown.

Binary file not shown.

View File

@@ -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)
}

View File

@@ -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)
}
}

View File

@@ -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<FloatArray>, outbuf: List<FloatArray>) {
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
}
}

View File

@@ -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
)

View File

@@ -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<ItemID>()

View File

@@ -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