fix(audio): Placeholder-Race per audioRequestId + Mikro-Offen-Toast erst nach Start
Bug: Bei zwei Sprachnachrichten kurz hintereinander wurde der STT-Text der zweiten in die Bubble der ersten geschrieben. Ursache: findIndex matchte ueber Substring "Spracheingabe wird verarbeitet" → bei zwei offenen Placeholders nahm er immer die ERSTE, egal welches STT-Result gerade kam. Fix: jede Aufnahme bekommt eine eindeutige audioRequestId, App pusht sie in die Placeholder-Bubble + ans audio-Event. Bridge gibt sie unveraendert ans STT-Result zurueck. App matcht primaer per ID, fallback auf Substring (Kompatibilitaet zu alten Bridge-Versionen). Bonus: Toast "Wake-Word erkannt" entfernt, dafuer "🎤 Mikro offen — sprich jetzt" erst wenn audioService.startRecording wirklich erfolgreich war. So weiss der User exakt ab wann er reden darf — vorher war der Toast schon ~400ms vorher da. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -197,7 +197,9 @@ class WakeWordService {
|
||||
/** Wake-Word getriggert: Native-Modul pausieren, Konversation starten. */
|
||||
private async onWakeDetected(): Promise<void> {
|
||||
console.log('[WakeWord] Wake-Word "%s" erkannt!', this.keyword);
|
||||
ToastAndroid.show(`Wake-Word "${KEYWORD_LABELS[this.keyword]}" erkannt — sprich jetzt`, ToastAndroid.SHORT);
|
||||
// KEIN Toast hier — der Toast "sprich jetzt" kommt erst wenn das Mikro
|
||||
// wirklich offen ist (audioService meldet 'recording'-State). So weiss
|
||||
// der User exakt ab wann er reden darf.
|
||||
if (this.nativeReady && OpenWakeWord) {
|
||||
try { await OpenWakeWord.stop(); } catch {}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user