feat: Bug-Runde + 5 App/Diagnostic-Features

Bugs:
- App Mute-/Auto-Playback: onMessage-Closure hielt stale ttsDeviceEnabled/
  ttsMuted → Mute wurde ignoriert + AsyncStorage-Load kam nicht durch.
  Fix via ttsCanPlayRef (live gespiegelt) statt Closure-Variablen.
- App Zombie-Recording: toggleWakeWord hat die laufende Aufnahme nicht
  gestoppt → audioService.recordingState blieb 'recording' → normaler
  Aufnahme-Button wirkungslos. Fix: await stopRecording() vor stop().
- Porcupine robuster: BuiltInKeywords-Enum Mapping mit String-Fallback,
  errorCallback fuer Runtime-Crashes (state zurueck auf off statt
  App-Crash), mehr Logging damit man beim naechsten Issue debuggen kann.

App-Features:
- MessageText Komponente: Text ist durchgehend selektierbar, erkennt
  URLs (http/https), E-Mails, Telefonnummern und macht sie anklickbar
  (oeffnet Browser / Mail-App / Android-Dialer via Linking).
- TTS-Wiedergabegeschwindigkeit pro Geraet einstellbar (Settings ->
  "Sprechgeschwindigkeit", 0.5-2.0 in 0.1-Schritten, Default 1.0).
  Wird als speed-Param an die F5-TTS-Bridge durchgereicht.

Bridge-Durchreichen:
- ChatScreen: speed aus AsyncStorage via ttsSpeedRef, an chat/audio/
  tts_request mitgeschickt
- aria-bridge: _next_speed_override wie voice_override, an xtts_request
  weitergereicht
- f5tts-bridge: speed-Param an F5TTS.infer() durchgereicht

Diagnostic-Feature:
- Voice-Preview-Button (Play-Icon) vor dem Delete-X in der Stimmen-Liste
- Modal mit Textfeld (Default-Beispieltext wird bei jedem Oeffnen neu
  gesetzt) und Play-Button
- Server sammelt audio_pcm Frames der Preview-Anfrage, baut WAV,
  schickt base64 zurueck, Browser spielt im <audio>-Tag ab
- 60s Timeout-Safety-Net

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-25 00:24:02 +02:00
parent 2264f4e3bc
commit 190352820c
10 changed files with 439 additions and 20 deletions
+16 -1
View File
@@ -75,16 +75,31 @@
### Bugs
- [ ] NO_REPLY wird als "NO" im Chat angezeigt — sollte still verworfen werden (Token nicht gesaeubert)
- [ ] App: Auto-Playback der ARIA-Antwort greift nicht immer nach Erhalt — Play-Button funktioniert aber manuell
- [ ] App: Deaktivierter Mund-Button (Mute) — trotzdem kommt manchmal Sprachausgabe durch
- [ ] App: Wake-Word "jarvis" triggert nicht (Porcupine-Build mit Jarvis-Keyword haekelt)
- [ ] App: Nach Deaktivieren vom Ohr-Button funktioniert der Aufnahme-Button nicht mehr
- [ ] App: Stuerzt beim Lauschen ab, eventuell bei Nebengeraeuschen (Porcupine-Segfault-Verdacht)
### App Features
- [ ] Wake Word on-device (Porcupine "ARIA" Keyword, Phase 2 — passives Lauschen)
- [ ] Chat-History zuverlaessiger laden (AsyncStorage Race Condition)
- [ ] Background Audio Service (TTS auch bei minimierter App)
- [ ] Text-Auswahl in Chat-Nachrichten (Kopieren von ARIA-Antworten)
- [ ] Autolink: Telefonnummern → Telefon-Icon → Android-Dialer
- [ ] Autolink: HTTP(S)-URLs → anklickbar, oeffnet im Browser
- [ ] Autolink: E-Mail-Adressen → anklickbar, oeffnet Mail-App
- [ ] TTS-Wiedergabegeschwindigkeit pro Geraet einstellbar (0.1-Schritte, Default 1.0)
### Diagnostic Features
- [ ] Voice-Preview-Button in der Stimmen-Liste (Play-Icon vor dem Loeschen-X):
oeffnet Modal mit Textfeld (Default-Beispieltext wird jedesmal neu gesetzt)
und Play-Button → Stimme rendert den Text und spielt im Browser ab
### TTS / Audio
- [ ] Audio-Normalisierung (Lautstaerke zwischen Saetzen/Chunks angleichen)
- [ ] F5-TTS: Streaming-Inferenz testen (nativ statt satzweise) wenn ein passendes Backend kommt
- [ ] F5-TTS: Optional Deepspeed-Beschleunigung pruefen
- [ ] F5-TTS: BigVGAN-Vocoder-Support in Bridge (aktuell nur Vocos)
### Architektur
- [ ] Bilder: Claude Vision direkt nutzen (aktuell nur Dateipfad an ARIA)