From 7a05e8233cf62e36c64514834676204c608243b4 Mon Sep 17 00:00:00 2001 From: duffyduck Date: Mon, 1 Jun 2026 11:44:11 +0200 Subject: [PATCH] debug(audio): RVS-Logs in _firePlaybackStarted + _releaseFocusDeferred MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Stefan testet Spotify-Resume nach TTS, klappt noch nicht. Aktuell sehe ich in den App-Logs nur 'PcmPlaybackFinished native event' aber NICHT ob requestDuck / release / nudgeMediaResume jemals laufen. Logge jetzt: audio.focus: 'TTS-start: requestDuck() called + canceled pending release' audio.focus: '_releaseFocusDeferred SKIPPED (conversation active)' (skip case) audio.focus: '_releaseFocusDeferred scheduled in 800ms' audio.focus: 'release timer fired but conversation now active → SKIP' (race) audio.focus: 'AudioFocus.release() now' audio.focus: 'nudgeMediaResume() now (50ms after release)' Damit beim naechsten Stefan-Test eindeutig zuordenbar wo der Resume- Pfad genau klemmt — feuern beide native Calls? Werden sie geskipped? Greift der Cancel zu frueh? etc. --- android/src/services/audio.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/android/src/services/audio.ts b/android/src/services/audio.ts index 21b2262..aab6b23 100644 --- a/android/src/services/audio.ts +++ b/android/src/services/audio.ts @@ -429,24 +429,34 @@ class AudioService { private _releaseFocusDeferred(): void { if (this._conversationFocusActive) { console.log('[Audio] _releaseFocusDeferred: Conversation aktiv → kein Release'); + import('./logger').then(m => m.reportAppDebug('audio.focus', + '_releaseFocusDeferred SKIPPED (conversation active)')).catch(()=>{}); this._cancelDeferredFocusRelease(); return; } this._cancelDeferredFocusRelease(); console.log('[Audio] _releaseFocusDeferred: in %dms', this.FOCUS_RELEASE_DELAY_MS); + import('./logger').then(m => m.reportAppDebug('audio.focus', + `_releaseFocusDeferred scheduled in ${this.FOCUS_RELEASE_DELAY_MS}ms`)).catch(()=>{}); this.focusReleaseTimer = setTimeout(() => { this.focusReleaseTimer = null; if (this._conversationFocusActive) { console.log('[Audio] Focus-Release abgebrochen (Conversation jetzt aktiv)'); + import('./logger').then(m => m.reportAppDebug('audio.focus', + 'release timer fired but conversation now active → SKIP')).catch(()=>{}); return; } console.log('[Audio] AudioFocus jetzt released'); + import('./logger').then(m => m.reportAppDebug('audio.focus', + 'AudioFocus.release() now')).catch(()=>{}); AudioFocus?.release().catch(() => {}); // Spotify-Resume-Trigger: nach Abandon den USAGE_MEDIA-Focus-Stack // mit kurzem TRANSIENT-Nudge aufmischen. Spotify resumed sonst bei // manchen Versionen / Geraeten nicht zuverlaessig nach Auto-Loss. // 50ms Delay damit das Abandon erst durch ist. setTimeout(() => { + import('./logger').then(m => m.reportAppDebug('audio.focus', + 'nudgeMediaResume() now (50ms after release)')).catch(()=>{}); AudioFocus?.nudgeMediaResume().catch(() => {}); }, 50); }, this.FOCUS_RELEASE_DELAY_MS); @@ -1530,6 +1540,8 @@ class AudioService { // Pending Release-Timer canceln damit der nicht mitten in der TTS feuert. this._cancelDeferredFocusRelease(); AudioFocus?.requestDuck().catch(() => {}); + import('./logger').then(m => m.reportAppDebug('audio.focus', + 'TTS-start: requestDuck() called + canceled pending release')).catch(()=>{}); this.playbackStartedListeners.forEach(cb => { try { cb(); } catch (e) { console.warn('[Audio] playbackStarted listener err:', e); } });