From 70f4ff480e0017a7d9749536ba4a5970680e589a Mon Sep 17 00:00:00 2001 From: duffyduck Date: Sat, 30 May 2026 18:36:05 +0200 Subject: [PATCH] =?UTF-8?q?fix(app):=20Mund-halten-Button=20stoppt=20ARIA?= =?UTF-8?q?=20jetzt=20sofort=20=E2=80=94=20AudioTrack=20flush=20vor=20stop?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Stefan-Bug-Report: wenn ich in der App auf den Mund-halten-Button klicke waehrend ARIA redet, stoppt sie nicht. Ursache: stopInternal() rief nur AudioTrack.stop() + release(). Das stoppt zwar den Track, aber der bereits in den Hardware-Buffer geschriebene PCM-Audio (200-500ms je nach Geraet) spielt noch hoerbar weiter. Fuer den User klang das so als wuerde der Button nichts tun. Fix in 2 Zeilen: AudioTrack.pause() + AudioTrack.flush() vor stop(). flush() verwirft den Hardware-Buffer-Inhalt, dadurch ist die Wiedergabe wirklich sofort still. pause() davor weil flush() laut Android-Docs nur in non-playing state safe ist. Native module ist kompiliert in app/build/tmp/kotlin-classes — APK muss neu gebaut werden damit der Fix greift. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../src/main/java/com/ariacockpit/PcmStreamPlayerModule.kt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/android/android/app/src/main/java/com/ariacockpit/PcmStreamPlayerModule.kt b/android/android/app/src/main/java/com/ariacockpit/PcmStreamPlayerModule.kt index fedc35d..209619d 100644 --- a/android/android/app/src/main/java/com/ariacockpit/PcmStreamPlayerModule.kt +++ b/android/android/app/src/main/java/com/ariacockpit/PcmStreamPlayerModule.kt @@ -361,6 +361,12 @@ class PcmStreamPlayerModule(reactContext: ReactApplicationContext) : ReactContex writerThread = null val t = track if (t != null) { + // pause() + flush() vor stop() — sonst spielt der Hardware-Buffer + // (200-500ms PCM-Samples) noch hörbar weiter, nachdem der User + // den Mute-Button gedrückt hat. Stefan-Bug-Report: "wenn ich auf + // den Mund halten Button klicke während ARIA redet stoppt sie nicht". + try { t.pause() } catch (_: Exception) {} + try { t.flush() } catch (_: Exception) {} try { t.stop() } catch (_: Exception) {} try { t.release() } catch (_: Exception) {} }