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>
This commit is contained in:
parent
c25f081f9f
commit
b75382e055
2 changed files with 86 additions and 0 deletions
|
|
@ -109,6 +109,19 @@ def record_utterance(recorder: str, device: str | None, rate: int) -> bytes:
|
|||
|
||||
with open(tmp.name, "rb") as fh:
|
||||
data = fh.read()
|
||||
# Aufnahmedauer anzeigen (hilft, zu fruehes Stoppen sofort zu erkennen).
|
||||
# Hinweis: arecord schreibt beim Stoppen per Signal eine falsche Laenge in den
|
||||
# WAV-Header -> Dauer aus der TATSAECHLICHEN Datenmenge berechnen, nicht aus dem Header.
|
||||
try:
|
||||
with wave.open(io.BytesIO(data), "rb") as wav_in:
|
||||
rate = wav_in.getframerate() or 16000
|
||||
channels = wav_in.getnchannels() or 1
|
||||
width = wav_in.getsampwidth() or 2
|
||||
raw = wav_in.readframes(10 ** 9) # liest alles Vorhandene (Header-Laenge unzuverlaessig)
|
||||
seconds = len(raw) / (rate * channels * width)
|
||||
print(f" Aufnahme: {seconds:.1f}s")
|
||||
except (wave.Error, EOFError):
|
||||
pass
|
||||
# Recorder-Fehlertext nur zeigen, wenn nichts/zu wenig aufgenommen wurde.
|
||||
if len(data) < 1000:
|
||||
err.seek(0)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue