# -*- coding: utf-8 -*- """Fix-Verifikation: rendert die Problem-/Regressionssätze auf :8134, misst Pausen + IST (Whisper).""" import os, io, json, urllib.request import numpy as np, soundfile as sf from faster_whisper import WhisperModel SERVER = "http://127.0.0.1:8134/tts" OUT = os.path.join(os.environ["TEMP"], "lucy_fix"); os.makedirs(OUT, exist_ok=True) TESTS = [ ("01_kurz", "Schön, dass du da bist, Commander."), ("07_lang", "Guten Morgen, Commander. Das nächtliche Backup ist um 3 Uhr durchgelaufen, es gab keine Fehler, und die Datenbank läuft mit 92 Prozent Auslastung völlig stabil."), ("08_sehr_lang","Also, Commander, wenn ich das kurz zusammenfassen darf: heute früh war die Verbindung weg, dann lief das Update durch, danach musste ich zweimal neu starten, und jetzt sind endlich alle Dienste oben, das Gedächtnis ist warm, und wir können ganz entspannt weitermachen."), ("09_akronyme", "Die CPU der RX 9070 XT und die GPU laufen mit ROCm, sagt der PC über das LAN. Es ist 21 Uhr UTC."), ] def render(text): req = urllib.request.Request(SERVER, data=json.dumps({"text": text}).encode("utf-8"), headers={"Content-Type": "application/json"}) return urllib.request.urlopen(req, timeout=180).read() w = WhisperModel("small", device="cpu", compute_type="int8") for name, text in TESTS: wav = render(text) path = os.path.join(OUT, name + ".wav"); open(path, "wb").write(wav) a, sr = sf.read(io.BytesIO(wav)); a = np.asarray(a, dtype=np.float32).reshape(-1); dur = len(a)/sr segs, _ = w.transcribe(path, language="de", beam_size=5, word_timestamps=True) words = [x for s in segs for x in (s.words or [])] got = " ".join(x.word.strip() for x in words) pauses = [(words[i].word.strip(), words[i+1].start - words[i].end) for i in range(len(words)-1) if (words[i+1].start - words[i].end) >= 0.25] print(f"\n### {name} {dur:.1f}s {len(words)} Wörter") print(f"IST: {got}") if pauses: print("PAUSEN>=250ms: " + ", ".join(f'„{ww}\"={gg*1000:.0f}ms' for ww, gg in sorted(pauses, key=lambda t:-t[1])[:6])) else: print("PAUSEN>=250ms: KEINE") print("\n=== FERTIG ===")