| |
| """Slovenian Gepard TTS inference: text -> NanoCodec tokens (GepardRunner) -> waveform |
| (UnfoldedCodecModel). Run with the gepard-train venv_infer (has gepard + NeMo codec). |
| |
| cd third_party/gepard-train |
| CUDA_VISIBLE_DEVICES=0 ./venv_infer/bin/python /home/tex/repos/trainer_slo/scripts/gepard_tts.py |
| """ |
| import os |
| import sys |
|
|
| import soundfile as sf |
| import torch |
|
|
| from gepard.inference.runner import GepardRunner |
| from gepard.inference.codec_wrapper import UnfoldedCodecModel |
|
|
| CKPT = "/home/tex/repos/trainer_slo/outputs/gepard_sl_lora/final" |
| CODEC = "nvidia/nemo-nano-codec-22khz-1.89kbps-21.5fps" |
| OUT = "/tmp/gepard_sl" |
| TEXTS = [ |
| "Danes je lep sončen dan in ptice pojejo na drevesih.", |
| "Trtna uš je vinograde povsem uničila, ostalo je le nekaj brajdovca.", |
| "Umetna inteligenca spreminja svet okoli nas.", |
| "Sestanek se začne ob devetih zjutraj v veliki dvorani.", |
| ] |
|
|
|
|
| def main(): |
| dev = "cuda" if torch.cuda.is_available() else "cpu" |
| os.makedirs(OUT, exist_ok=True) |
| print("loading gepard checkpoint + nano-codec ...", file=sys.stderr) |
| runner = GepardRunner.from_checkpoint(CKPT, device=dev) |
| codec = UnfoldedCodecModel.from_pretrained(CODEC).eval().to(dev) |
| for i, t in enumerate(TEXTS): |
| tokens = runner.generate("sl: " + t, temperature=0.4, top_k=0, |
| cfg_scale=4.5, cfg_frames=25, max_frames=800, |
| repetition_penalty=1.45, repetition_window=32) |
| codes = tokens.unsqueeze(0).to(dev) |
| clen = torch.tensor([codes.shape[-1]], device=dev) |
| with torch.inference_mode(): |
| audio, alen = codec.decode_from_codes(codes, clen) |
| wav = audio[0, : int(alen[0])].detach().cpu().numpy() |
| sf.write(f"{OUT}/{i}.wav", wav, 22050) |
| print(f"[{i}] {len(wav)/22050:.1f}s '{t[:50]}'") |
| print("wavs ->", OUT) |
|
|
|
|
| if __name__ == "__main__": |
| main() |
|
|