diff --git a/assets/mods/basegame/audio/convolution/Soundwoofer - large_speaker_Marshall JVM 205C SM57 A 0 0 1.bin b/assets/mods/basegame/audio/convolution/Soundwoofer - large_speaker_Marshall JVM 205C SM57 A 0 0 1.bin new file mode 100644 index 000000000..ca9b35bae --- /dev/null +++ b/assets/mods/basegame/audio/convolution/Soundwoofer - large_speaker_Marshall JVM 205C SM57 A 0 0 1.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c29979d63312c76a22a624f75001946584ac3ba3ee0f7b9557a43dd04772f27c +size 54872 diff --git a/assets/mods/basegame/audio/convolution/Soundwoofer - medium_speaker_Frances Bloom Marshall 1960VB SM57 A 0 0 0.bin b/assets/mods/basegame/audio/convolution/Soundwoofer - medium_speaker_Frances Bloom Marshall 1960VB SM57 A 0 0 0.bin new file mode 100644 index 000000000..0623aa84d --- /dev/null +++ b/assets/mods/basegame/audio/convolution/Soundwoofer - medium_speaker_Frances Bloom Marshall 1960VB SM57 A 0 0 0.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:054495f626b6e73f0d9d604ea8b27e028b355c71f39467fc53e334e5a49277b8 +size 48016 diff --git a/assets/mods/basegame/audio/convolution/Soundwoofer - small_speaker_Gallien Krueger GK 250ML B5 Left A 230 200 320.bin b/assets/mods/basegame/audio/convolution/Soundwoofer - small_speaker_Gallien Krueger GK 250ML B5 Left A 230 200 320.bin new file mode 100644 index 000000000..d0aec72c9 --- /dev/null +++ b/assets/mods/basegame/audio/convolution/Soundwoofer - small_speaker_Gallien Krueger GK 250ML B5 Left A 230 200 320.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5f1404c63e85d8b4dbafd638ca8af579e5f85076a2deaf778ee4661ca9c3af6d +size 54872 diff --git a/assets/mods/basegame/audio/convolution/koli_summer_site1_stereo.bin b/assets/mods/basegame/audio/convolution/koli_summer_site1_stereo.bin deleted file mode 100644 index 98449a26e..000000000 --- a/assets/mods/basegame/audio/convolution/koli_summer_site1_stereo.bin +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:58ee138a4d41fb69ddab516150e913b81ef0fe1c95cf511c0c611ee950453b9c -size 524288 diff --git a/assets/mods/basegame/audio/convolution/st-patricks-church-patrington.bin b/assets/mods/basegame/audio/convolution/st-patricks-church-patrington.bin deleted file mode 100644 index db9220fe9..000000000 --- a/assets/mods/basegame/audio/convolution/st-patricks-church-patrington.bin +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9b49d19eb543e043f8041a6c22867987d80c97fd7d7989d6885f159ffbf75baa -size 524288 diff --git a/src/net/torvald/terrarum/audio/dsp/Convolv.kt b/src/net/torvald/terrarum/audio/dsp/Convolv.kt index fe249c7d0..c90256053 100644 --- a/src/net/torvald/terrarum/audio/dsp/Convolv.kt +++ b/src/net/torvald/terrarum/audio/dsp/Convolv.kt @@ -20,8 +20,9 @@ import java.io.File import kotlin.math.roundToInt /** - * @param ir Binary file containing MONO IR - * @param crossfeed The amount of channel crossfeeding to simulate the stereo ID + * @param ir Binary file containing MONO IR (containing only two channels) + * @param crossfeed The amount of channel crossfeeding to simulate the true stereo IR. Fullscale (0.0 - 1.0) + * @param gain output gain. Fullscale (0.0 - 1.0) */ class Convolv(ir: File, val crossfeed: Float, gain: Float = 1f / 256f): TerrarumAudioFilter() { private val gain: Float = gain / (1f + crossfeed) diff --git a/src/net/torvald/terrarum/gameactors/Actor.kt b/src/net/torvald/terrarum/gameactors/Actor.kt index 6029b1229..b1a8229d4 100644 --- a/src/net/torvald/terrarum/gameactors/Actor.kt +++ b/src/net/torvald/terrarum/gameactors/Actor.kt @@ -127,12 +127,13 @@ abstract class Actor : Comparable, Runnable { return track } - open fun startAudio(music: MusicContainer, volume: TrackVolume = 1.0) { + open fun startAudio(music: MusicContainer, volume: TrackVolume = 1.0, doSomethingWithTrack: (TerrarumAudioMixerTrack) -> Unit = {}) { getTrackByAudio(music)?.let { it.stop() it.trackingTarget = this it.currentTrack = music it.maxVolumeFun = { volume } + doSomethingWithTrack(it) it.play() } } @@ -141,8 +142,11 @@ abstract class Actor : Comparable, Runnable { }*/ - open fun stopAudio(music: MusicContainer) { - musicTracks[music]?.stop() + open fun stopAudio(music: MusicContainer, doSomethingWithTrack: (TerrarumAudioMixerTrack) -> Unit = {}) { + musicTracks[music]?.let { + doSomethingWithTrack(it) + it.stop() + } } /*open fun onAudioInterrupt(sound: Sound) { diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureJukebox.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureJukebox.kt index b95542c73..cbbeb9978 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureJukebox.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureJukebox.kt @@ -7,6 +7,8 @@ import net.torvald.terrarum.ModMgr import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZE import net.torvald.terrarum.audio.AudioMixer import net.torvald.terrarum.audio.AudioMixer.DEFAULT_FADEOUT_LEN +import net.torvald.terrarum.audio.dsp.Convolv +import net.torvald.terrarum.audio.dsp.NullFilter import net.torvald.terrarum.gameactors.AVKey import net.torvald.terrarum.langpack.Lang import net.torvald.terrarum.modulebasegame.MusicContainer @@ -30,6 +32,7 @@ class FixtureJukebox : Electric { @Transient private val testMusic = ModMgr.getGdxFile("basegame", "audio/music/discs/01 Thousands of Shards.ogg").let { MusicContainer("Thousands of Shards", it.file(), Gdx.audio.newMusic(it)) { + unloadConvolver(musicNowPlaying) discCurrentlyPlaying = null musicNowPlaying = null (INGAME.musicGovernor as TerrarumMusicGovernor).stopMusic(pauseLen = Math.random().toFloat() * 30f + 30f) @@ -79,13 +82,24 @@ class FixtureJukebox : Electric { musicNowPlaying = testMusic // todo use index AudioMixer.requestFadeOut(AudioMixer.musicTrack, DEFAULT_FADEOUT_LEN / 2f) { - startAudio(musicNowPlaying!!) + startAudio(musicNowPlaying!!) { + it.filters[2] = Convolv(ModMgr.getFile("basegame", "audio/convolution/Soundwoofer - large_speaker_Marshall JVM 205C SM57 A 0 0 1.bin"), 0f, 5f / 16f) + } } } private fun forceStop() { musicNowPlaying?.let { stopAudio(it) + unloadConvolver(it) + } + } + + private fun unloadConvolver(music: MusicContainer?) { + if (music != null) { + musicTracks[music]?.let { + it.filters[2] = NullFilter + } } }