From f0c80f3c7c0c235f67f4522300491d0e8314e42f Mon Sep 17 00:00:00 2001 From: nrobi144 Date: Wed, 18 Mar 2026 12:34:36 +0200 Subject: [PATCH] =?UTF-8?q?fix(media):=20delay=20volume=20enforcement=20?= =?UTF-8?q?=E2=80=94=20VLC=20audio=20output=20not=20ready=20at=20playing?= =?UTF-8?q?=20event?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.6 (1M context) --- .../service/media/GlobalMediaPlayer.kt | 26 ++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/desktopApp/src/jvmMain/kotlin/com/vitorpamplona/amethyst/desktop/service/media/GlobalMediaPlayer.kt b/desktopApp/src/jvmMain/kotlin/com/vitorpamplona/amethyst/desktop/service/media/GlobalMediaPlayer.kt index 9e66141e6..af7923256 100644 --- a/desktopApp/src/jvmMain/kotlin/com/vitorpamplona/amethyst/desktop/service/media/GlobalMediaPlayer.kt +++ b/desktopApp/src/jvmMain/kotlin/com/vitorpamplona/amethyst/desktop/service/media/GlobalMediaPlayer.kt @@ -364,9 +364,16 @@ object GlobalMediaPlayer { isBuffering = false, duration = mediaPlayer.status().length(), ) - // Enforce volume — VLC can reset it on new media - mediaPlayer.audio().setVolume(state.volume) - mediaPlayer.audio().isMute = state.isMuted + // Enforce volume after a short delay — VLC's audio output + // may not be ready immediately when the playing event fires + scope.launch { + delay(100) + try { + mediaPlayer.audio().setVolume(state.volume) + mediaPlayer.audio().isMute = state.isMuted + } catch (_: Exception) { + } + } } override fun paused(mediaPlayer: MediaPlayer) { @@ -424,9 +431,16 @@ object GlobalMediaPlayer { isBuffering = false, duration = mediaPlayer.status().length(), ) - // Enforce volume — VLC can reset it on new media - mediaPlayer.audio().setVolume(state.volume) - mediaPlayer.audio().isMute = state.isMuted + // Enforce volume after a short delay — VLC's audio output + // may not be ready immediately when the playing event fires + scope.launch { + delay(100) + try { + mediaPlayer.audio().setVolume(state.volume) + mediaPlayer.audio().isMute = state.isMuted + } catch (_: Exception) { + } + } } override fun paused(mediaPlayer: MediaPlayer) {