File size: 3,048 Bytes
55151cd
f3fdb9f
 
0208d48
f3fdb9f
376e6d0
6008cad
376e6d0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6008cad
b6133a3
376e6d0
b6133a3
376e6d0
 
 
 
 
b6133a3
376e6d0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f3fdb9f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
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()