|
import os |
|
from TTS.utils.download import download_url |
|
from TTS.utils.synthesizer import Synthesizer |
|
import gradio as gr |
|
import tempfile |
|
|
|
MAX_TXT_LEN = 800 |
|
Model_DIR = "models" |
|
MODEL_URL = "https://huggingface.co/SpicyqSama007/Bert-VITS2-train-models/resolve/main/G_0.pth" |
|
CONFIG_URL = "https://huggingface.co/SpicyqSama007/Bert-VITS2-train-models/resolve/main/config.json" |
|
|
|
def download_model_and_config(): |
|
if not os.path.exists(Model_DIR): |
|
os.makedirs(Model_DIR) |
|
download_url(MODEL_URL, Model_DIR, "model.pth") |
|
download_url(CONFIG_URL, Model_DIR, "config.json") |
|
return Model_DIR |
|
|
|
download_model_and_config() |
|
|
|
def tts(text: str): |
|
if len(text) > MAX_TXT_LEN: |
|
text = text[:MAX_TXT_LEN] |
|
print(f"Input text was cutoff since it went over the {MAX_TXT_LEN} character limit.") |
|
print(text) |
|
|
|
|
|
|
|
|
|
|
|
|
|
synthesizer = Synthesizer(f"{Model_DIR}/model.pth", f"{Model_DIR}/config.json") |
|
wavs = synthesizer.tts(text) |
|
|
|
|
|
with tempfile.NamedTemporaryFile(suffix=".wav", delete=False) as fp: |
|
synthesizer.save_wav(wavs, fp) |
|
return fp.name |
|
|
|
iface = gr.Interface( |
|
fn=tts, |
|
inputs=[ |
|
gr.Textbox( |
|
label="Text", |
|
value="Default text here if you need it.", |
|
) |
|
], |
|
outputs=gr.Audio(label="Output", type='filepath'), |
|
title="TTS", |
|
live=False |
|
) |
|
|
|
iface.launch(share=False) |