From 549c03c2b4b2ef1e4c349d600014a576d82c2ef6 Mon Sep 17 00:00:00 2001 From: minjaesong Date: Wed, 21 Feb 2024 16:53:51 +0900 Subject: [PATCH] fianlly found the culprit of repeated audio stopping but have no idea how to fix --- src/net/torvald/terrarum/audio/AudioMixer.kt | 9 +++++++-- .../torvald/terrarum/audio/TerrarumAudioMixerTrack.kt | 3 ++- .../modulebasegame/gameactors/FixtureSmelterBasic.kt | 1 + 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/net/torvald/terrarum/audio/AudioMixer.kt b/src/net/torvald/terrarum/audio/AudioMixer.kt index 0f92ea461..55827bfe5 100644 --- a/src/net/torvald/terrarum/audio/AudioMixer.kt +++ b/src/net/torvald/terrarum/audio/AudioMixer.kt @@ -123,14 +123,19 @@ class AudioMixer : Disposable { * Return oldest dynamic track, even if the track is currently playing */ fun getFreeTrackNoMatterWhat(): TerrarumAudioMixerTrack { - return getFreeTrack() ?: dynamicTracks.minBy { it.playStartedTime } + synchronized(this) { + return getFreeTrack() ?: dynamicTracks.minBy { it.playStartedTime } + } } /** * Return oldest dynamic track that is not playing */ fun getFreeTrack(): TerrarumAudioMixerTrack? { - return dynamicTracks.filter { it.trackingTarget == null && !it.isPlaying }.minByOrNull { it.playStartedTime } + synchronized(this) { + return dynamicTracks.filter { it.trackingTarget == null && !it.isPlaying } + .minByOrNull { it.playStartedTime } + } } var listenerHeadSize = BinoPan.EARDIST_DEFAULT; private set diff --git a/src/net/torvald/terrarum/audio/TerrarumAudioMixerTrack.kt b/src/net/torvald/terrarum/audio/TerrarumAudioMixerTrack.kt index d71a02782..87fdf86d7 100644 --- a/src/net/torvald/terrarum/audio/TerrarumAudioMixerTrack.kt +++ b/src/net/torvald/terrarum/audio/TerrarumAudioMixerTrack.kt @@ -162,7 +162,8 @@ class TerrarumAudioMixerTrack( override fun equals(other: Any?) = this.hash == (other as TerrarumAudioMixerTrack).hash fun stop() { - printdbg(this, "Stop music (mixertrack=${this.name}, musictrack=$currentTrack)") + printdbg("TerrarumAudioMixerTrack $name", "Stop music (mixertrack=${this.name}, musictrack=$currentTrack)") + printStackTrace("TerrarumAudioMixerTrack $name") currentTrack?.reset() diff --git a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureSmelterBasic.kt b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureSmelterBasic.kt index a60cb957b..697074d37 100644 --- a/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureSmelterBasic.kt +++ b/src/net/torvald/terrarum/modulebasegame/gameactors/FixtureSmelterBasic.kt @@ -289,6 +289,7 @@ class FixtureSmelterBasic : FixtureBase, CraftingStation { // manage audio + // FIXME this code is also killing the audio played by the other fixture (FixtureFurnaceAndAnvil) getTrackByAudio(static).let { if (it == null || (temperature > 0f && !it.isPlaying && !it.playRequested.get())) { startAudio(static) {