Lucy-TTS/F5: Skripte + Batches versionieren, schwere Assets ignoriert

- pocket_server.py (Produktions-TTS mit Stimmen-Waechter), text_norm, Bench-/Diag-Skripte
- lucy-f5: f5_server/f5_test/bench_dml (DirectML-Experiment, Phase C/D offen)
- .gitignore: venvs/Modelle/Audio/Logs der beiden Ordner + box_recon/gemma_swap-Scratch

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Hitonabi
2026-07-02 10:29:33 +02:00
parent aff0105700
commit 09a1c98514
49 changed files with 8231 additions and 0 deletions
+47
View File
@@ -0,0 +1,47 @@
# -*- coding: utf-8 -*-
import os, time, glob, numpy as np, soundfile as sf
from pocket_tts import TTSModel
BASE = r"F:\Coding Stuff\mission-control-2\client\lucy-tts"
OUT = os.path.join(BASE, "out_preset"); os.makedirs(OUT, exist_ok=True)
t0 = time.time()
m = TTSModel.load_model(language="german_24l")
print(f"[load] {time.time()-t0:.1f}s sr={m.sample_rate}", flush=True)
voice = None
try:
from pocket_tts.default_parameters import get_default_voice_for_language
voice = get_default_voice_for_language(str(getattr(m, "origin", "german_24l")))
except Exception as e:
print("default-voice fehler:", e, flush=True)
for cand in [voice, "anna", "vera", "juergen", "cosette"]:
if not cand: continue
try:
vs = m.get_state_for_audio_prompt(cand); voice = cand; break
except Exception as e:
print(f"voice {cand} nicht nutzbar: {str(e)[:60]}", flush=True)
print(f"[voice] {voice}", flush=True)
SENT = {
"kurz": "Hallo Commander, ich höre dich.",
"mittel":"Guten Morgen, Commander. Das Backup ist sauber durchgelaufen und es gab keine Fehler.",
"lang": "Natürlich kümmere ich mich darum, Commander. Ich starte den Dienst neu, prüfe die Protokolle und melde mich, sobald alles wieder läuft.",
}
for name, text in SENT.items():
for run in ("cold", "warm"):
t0 = time.time()
audio = m.generate_audio(vs, text)
dt = time.time() - t0
a = audio.numpy() if hasattr(audio, "numpy") else np.asarray(audio)
a = np.asarray(a, dtype=np.float32).reshape(-1)
secs = len(a) / m.sample_rate
sf.write(os.path.join(OUT, f"{name}.wav"), a, m.sample_rate)
print(f"[{name:6} {run:4}] gen={dt:5.2f}s audio={secs:5.2f}s RTF={dt/max(secs,0.01):.2f}", flush=True)
print("=== Whisper ===", flush=True)
from faster_whisper import WhisperModel
wm = WhisperModel("small", device="cpu", compute_type="int8")
for p in sorted(glob.glob(os.path.join(OUT, "*.wav"))):
segs, _ = wm.transcribe(p, language="de", beam_size=5)
print(os.path.basename(p), "::", " ".join(s.text.strip() for s in segs), flush=True)
print("PRESET_DONE", flush=True)