VoxClone / app.py
akash015's picture
Update app.py
f3fdb9f verified
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()