kushan1988's picture
app.py
bf87380
import tempfile
from typing import Optional
from TTS.config import load_config
import gradio as gr
import numpy as np
from TTS.utils.manage import ModelManager
from TTS.utils.synthesizer import Synthesizer
MODELS = {}
SPEAKERS = {}
MAX_TXT_LEN = 100
manager = ModelManager()
MODEL_NAMES = manager.list_tts_models()
# filter out multi-speaker models and slow wavegrad vocoders
filters = ["vctk", "your_tts", "ek1"]
MODEL_NAMES = [model_name for model_name in MODEL_NAMES if not any(f in model_name for f in filters)]
EN = [el for el in MODEL_NAMES if "/en/" in el]
OTHER = [el for el in MODEL_NAMES if "/en/" not in el]
EN[0], EN[5] = EN[5], EN[0]
MODEL_NAMES = EN + OTHER
# reorder models
print(MODEL_NAMES)
def tts(text: str, model_name: 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, model_name)
# download model
model_path, config_path, model_item = manager.download_model(model_name)
vocoder_name: Optional[str] = model_item["default_vocoder"]
# download vocoder
vocoder_path = None
vocoder_config_path = None
if vocoder_name is not None:
vocoder_path, vocoder_config_path, _ = manager.download_model(vocoder_name)
# init synthesizer
synthesizer = Synthesizer(
model_path, config_path, None, None, vocoder_path, vocoder_config_path,
)
# synthesize
if synthesizer is None:
raise NameError("model not found")
wavs = synthesizer.tts(text, None)
# return output
with tempfile.NamedTemporaryFile(suffix=".wav", delete=False) as fp:
synthesizer.save_wav(wavs, fp)
return fp.name
with gr.Blocks(analytics_enabled=False) as demo:
gr.Markdown("<h2 align='center'>🐸💬 CoquiTTS Model Testing Playground 🐸💬</h2>")
with gr.Row():
with gr.Column():
input_text = gr.Textbox(
label="Input Text",
value="This sentence has been generated by a speech synthesis system.",
)
model_select = gr.Dropdown(
label="Pick Model: tts_models/<language>/<dataset>/<model_name>",
choices=MODEL_NAMES,
value="tts_models/en/jenny/jenny"
)
tts_button = gr.Button("Send", elem_id="send-btn", visible=True)
with gr.Column():
output_audio = gr.Audio(label="Output", type="filepath")
tts_button.click(
tts,
inputs=[
input_text,
model_select,
],
outputs=[output_audio],
)
# iface = gr.Interface(fn=tts,
# inputs=[
# gr.Text(label="text", value="Hello, how are you?"),
# gr.Dropdown(choices=MODEL_NAMES, label="Models", info="Chose a model.", default="tts_models/en/jenny/jenny")
# ],
# outputs=[gr.Audio(label="Output", type="filepath")],
# examples=[
# ["Hello Jhon. Welcome to our group.", "model1.wav"],
# ["Hello Jhon. Welcome to our group.", "model2.mp3"]]
# )
# iface.launch(share=True, debug=True)
demo.queue(concurrency_count=16).launch(debug=True)