import tempfile from typing import Optional import gradio as gr import numpy as np from TTS.utils.manage import ModelManager from TTS.utils.synthesizer import Synthesizer MODEL_NAMES = [ # "en/ek1/tacotron2", "en/ljspeech/tacotron2-DDC", # "en/ljspeech/tacotron2-DDC_ph", # "en/ljspeech/glow-tts", # "en/ljspeech/tacotron2-DCA", # "en/ljspeech/speedy-speech-wn", # "en/ljspeech/vits", # "en/vctk/sc-glow-tts", # "en/vctk/vits", # "en/sam/tacotron-DDC", # "es/mai/tacotron2-DDC", "fr/mai/tacotron2-DDC", "zh-CN/baker/tacotron2-DDC-GST", "nl/mai/tacotron2-DDC", "de/thorsten/tacotron2-DCA", # "ja/kokoro/tacotron2-DDC", ] MODELS = {} manager = ModelManager() for MODEL_NAME in MODEL_NAMES: print(f"downloading {MODEL_NAME}") model_path, config_path, model_item = manager.download_model(f"tts_models/{MODEL_NAME}") vocoder_name: Optional[str] = model_item["default_vocoder"] vocoder_path = None vocoder_config_path = None if vocoder_name is not None: vocoder_path, vocoder_config_path, _ = manager.download_model(vocoder_name) synthesizer = Synthesizer( model_path, config_path, None, vocoder_path, vocoder_config_path, ) MODELS[MODEL_NAME] = synthesizer def tts(text: str, model_name: str): print(text, model_name) synthesizer = MODELS.get(model_name, None) if synthesizer is None: raise NameError("model not found") wavs = synthesizer.tts(text) # output = (synthesizer.output_sample_rate, np.array(wavs)) # return output with tempfile.NamedTemporaryFile(suffix=".wav", delete=False) as fp: synthesizer.save_wav(wavs, fp) return fp.name iface = gr.Interface( fn=tts, inputs=[ gr.inputs.Textbox( label="Input", default="Hello, how are you?", ), gr.inputs.Radio( label="Pick a TTS Model", choices=MODEL_NAMES, ), ], outputs=gr.outputs.Audio(label="Output"), title="πŸΈπŸ’¬ - Coqui TTS", theme="huggingface", description="πŸΈπŸ’¬ - a deep learning toolkit for Text-to-Speech, battle-tested in research and production", article="more info at https://github.com/coqui-ai/TTS", ) iface.launch()