Commit graph

6 commits

Author SHA1 Message Date
Dieter Schlüter
b75382e055 ux(voice_loop): Aufnahmedauer anzeigen + korrekt berechnen; Diagnose-Skript
- record_utterance zeigt nach der Aufnahme die Dauer
- Dauer aus tatsaechlicher Datenmenge statt WAV-Header (arecord schreibt beim
  Stoppen per Signal eine falsche Header-Laenge -> sonst absurde Werte wie 67108s)
- scripts/diag_record.py: Countdown + gruenes Signal -> Aufnahme -> sofort
  transkribieren (Standard + vad_filter) zur Pausen-Diagnose

Diagnose-Ergebnis: Mehrsatz-Aeusserungen mit Pausen werden vollstaendig erkannt
(Aufnahme + faster-whisper verlieren nichts) - im kontrollierten Test und im
echten voice_loop-Flow bestaetigt.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 15:53:51 +02:00
Dieter Schlüter
e1167951e1 ux(voice_loop): harmlose arecord-EINTR-Meldung beim Stoppen unterdruecken
Das Stoppen per SIGINT loest in arecord ein erwartetes EINTR aus
("Unterbrechung während des Betriebssystemaufrufs"). Recorder-stderr wird nun
abgefangen und nur noch bei tatsaechlich fehlgeschlagener Aufnahme (leere Datei)
angezeigt. Die Aufnahme selbst war/ist korrekt.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 11:08:08 +02:00
Dieter Schlüter
4254475b73 fix(voice_loop): Keepalive-Timeout (1011) bei langer Aufnahme/Wiedergabe behoben
Eine Dauerverbindung wurde vom Server geschlossen, wenn Aufnahme/Wiedergabe den
Event-Loop blockierten (Keepalive-Ping unbeantwortet) - sichtbar bei langen
TTS-Antworten. Jetzt: kurze WebSocket-Verbindung PRO Sprech-Runde; das Audio wird
erst NACH dem Schliessen abgespielt. Gespraechsgedaechtnis bleibt serverseitig via
session_id erhalten. Verifiziert mit langer Antwort (~12 s Audio) ohne Abbruch.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 11:00:13 +02:00
Dieter Schlüter
98706ef3ec docs+ux(voice_loop): klarer Hinweis auf ALSA-Direktgeraet bei Aufnahme-Fehler
Auf PipeWire-Systemen kann der pw-record/ALSA-default-Pfad scheitern
("pw_context_connect() failed"). Direkter Zugriff via arecord -D plughw:KARTE,0
funktioniert. voice_loop gibt bei leerer Aufnahme jetzt diesen konkreten Tipp aus;
Bedienungsanleitung entsprechend ergaenzt (Recorder-Hinweis + Troubleshooting).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 10:44:48 +02:00
Dieter Schlüter
d15e51eb0d fix(voice_loop): PipeWire-Aufnahme (pw-record) als Standard via --recorder auto
- arecord scheiterte auf PipeWire-Systemen ("Fehler beim Öffnen des Gerätes")
- neue Option --recorder {auto,pw-record,parecord,arecord}; auto bevorzugt pw-record
- geraetespezifische Flags je Werkzeug (-D / --target / --device)
- Doku: Recorder-Hinweis + Troubleshooting-Eintrag fuer den arecord-Fehler
- verifiziert: auto -> pw-record; --file-Round-Trip weiterhin ok

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 10:37:49 +02:00
Dieter Schlüter
7896f608fb docs: Bedienungsanleitung (Sprech-Loop, Einstellungen, Praxis-Tests) + voice_loop.py
- NEU scripts/voice_loop.py: Mikrofon -> /ws/voice -> Wiedergabe im Loop, mit
  Gedaechtnis (--session), Geraete-/Provider-Optionen, --file fuer Test ohne Mikrofon
- BEDIENUNGSANLEITUNG.md neu strukturiert:
  Teil A (sprechen->hoeren->sprechen: voice_loop + manueller Loop + chat_client),
  Teil B (Einstellungen: KI/Provider auf allen Ebenen real; Sound-Quelle/-Ausgabe
  ehrlich auf OS-Ebene, Gateway-Endpunkte als vorbereitete Routing-Ebene),
  Teil C (Praxis-Tests + gemessene Reaktionszeiten: STT ~1,2s / LLM ~0,7s / TTS ~1,9s
  / Round-Trip ~4s; Konstellations-Empfehlung)
- Alle JSON-Befehle mit '| jq'; Audio-Befehle in Datei + Player
- README: kurzer Verweis auf den Sprech-Loop
- live verifiziert (make smoke, Timings, voice_loop --file); 64 Tests gruen

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 10:31:35 +02:00