theodotus's picture
Added mykyta-lite
a74109d
import gradio as gr
import tempfile
from huggingface_hub import hf_hub_download
from torch import no_grad, package
import ctypes
import gc
from accentor import accentification, stress_replace_and_shift, accentors
config = {
"mykyta": "theodotus/tts-vits-mykyta-uk",
"mykyta-lite": "theodotus/tts-vits-mykyta-low-uk",
"olena": "theodotus/tts-vits-olena-uk",
"lada": "theodotus/tts-vits-lada-uk",
"dmytro": "theodotus/tts-vits-dmytro-uk",
"harakternyk": "theodotus/tts-vits-harakternyk-uk",
}
voices = list(config.keys())
tts_kwargs = {
"speaker_name": "uk",
"language_name": "uk",
}
def trim_memory():
libc = ctypes.CDLL("libc.so.6")
libc.malloc_trim(0)
gc.collect()
def init_models():
models = {}
for name, model_name in config.items():
model_path = hf_hub_download(model_name, "model.pt")
importer = package.PackageImporter(model_path)
synt = importer.load_pickle("tts_models", "model")
models[name] = synt
return models
def tts(text: str, voice: str, mode: str):
# accentor
accented_text = accentification(text, mode)
if (mode != "none"):
plussed_text = stress_replace_and_shift(accented_text)
else:
plussed_text = accented_text
# TTS
synt = models[voice]
with tempfile.NamedTemporaryFile(suffix=".wav", delete=False) as fp:
with no_grad():
wav_data = synt.tts(plussed_text, **tts_kwargs)
synt.save_wav(wav_data, fp)
trim_memory()
return fp.name, accented_text
models = init_models()
iface = gr.Interface(
fn=tts,
inputs=[
gr.Textbox(
label="Input",
value="Кам'янець-Подільський - місто в Хмельницькій області України, центр Кам'янець-Подільської міської об'єднаної територіальної громади і Кам'янець-Подільського району.",
),
gr.Radio(
label="Voice",
choices=voices,
value=voices[0],
),
gr.Radio(
label="Accentor",
choices=accentors,
value=accentors[0],
),
],
outputs=[
gr.Audio(label="Output"),
gr.Textbox(label="Stressed")
],
title="🇺🇦 - Ukrainian Voices",
article="[Harakternyk](https://huggingface.co/theodotus/tts-vits-harakternyk-uk) model is licensed under [CC BY-NC 4.0](https://creativecommons.org/licenses/by-nc/4.0/)",
)
iface.launch()