mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-06-15 13:04:05 +09:00
footstep sounds
This commit is contained in:
@@ -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()
|
||||
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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 ->
|
||||
|
||||
Reference in New Issue
Block a user