Spaces:
Build error
Build error
from TTS.api import TTS | |
import gradio as gr | |
from googletrans import Translator | |
# Load the TTS model | |
tts = TTS("tts_models/multilingual/multi-dataset/xtts_v2", gpu=False) | |
translator = Translator() | |
# Define the list of supported languages | |
SUPPORTED_LANGUAGES = { | |
"English (en)": "en", | |
"Spanish (es)": "es", | |
"French (fr)": "fr", | |
"German (de)": "de", | |
"Italian (it)": "it", | |
"Portuguese (pt)": "pt", | |
"Polish (pl)": "pl", | |
"Turkish (tr)": "tr", | |
"Russian (ru)": "ru", | |
"Dutch (nl)": "nl", | |
"Czech (cs)": "cs", | |
"Arabic (ar)": "ar", | |
"Chinese (zh-cn)": "zh-cn", | |
"Japanese (ja)": "ja", | |
"Hungarian (hu)": "hu", | |
"Korean (ko)": "ko", | |
"Hindi (hi)": "hi" | |
} | |
def translate_text(text, input_lang, output_lang): | |
try: | |
translated = translator.translate(text, src=input_lang, dest=output_lang) | |
return translated.text | |
except Exception as e: | |
return str(e) | |
def generate_speech(input_text, voice_path, input_lang, output_lang, translation_enabled): | |
try: | |
if translation_enabled: | |
translated_text = translate_text(input_text, input_lang, output_lang) | |
if 'ERROR' in translated_text: | |
return translated_text, None | |
else: | |
translated_text = input_text | |
output_lang = input_lang | |
output_path = "output.wav" | |
tts.tts_to_file( | |
text=translated_text, | |
file_path=output_path, | |
speaker_wav=voice_path, | |
language=output_lang, | |
split_sentences=True | |
) | |
return translated_text, output_path | |
except Exception as e: | |
return str(e), None | |
def update_output_lang_options(translation_enabled, input_lang): | |
if not translation_enabled: | |
return gr.update(choices=[input_lang], value=input_lang, interactive=False) | |
return gr.update(choices=list(SUPPORTED_LANGUAGES.values()), value=input_lang, interactive=True) | |
with gr.Blocks() as iface: | |
with gr.Row(): | |
with gr.Column(scale=1): | |
input_text = gr.Textbox(label="Input Text") | |
voice_path = gr.Audio(type="filepath", label="Upload Voice") | |
input_lang = gr.Dropdown(choices=list(SUPPORTED_LANGUAGES.values()), label="Input Language") | |
output_lang = gr.Dropdown(choices=list(SUPPORTED_LANGUAGES.values()), label="Output Language") | |
translation_enabled = gr.Checkbox(label="Enable Translation", value=True) | |
generate_button = gr.Button("Generate Speech") | |
with gr.Column(scale=1): | |
translated_text = gr.Textbox(label="Translated Text") | |
generated_speech = gr.Audio(label="Generated Speech") | |
translation_enabled.change( | |
update_output_lang_options, | |
inputs=[translation_enabled, input_lang], | |
outputs=output_lang | |
) | |
generate_button.click( | |
generate_speech, | |
inputs=[input_text, voice_path, input_lang, output_lang, translation_enabled], | |
outputs=[translated_text, generated_speech] | |
) | |
iface.launch() |