Spaces:
Running
Running
import gradio as gr | |
import tempfile | |
from TTS.api import TTS | |
from huggingface_hub import hf_hub_download | |
import torch | |
CUDA = torch.cuda.is_available() | |
REPO_ID = "ayymen/Coqui-TTS-Vits-shi" | |
VOICE_CONVERSION_MODELS = { | |
'freevc24': 'voice_conversion_models/multilingual/vctk/freevc24' | |
'openvoice_v1': 'voice_conversion_models/multilingual/multi-dataset/openvoice_v1', | |
'openvoice_v2': 'voice_conversion_models/multilingual/multi-dataset/openvoice_v2', | |
} | |
my_title = "ⴰⴹⵕⵉⵚ ⵙ ⵉⵎⵙⵍⵉ - Tamazight Text-to-Speech" | |
my_description = "This model is based on [VITS](https://github.com/jaywalnut310/vits), thanks to 🐸 [Coqui.ai](https://coqui.ai/)." | |
my_examples = [ | |
["ⴰⵣⵓⵍ. ⵎⴰⵏⵣⴰⴽⵉⵏ?"], | |
["ⵡⴰ ⵜⴰⵎⵖⴰⵔⵜ ⵎⴰ ⴷ ⵓⴽⴰⵏ ⵜⵙⴽⵔⵜ?"], | |
["ⴳⵏ ⴰⴷ ⴰⴽ ⵉⵙⵙⴳⵏ ⵕⴱⴱⵉ ⵉⵜⵜⵓ ⴽ."], | |
["ⴰⵔⵔⴰⵡ ⵏ ⵍⵀⵎⵎ ⵢⵓⴽⵔ ⴰⵖ ⵉⵀⴷⵓⵎⵏ ⵏⵏⵖ!"] | |
] | |
my_inputs = [ | |
gr.Textbox(lines=5, label="Input Text", placeholder="The only available characters are: ⴰⴱⴳⴷⴹⴻⴼⴽⵀⵃⵄⵅⵇⵉⵊⵍⵎⵏⵓⵔⵕⵖⵙⵚⵛⵜⵟⵡⵢⵣⵥⵯ !,.:?"), | |
gr.Audio(type="filepath", label="Speaker audio for voice cloning (optional)"), | |
gr.Dropdown(label="Voice Conversion Model", choices=list(VOICE_CONVERSION_MODELS.keys())), | |
gr.Checkbox(label="Split Sentences (each sentence will be generated separately)", value=True) | |
] | |
my_outputs = gr.Audio(type="filepath", label="Output Audio", autoplay=True) | |
best_model_path = hf_hub_download(repo_id=REPO_ID, filename="best_model.pth") | |
config_path = hf_hub_download(repo_id=REPO_ID, filename="config.json") | |
api = TTS(model_path=best_model_path, config_path=config_path).to("cuda" if CUDA else "cpu") | |
# pre-download voice conversion models | |
for model in VOICE_CONVERSION_MODELS.values(): | |
api.load_vc_model_by_name(model, gpu=CUDA) | |
def tts(text: str, speaker_wav: str = None, voice_cv_model: str = 'freevc24', split_sentences: bool = True): | |
# replace oov characters | |
text = text.replace("\n", ". ") | |
text = text.replace("(", ",") | |
text = text.replace(")", ",") | |
text = text.replace('"', ",") | |
text = text.replace(";", ",") | |
text = text.replace("-", " ") | |
with tempfile.NamedTemporaryFile(suffix = ".wav", delete = False) as fp: | |
if speaker_wav: | |
api.load_vc_model_by_name(VOICE_CONVERSION_MODELS[voice_cv_model], gpu=CUDA) | |
api.tts_with_vc_to_file(text, speaker_wav=speaker_wav, file_path=fp.name, split_sentences=split_sentences) | |
else: | |
api.tts_to_file(text, file_path=fp.name, split_sentences=split_sentences) | |
return fp.name | |
iface = gr.Interface( | |
fn=tts, | |
inputs=my_inputs, | |
outputs=my_outputs, | |
title=my_title, | |
description=my_description, | |
examples=my_examples, | |
cache_examples=True | |
) | |
iface.launch() | |