From 23261ab3608e571c095527c677d6f96ac684059e Mon Sep 17 00:00:00 2001 From: minjaesong Date: Sun, 3 Dec 2023 00:42:10 +0900 Subject: [PATCH] discovered another bug --- .../torvald/terrarum/audio/MixerTrackProcessor.kt | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/net/torvald/terrarum/audio/MixerTrackProcessor.kt b/src/net/torvald/terrarum/audio/MixerTrackProcessor.kt index 7655d401b..41886659c 100644 --- a/src/net/torvald/terrarum/audio/MixerTrackProcessor.kt +++ b/src/net/torvald/terrarum/audio/MixerTrackProcessor.kt @@ -3,7 +3,6 @@ package net.torvald.terrarum.audio import com.badlogic.gdx.utils.Queue import net.torvald.reflection.forceInvoke import net.torvald.terrarum.App -import net.torvald.terrarum.Terrarum import net.torvald.terrarum.audio.dsp.BinoPan import net.torvald.terrarum.audio.dsp.NullFilter import net.torvald.terrarum.gameactors.ActorWithBody @@ -94,10 +93,17 @@ class MixerTrackProcessor(val bufferSize: Int, val rate: Int, val track: Terraru if (track.trackType != TrackType.MASTER && track.trackType != TrackType.BUS && track.streamPlaying) { streamBuf.fetchBytes { // FIXME THIS IS NOT THREAD SAFE: trying to play different audio too fast too much, shits happen - val bytesRead = track.currentTrack?.gdxMusic?.forceInvoke("read", arrayOf(it)) - if (bytesRead == null || bytesRead <= 0) { // some class (namely Mp3) may return 0 instead of negative value + // OR somehow make sfx memory-streamable + try { + val bytesRead = track.currentTrack?.gdxMusic?.forceInvoke("read", arrayOf(it)) + if (bytesRead == null || bytesRead <= 0) { // some class (namely Mp3) may return 0 instead of negative value // printdbg("Finished reading audio stream") - track.stop() + track.stop() + } + } + catch (e: Throwable) { + e.printStackTrace() + it.fill(0) } }