footstep sounds

This commit is contained in:
minjaesong
2023-12-02 23:58:18 +09:00
parent 18f8fa881f
commit d145edf11d
9 changed files with 64 additions and 53 deletions

View File

@@ -81,7 +81,7 @@ object AudioMixer: Disposable {
get() = tracks[1]
val guiTrack: TerrarumAudioMixerTrack
get() = tracks[2]
val sfxSumTrack: TerrarumAudioMixerTrack
val sfxSumBus: TerrarumAudioMixerTrack
get() = tracks[3]
val sumBus: TerrarumAudioMixerTrack
@@ -170,7 +170,7 @@ object AudioMixer: Disposable {
init {
// initialise audio paths //
listOf(musicTrack, ambientTrack, sfxSumTrack, guiTrack).forEach {
listOf(musicTrack, ambientTrack, sfxSumBus, guiTrack).forEach {
it.filters[0] = Gain(1f)
}
@@ -181,7 +181,7 @@ object AudioMixer: Disposable {
listOf(sumBus, convolveBusOpen, convolveBusCave).forEach {
it.addSidechainInput(musicTrack, 1.0)
it.addSidechainInput(ambientTrack, 1.0)
it.addSidechainInput(sfxSumTrack, 1.0)
it.addSidechainInput(sfxSumBus, 1.0)
}
convolveBusOpen.filters[1] = Convolv(ModMgr.getFile("basegame", "audio/convolution/EchoThief - PurgatoryChasm.bin"))
@@ -202,18 +202,17 @@ object AudioMixer: Disposable {
dynamicTracks.forEach {
it.filters[0] = BinoPan(0f)
sfxSumTrack.addSidechainInput(it, 1.0)
sfxSumBus.addSidechainInput(it, 1.0)
}
parallelProcessingSchedule = arrayOf(
arrayOf(musicTrack, ambientTrack, guiTrack),
dynamicTracks,
arrayOf(sumBus, convolveBusOpen, convolveBusCave),
arrayOf(sfxSumBus, sumBus, convolveBusOpen, convolveBusCave),
arrayOf(fadeBus),
arrayOf(masterTrack)
)
processingThread.priority = MAX_PRIORITY // higher = more predictable; audio delay is very noticeable so it gets high priority
processingThread.start()
// feedingThread.priority = MAX_PRIORITY
@@ -291,7 +290,7 @@ object AudioMixer: Disposable {
masterTrack.volume = masterVolume
musicTrack.getFilter<Gain>().gain = musicVolume.toFloat()
ambientTrack.getFilter<Gain>().gain = ambientVolume.toFloat()
sfxSumTrack.getFilter<Gain>().gain = sfxVolume.toFloat()
sfxSumBus.getFilter<Gain>().gain = sfxVolume.toFloat()
guiTrack.getFilter<Gain>().gain = guiVolume.toFloat()

View File

@@ -92,10 +92,6 @@ class MixerTrackProcessor(val bufferSize: Int, val rate: Int, val track: Terraru
// fetch deviceBufferSize amount of sample from the disk
if (track.trackType != TrackType.MASTER && track.trackType != TrackType.BUS && track.streamPlaying) {
if (track.trackType == TrackType.DYNAMIC_SOURCE) {
printdbg("${track.name} streaming")
}
streamBuf.fetchBytes {
val bytesRead = track.currentTrack?.gdxMusic?.forceInvoke<Int>("read", arrayOf(it))
if (bytesRead == null || bytesRead <= 0) { // some class (namely Mp3) may return 0 instead of negative value
@@ -117,7 +113,7 @@ class MixerTrackProcessor(val bufferSize: Int, val rate: Int, val track: Terraru
samplesL1 = FloatArray(bufferSize / 4)
samplesR1 = FloatArray(bufferSize / 4)
val sidechains = track.sidechainInputs.filterNotNull()
val sidechains = track.sidechainInputs
// add all up
sidechains.forEach { (side, mix) ->
for (i in samplesL1.indices) {

View File

@@ -64,13 +64,13 @@ class TerrarumAudioMixerTrack(val name: String, val trackType: TrackType, var ma
inline fun <reified T> getFilter() = filters.filterIsInstance<T>().first()!!
internal val sidechainInputs = ArrayList<Pair<TerrarumAudioMixerTrack, TrackVolume>?>()
internal fun getSidechains(): List<TerrarumAudioMixerTrack?> = sidechainInputs.map { it?.first }
internal val sidechainInputs = ArrayList<Pair<TerrarumAudioMixerTrack, TrackVolume>>()
internal fun getSidechains(): List<TerrarumAudioMixerTrack?> = sidechainInputs.map { it.first }
fun addSidechainInput(input: TerrarumAudioMixerTrack, inputVolume: TrackVolume) {
if (input.trackType == TrackType.MASTER)
throw IllegalArgumentException("Cannot add master track as a sidechain")
if (sidechainInputs.map { it?.first }.any { it?.hash == input.hash })
if (sidechainInputs.map { it.first }.any { it.hash == input.hash })
throw IllegalArgumentException("The track '${input.hash}' already exists")
if (getSidechains().any { mySidechain ->