Spaces:
Runtime error
Runtime error
import os | |
from datetime import datetime | |
from inspect import signature | |
import gradio as gr | |
import torch | |
from omegaconf import OmegaConf | |
torch.hub.download_url_to_file( | |
"https://raw.githubusercontent.com/snakers4/silero-models/master/models.yml", | |
"latest_silero_models.yml", | |
progress=False, | |
) | |
all_models = OmegaConf.load("latest_silero_models.yml") | |
language="ru" | |
model_id = "v3_1_ru" | |
device = torch.device("cpu") | |
model, example_text = torch.hub.load( | |
repo_or_dir="snakers4/silero-models", | |
model="silero_tts", | |
language=language, | |
speaker=model_id, | |
) | |
model.to(device) # gpu or cpu | |
sample_rate = 48000 | |
speaker = "aidar" | |
put_accent = True | |
put_yo = True | |
example_text = "В недрах тундры выдры в г+етрах т+ырят в вёдра ядра к+едров." | |
models = list(all_models.tts_models.get(language).keys()) | |
model, example_text = torch.hub.load( | |
repo_or_dir='snakers4/silero-models', | |
model='silero_tts', | |
language='ru', | |
speaker=model_id | |
) | |
def change_language(language): | |
models = list(all_models.tts_models.get(language).keys()) | |
return model_input.update(choices=models) | |
def change_model(language, model_name): | |
model, example_text = torch.hub.load( | |
repo_or_dir='snakers4/silero-models', | |
model='silero_tts', | |
language=language, | |
speaker=model_name | |
) | |
return speaker_input.update(choices=model.speakers) | |
def generate_audio_by_text(text, text_type, speaker): | |
output_file_name = "{datetime}.wav".format(datetime=datetime.now().isoformat().replace(':', '-')) | |
output = os.path.join("out_audio", output_file_name) | |
if text_type == 'SSML': | |
return model.save_wav( | |
audio_path=output, | |
ssml_text=text, | |
speaker=speaker, | |
sample_rate=sample_rate, | |
put_accent=put_accent, | |
put_yo=put_yo, | |
) | |
else: | |
return model.save_wav( | |
audio_path=output, | |
text=text, | |
speaker=speaker, | |
sample_rate=sample_rate, | |
put_accent=put_accent, | |
put_yo=put_yo, | |
) | |
with gr.Blocks() as demo: | |
with gr.Row(): | |
with gr.Column(): | |
language_input = gr.Dropdown( | |
label="Language", | |
choices=list(all_models.tts_models.keys()), | |
value="ru", | |
interactive=True, | |
) | |
model_input = gr.Dropdown( | |
label="Model (based on selected language)", | |
value="v3_1_ru", | |
choices=models, | |
interactive=True, | |
) | |
speaker_input = gr.Dropdown( | |
label="Speaker (based on selected model)", | |
value="kseniya", | |
choices=model.speakers, | |
interactive=True, | |
) | |
text_input = gr.Textbox( | |
label="Text for generating", | |
value="В недрах тундры выдры в г+етрах т+ырят в вёдра +ядра к+едров.", | |
lines=5, | |
interactive=True, | |
) | |
text_type_input = gr.Radio( | |
label="Text type", | |
choices=["Common", "SSML"], | |
value="Common", | |
interactive=True, | |
) | |
language_input.change(change_language, inputs=language_input, outputs=model_input) | |
model_input.change(change_model, inputs=[language_input, model_input], outputs=speaker_input) | |
with gr.Column(): | |
audio_output = gr.Audio(label="Output audio") | |
generate_btn = gr.Button(value="Generate", variant="primary") | |
generate_btn.click( | |
generate_audio_by_text, | |
inputs=[text_input, text_type_input, speaker_input], | |
outputs=audio_output, | |
) | |
gr.Markdown( | |
"This is a simple frontend for [silero](https://github.com/snakers4/silero-models) project (Text-To-Speech part only)." | |
) | |
gr.Markdown( | |
"You can check [official docs](https://github.com/snakers4/silero-models/wiki/SSML) to find information about SSML syntax." | |
) | |
demo.launch() |