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) {