better foley addressing

This commit is contained in:
minjaesong
2024-01-20 20:55:52 +09:00
parent 949ff841de
commit c66e4077bf
41 changed files with 36 additions and 28 deletions

View File

@@ -27,7 +27,6 @@ import net.torvald.terrarum.serialise.Common
import net.torvald.terrarum.ui.UICanvas import net.torvald.terrarum.ui.UICanvas
import net.torvald.terrarum.utils.CSVFetcher import net.torvald.terrarum.utils.CSVFetcher
import net.torvald.terrarum.utils.JsonFetcher import net.torvald.terrarum.utils.JsonFetcher
import net.torvald.terrarum.utils.forEachSiblings
import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack import net.torvald.terrarumsansbitmap.gdx.TextureRegionPack
import org.apache.commons.codec.digest.DigestUtils import org.apache.commons.codec.digest.DigestUtils
import org.apache.commons.csv.CSVFormat import org.apache.commons.csv.CSVFormat
@@ -764,19 +763,18 @@ object ModMgr {
private fun loadAudio(basename: String, file: FileHandle) { private fun loadAudio(basename: String, file: FileHandle) {
if (file.isDirectory) if (file.isDirectory)
file.list().forEach { loadAudio("$basename.${it.nameWithoutExtension()}", it) } file.list().forEach { loadAudio("$basename.${it.name()}", it) }
else { else {
val id = basename val id = basename.substringBeforeLast('.').substringBeforeLast('.')
val materialID = file.nameWithoutExtension().substringBefore('_') Terrarum.audioCodex.addToAudioPool(id, file)
Terrarum.audioCodex.addToFootstepPool(materialID, file) printdbg(this, "Registering audio $id ($file)")
printdbg(this, "Registering music $id")
} }
} }
@JvmStatic operator fun invoke(module: String) { @JvmStatic operator fun invoke(module: String) {
audioPath.forEach { audioPath.forEach {
if (getGdxFile(module, it).let { it.exists() && it.isDirectory }) { if (getGdxFile(module, it).let { it.exists() && it.isDirectory }) {
getGdxFiles(module, it).forEach { file -> loadAudio("audio.${file.name()}", file) } getGdxFiles(module, it).forEach { file -> loadAudio("${it.substringAfter("audio/")}.${file.name()}", file) }
} }
} }
} }

View File

@@ -5,24 +5,32 @@ import com.badlogic.gdx.files.FileHandle
import net.torvald.terrarum.modulebasegame.MusicContainer import net.torvald.terrarum.modulebasegame.MusicContainer
import net.torvald.terrarum.tryDispose import net.torvald.terrarum.tryDispose
typealias MaterialID = String
/** /**
* Created by minjaesong on 2023-12-02. * Created by minjaesong on 2023-12-02.
*/ */
class AudioCodex { class AudioCodex {
@Transient val footsteps = HashMap<MaterialID, HashSet<FileHandle>>() @Transient val audio = HashMap<String, HashSet<FileHandle>>()
internal constructor() internal constructor()
fun addToFootstepPool(materialID: MaterialID, music: FileHandle) { /**
if (footsteps[materialID] == null) footsteps[materialID] = HashSet() * The audio will be collected as one of many elements in the collection named `identifier`
footsteps[materialID]!!.add(music) *
* @param identifier identifier of the music, WITHOUT a serial number
*/
fun addToAudioPool(identifier: String, music: FileHandle) {
if (audio[identifier] == null) audio[identifier] = HashSet()
audio[identifier]!!.add(music)
} }
fun getRandomFootstep(materialID: MaterialID): MusicContainer? { fun getRandomFootstep(materialID: String) = getRandomAudio("effects.steps.$materialID")
val file = footsteps[materialID]?.random()
/**
* @param identifier
*/
fun getRandomAudio(identifier: String): MusicContainer? {
val file = audio[identifier]?.random()
return if (file != null) { return if (file != null) {
MusicContainer(file.nameWithoutExtension(), file.file(), Gdx.audio.newMusic(file)) { MusicContainer(file.nameWithoutExtension(), file.file(), Gdx.audio.newMusic(file)) {
it.tryDispose() it.tryDispose()

View File

@@ -11,7 +11,6 @@ import net.torvald.terrarum.App.printdbg
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.TerrarumAppConfiguration.TILE_SIZEF import net.torvald.terrarum.TerrarumAppConfiguration.TILE_SIZEF
import net.torvald.terrarum.audio.AudioCodex
import net.torvald.terrarum.blockproperties.Block import net.torvald.terrarum.blockproperties.Block
import net.torvald.terrarum.blockproperties.BlockProp import net.torvald.terrarum.blockproperties.BlockProp
import net.torvald.terrarum.gamecontroller.KeyToggler import net.torvald.terrarum.gamecontroller.KeyToggler

View File

@@ -268,14 +268,13 @@ class TerrarumMusicGovernor : MusicGovernor() {
musicBin = ArrayList(newMusicBin.toList()) musicBin = ArrayList(newMusicBin.toList())
} }
private val ambients: List<MusicContainer> = private val ambients: HashMap<String, HashSet<MusicContainer>> =
ModMgr.getFilesFromEveryMod("audio/ambient/").flatMap { it.second.listFiles()?.toList() ?: emptyList() }.mapNotNull { HashMap(Terrarum.audioCodex.audio.filter { it.key.startsWith("ambient.") }.map { it.key to it.value.mapNotNull { fileHandle ->
printdbg(this, "Ambient: ${it.absolutePath}")
try { try {
MusicContainer( MusicContainer(
it.nameWithoutExtension.replace('_', ' ').split(" ").map { it.capitalize() }.joinToString(" "), fileHandle.nameWithoutExtension().replace('_', ' ').split(" ").map { it.capitalize() }.joinToString(" "),
it, fileHandle.file(),
Gdx.audio.newMusic(Gdx.files.absolute(it.absolutePath)).also { Gdx.audio.newMusic(fileHandle).also {
it.isLooping = true it.isLooping = true
} }
) { stopAmbient() } ) { stopAmbient() }
@@ -284,7 +283,7 @@ class TerrarumMusicGovernor : MusicGovernor() {
e.printStackTrace() e.printStackTrace()
null null
} }
} }.toHashSet() }.toMap())
private val musicStartHooks = ArrayList<(MusicContainer) -> Unit>() private val musicStartHooks = ArrayList<(MusicContainer) -> Unit>()
private val musicStopHooks = ArrayList<(MusicContainer) -> Unit>() private val musicStopHooks = ArrayList<(MusicContainer) -> Unit>()
@@ -306,8 +305,12 @@ class TerrarumMusicGovernor : MusicGovernor() {
songs.forEach { songs.forEach {
App.disposables.add(it.gdxMusic) App.disposables.add(it.gdxMusic)
} }
ambients.forEach { ambients.forEach { (k, v) ->
App.disposables.add(it.gdxMusic) printdbg(this, "Ambients: $k -> $v")
v.forEach {
App.disposables.add(it.gdxMusic)
}
} }
} }
@@ -368,7 +371,8 @@ class TerrarumMusicGovernor : MusicGovernor() {
} }
private fun stopAmbient() { private fun stopAmbient() {
App.audioMixer.ambientTrack.nextTrack = currentAmbientTrack if (::currentAmbientTrack.isInitialized)
App.audioMixer.ambientTrack.nextTrack = currentAmbientTrack
} }
private fun startAmbient(song: MusicContainer) { private fun startAmbient(song: MusicContainer) {
@@ -419,8 +423,8 @@ class TerrarumMusicGovernor : MusicGovernor() {
in 3f..5f -> "autumn" in 3f..5f -> "autumn"
else -> "winter" else -> "winter"
} }
val track = ambients.filter { it.name.lowercase().startsWith(seasonName) }.random()
val track = ambients["ambient.season.$seasonName"]!!.random()
startAmbient(track) startAmbient(track)
} }
} }

View File

@@ -3,7 +3,6 @@ package net.torvald.terrarum.modulebasegame.gameitems
import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.graphics.Color
import com.badlogic.gdx.graphics.g2d.TextureRegion import com.badlogic.gdx.graphics.g2d.TextureRegion
import net.torvald.terrarum.* import net.torvald.terrarum.*
import net.torvald.terrarum.App.printdbg
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.blockproperties.Block import net.torvald.terrarum.blockproperties.Block