"""Regenerates samples/*.mp3 on CPU (run from the repo root; prints name, audio seconds, generation seconds, text).""" import soundfile as sf, subprocess, os, time from hugin import Hugin h = Hugin.from_pretrained(device="cpu") S = [("01_halsning", "Hej och välkommen! Jag heter Hugin, och jag läser svensk text högt."), ("02_siffror", "Tåget mot Göteborg avgår kl. 19:05 från spår 3, och biljetten kostar 245 kr. Ring 08-123 45 67 om du har frågor."), ("03_berattelse", "Det var en tidig morgon i slutet av augusti. Dimman låg fortfarande kvar över sjön, och någonstans långt borta hördes en båtmotor."), ("04_nyhet", "Under natten väntas kraftiga vindar längs kusten, och flera färjeturer kan bli inställda redan i morgon bitti."), ("05_uttal", "Sju sjösjuka sjömän sköljde skjortorna, medan Rolf ringde runt till rektorerna."), ("06_partikelverb", "Hon tog upp frågan på mötet, men chefen höll inte med. Det kan jag inte berätta eftersom det råder förundersökningssekretess."), ("07_engelska", "Could you send me the updated report before lunch tomorrow? The meeting starts at 10:30."), ("08_blandat", "Vi har en deadline på fredag, så jag bokar ett kort meeting med vårt product team. Alla kortkunder får cashback.")] os.makedirs("samples", exist_ok=True) for name, t in S: h.tts("Hej, ett kort och cashback.") # warm-up (also loads the lazily loaded homograph and English-detection parts) t0 = time.time(); y, sr = h.tts(t); el = time.time() - t0 sf.write(f"samples/{name}.wav", y, sr) subprocess.run(["ffmpeg", "-loglevel", "error", "-y", "-i", f"samples/{name}.wav", "-b:a", "96k", f"samples/{name}.mp3"], check=True); os.remove(f"samples/{name}.wav") print(f"{name}\t{len(y)/sr:.1f}\t{el:.2f}\t{t}", flush=True)