mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-03-13 15:16:07 +09:00
static effect looops
This commit is contained in:
BIN
assets/mods/basegame/audio/effects/static/film_pops_lowpass.ogg
LFS
Normal file
BIN
assets/mods/basegame/audio/effects/static/film_pops_lowpass.ogg
LFS
Normal file
Binary file not shown.
BIN
assets/mods/basegame/audio/effects/static/phono_pops.ogg
LFS
Normal file
BIN
assets/mods/basegame/audio/effects/static/phono_pops.ogg
LFS
Normal file
Binary file not shown.
BIN
assets/mods/basegame/audio/effects/static/tape_hiss.ogg
LFS
Normal file
BIN
assets/mods/basegame/audio/effects/static/tape_hiss.ogg
LFS
Normal file
Binary file not shown.
@@ -32,6 +32,9 @@ class AudioMixer(val bufferSize: Int): Disposable {
|
|||||||
const val SPEED_OF_SOUND = 340f
|
const val SPEED_OF_SOUND = 340f
|
||||||
|
|
||||||
const val DEFAULT_FADEOUT_LEN = 1.8
|
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)
|
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.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
|
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.filters[2] = Gain(decibelsToFullscale(16.0).toFloat())
|
||||||
convolveBusCave.volume = 0.5 // will be controlled by the other updater which surveys the world
|
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 {
|
dynamicTracks.forEach {
|
||||||
it.filters[0] = BinoPan(0f)
|
it.filters[DS_FLTIDX_PAN] = BinoPan(0f)
|
||||||
it.filters[1] = Lowpass(SAMPLING_RATE / 2f)
|
it.filters[DS_FLTIDX_LOW] = Lowpass(SAMPLING_RATE / 2f)
|
||||||
sfxSumBus.addSidechainInput(it, 1.0)
|
sfxSumBus.addSidechainInput(it, 1.0)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,8 @@ package net.torvald.terrarum.audio
|
|||||||
import com.badlogic.gdx.utils.Queue
|
import com.badlogic.gdx.utils.Queue
|
||||||
import net.torvald.reflection.forceInvoke
|
import net.torvald.reflection.forceInvoke
|
||||||
import net.torvald.terrarum.*
|
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.AudioMixer.Companion.SPEED_OF_SOUND_AIR
|
||||||
import net.torvald.terrarum.audio.TerrarumAudioMixerTrack.Companion.SAMPLING_RATE
|
import net.torvald.terrarum.audio.TerrarumAudioMixerTrack.Companion.SAMPLING_RATE
|
||||||
import net.torvald.terrarum.audio.TerrarumAudioMixerTrack.Companion.SAMPLING_RATED
|
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
|
// update panning and shits
|
||||||
if (track.trackType == TrackType.DYNAMIC_SOURCE && track.isPlaying) {
|
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 (App.audioMixer.actorNowPlaying != null) {
|
||||||
if (track.trackingTarget == null || track.trackingTarget == App.audioMixer.actorNowPlaying) {
|
if (track.trackingTarget == null || track.trackingTarget == App.audioMixer.actorNowPlaying) {
|
||||||
// "reset" the track
|
// "reset" the track
|
||||||
track.volume = track.maxVolume
|
track.volume = track.maxVolume
|
||||||
(track.filters[0] as BinoPan).pan = 0f
|
(track.filters[DS_FLTIDX_PAN] as BinoPan).pan = 0f
|
||||||
(track.filters[1] as Lowpass).setCutoff(SAMPLING_RATE / 2f)
|
(track.filters[DS_FLTIDX_LOW] as Lowpass).setCutoff(SAMPLING_RATE / 2f)
|
||||||
}
|
}
|
||||||
else if (track.trackingTarget is ActorWithBody) {
|
else if (track.trackingTarget is ActorWithBody) {
|
||||||
val relativeXpos = relativeXposition(App.audioMixer.actorNowPlaying!!, track.trackingTarget as ActorWithBody)
|
val relativeXpos = relativeXposition(App.audioMixer.actorNowPlaying!!, track.trackingTarget as ActorWithBody)
|
||||||
val distFromActor = distBetweenActors(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)
|
val vol = track.maxVolume * getVolFun(distFromActor / distFalloff).coerceAtLeast(0.0)
|
||||||
track.volume = vol
|
track.volume = vol
|
||||||
(track.filters[0] as BinoPan).pan = (1.3f * relativeXpos / distFalloff).toFloat()
|
(track.filters[DS_FLTIDX_PAN] as BinoPan).pan = (1.3f * relativeXpos / distFalloff).toFloat()
|
||||||
(track.filters[1] as Lowpass).setCutoff(
|
(track.filters[DS_FLTIDX_LOW] as Lowpass).setCutoff(
|
||||||
(SAMPLING_RATED*0.5) / (24.0 * (distFromActor / distFalloff).sqr() + 1.0)
|
(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 {
|
else {
|
||||||
// "reset" the track
|
// "reset" the track
|
||||||
track.volume = track.maxVolume
|
track.volume = track.maxVolume
|
||||||
(track.filters[0] as BinoPan).pan = 0f
|
(track.filters[DS_FLTIDX_PAN] as BinoPan).pan = 0f
|
||||||
(track.filters[1] as Lowpass).setCutoff(SAMPLING_RATE / 2f)
|
(track.filters[DS_FLTIDX_LOW] as Lowpass).setCutoff(SAMPLING_RATE / 2f)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import net.torvald.reflection.forceInvoke
|
|||||||
import net.torvald.terrarum.App
|
import net.torvald.terrarum.App
|
||||||
import net.torvald.terrarum.audio.AudioHelper
|
import net.torvald.terrarum.audio.AudioHelper
|
||||||
import net.torvald.terrarum.audio.AudioProcessBuf.Companion.MP3_CHUNK_SIZE
|
import net.torvald.terrarum.audio.AudioProcessBuf.Companion.MP3_CHUNK_SIZE
|
||||||
|
import net.torvald.terrarum.audio.decibelsToFullscale
|
||||||
import net.torvald.terrarum.serialise.toUint
|
import net.torvald.terrarum.serialise.toUint
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import kotlin.math.absoluteValue
|
import kotlin.math.absoluteValue
|
||||||
@@ -43,8 +44,8 @@ open class LoFi(
|
|||||||
|
|
||||||
private fun staticMixThru(inbuf: List<FloatArray>, outbuf: List<FloatArray>) {
|
private fun staticMixThru(inbuf: List<FloatArray>, outbuf: List<FloatArray>) {
|
||||||
for (h in 0 until App.audioBufferSize) {
|
for (h in 0 until App.audioBufferSize) {
|
||||||
outbuf[0][h] = inbuf[0][h] + staticSample[0][staticSamplePlayCursor]
|
outbuf[0][h] = inbuf[0][h] + staticSample[0][staticSamplePlayCursor] * 2.512f // +8 dB
|
||||||
outbuf[1][h] = inbuf[1][h] + staticSample[1][staticSamplePlayCursor]
|
outbuf[1][h] = inbuf[1][h] + staticSample[1][staticSamplePlayCursor] * 2.512f // +8 dB
|
||||||
staticSamplePlayCursor = (staticSamplePlayCursor + 1) % staticSample[0].size
|
staticSamplePlayCursor = (staticSamplePlayCursor + 1) % staticSample[0].size
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,6 +30,6 @@ class Tape(irModule: String, irPath: String, crossfeed: Float, gain: Float) : Lo
|
|||||||
* Created by minjaesong on 2024-01-24.
|
* Created by minjaesong on 2024-01-24.
|
||||||
*/
|
*/
|
||||||
class Holo(irModule: String, irPath: String, crossfeed: Float, gain: Float) : LoFi(
|
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
|
irModule, irPath, crossfeed, gain
|
||||||
)
|
)
|
||||||
@@ -42,7 +42,7 @@ class FixtureJukebox : Electric, PlaysMusic {
|
|||||||
|
|
||||||
@Transient private val backLamp: SheetSpriteAnimation
|
@Transient private val backLamp: SheetSpriteAnimation
|
||||||
|
|
||||||
@Transient private val filterIndex = 2
|
@Transient private val filterIndex = 0
|
||||||
|
|
||||||
internal val discInventory = ArrayList<ItemID>()
|
internal val discInventory = ArrayList<ItemID>()
|
||||||
|
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import net.torvald.terrarum.Terrarum.mouseTileY
|
|||||||
import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZE
|
import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZE
|
||||||
import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZED
|
import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZED
|
||||||
import net.torvald.terrarum.audio.*
|
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.audio.dsp.*
|
||||||
import net.torvald.terrarum.controller.TerrarumController
|
import net.torvald.terrarum.controller.TerrarumController
|
||||||
import net.torvald.terrarum.gameworld.GameWorld
|
import net.torvald.terrarum.gameworld.GameWorld
|
||||||
@@ -519,7 +520,7 @@ class BasicDebugInfoWindow : UICanvas() {
|
|||||||
Toolkit.fillArea(batch, x, y, miniW, miniH)
|
Toolkit.fillArea(batch, x, y, miniW, miniH)
|
||||||
|
|
||||||
// pan
|
// 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
|
batch.color = COL_METER_GRAD
|
||||||
Toolkit.fillArea(batch, x.toFloat(), y.toFloat(), miniW.toFloat(), 2f)
|
Toolkit.fillArea(batch, x.toFloat(), y.toFloat(), miniW.toFloat(), 2f)
|
||||||
batch.color = COL_METER_GRAD2
|
batch.color = COL_METER_GRAD2
|
||||||
|
|||||||
Reference in New Issue
Block a user