File size: 4,727 Bytes
bb3964e
91c5e4d
fa1f44a
ead2fe3
db58593
ead2fe3
 
 
ade1f36
c580d77
b8079f3
 
 
 
 
 
 
 
 
 
c580d77
b8079f3
c580d77
b8079f3
 
c580d77
b8079f3
 
 
 
 
 
c580d77
 
b8079f3
 
c580d77
b8079f3
 
 
 
 
 
 
 
 
c580d77
b8079f3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c580d77
 
81bb6d6
 
 
 
 
b8079f3
ead2fe3
97482f2
 
b8079f3
ead2fe3
 
ade1f36
783f242
ade1f36
 
 
 
 
fa1f44a
783f242
fa1f44a
783f242
 
ade1f36
21d5d4f
fa1f44a
46acd9e
a4db718
46acd9e
97482f2
46acd9e
fa1f44a
 
c580d77
b8079f3
 
fa1f44a
 
 
 
46acd9e
c580d77
 
 
b8079f3
ade1f36
c580d77
783f242
c580d77
 
 
b8079f3
ade1f36
ead2fe3
783f242
97482f2
427214b
fa1f44a
ead2fe3
b7effce
97482f2
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
import gradio as gr
import tempfile
from gtts import gTTS
from gtts.lang import tts_langs

# Get available languages for Google TTS
google_langs = tts_langs()

# Create descriptive names for all supported languages
google_lang_descriptions = {
    "af": "Afrikaans",
    "ar": "Arabic",
    "bn": "Bengali",
    "bs": "Bosnian",
    "ca": "Catalan",
    "cs": "Czech",
    "cy": "Welsh",
    "da": "Danish",
    "de": "German",
    "el": "Greek",
    "en": "English",
    "eo": "Esperanto",
    "es": "Spanish",
    "et": "Estonian",
    "fi": "Finnish",
    "fr": "French",
    "gu": "Gujarati",
    "hi": "Hindi",
    "hr": "Croatian",
    "hu": "Hungarian",
    "id": "Indonesian",
    "is": "Icelandic",
    "it": "Italian",
    "ja": "Japanese",
    "jw": "Javanese",
    "kn": "Kannada",
    "ko": "Korean",
    "la": "Latin",
    "lv": "Latvian",
    "ml": "Malayalam",
    "mr": "Marathi",
    "my": "Myanmar",
    "ne": "Nepali",
    "nl": "Dutch",
    "no": "Norwegian",
    "pl": "Polish",
    "pt": "Portuguese",
    "ro": "Romanian",
    "ru": "Russian",
    "si": "Sinhala",
    "sk": "Slovak",
    "sq": "Albanian",
    "sr": "Serbian",
    "su": "Sundanese",
    "sv": "Swedish",
    "sw": "Swahili",
    "ta": "Tamil",
    "te": "Telugu",
    "th": "Thai",
    "tr": "Turkish",
    "uk": "Ukrainian",
    "ur": "Urdu",
    "vi": "Vietnamese",
    "zh-CN": "Chinese (Simplified)",
    "zh-TW": "Chinese (Traditional)"
}

# Add any missing languages dynamically from gtts.langs() and fallback to code itself if not in predefined list
for lang_code in google_langs.keys():
    if lang_code not in google_lang_descriptions:
        google_lang_descriptions[lang_code] = google_langs[lang_code]

# Define voice options for English, as an example (others can be added as needed)
google_voice_options = {
    "en": [("Australia", "com.au"), ("Canada", "ca"), ("United Kingdom", "co.uk"), 
           ("United States", "com"), ("India", "co.in"), ("Ireland", "ie"), ("South Africa", "co.za")],
    # Add voice options for other languages if applicable
}

def google_tts(text, lang, tld=None):
    try:
        # Only include tld if it's provided (for languages like English)
        if tld:
            tts = gTTS(text=text, lang=lang, tld=tld, slow=False)
        else:
            tts = gTTS(text=text, lang=lang, slow=False)  # No TLD for languages without specific variants
        
        with tempfile.NamedTemporaryFile(delete=False, suffix=".mp3") as temp_audio:
            tts.save(temp_audio.name)
            temp_audio_path = temp_audio.name

        return temp_audio_path, f"Speech generated with Google TTS using {google_lang_descriptions.get(lang, lang)} language"
    except Exception as e:
        return None, f"Error in Google TTS speech generation: {str(e)}"

# Gradio interface
with gr.Blocks() as iface:
    gr.Markdown("# Google TTS Tool")
    
    text_input = gr.Textbox(label="Enter text for speech generation")
    
    # Create dropdown for descriptive language options
    google_lang_input = gr.Dropdown([google_lang_descriptions[key] for key in google_langs.keys()], label="Select Language", value="English")
    google_voice_input = gr.Dropdown([x[0] for x in google_voice_options.get("en", [])], label="Select Voice Variant", value="United States")
    
    speech_button = gr.Button("Generate Speech")
    speech_output = gr.Audio(label="Generated Speech")
    speech_message = gr.Textbox(label="Message")

    def generate_speech(text, google_lang_desc, google_voice_desc):
        # Convert descriptive language back to its code
        google_lang_code = [key for key, value in google_lang_descriptions.items() if value == google_lang_desc][0]
        # Find the tld (country code) based on the description (if applicable)
        google_voice_tld = dict(google_voice_options.get(google_lang_code, [("Default", None)])).get(google_voice_desc, None)
        return google_tts(text, google_lang_code, google_voice_tld)

    def update_google_voice_options(lang_desc):
        # Convert descriptive language back to its code
        google_lang_code = [key for key, value in google_lang_descriptions.items() if value == lang_desc][0]
        # Update the voice dropdown with corresponding voice options (if available)
        return gr.Dropdown(choices=[x[0] for x in google_voice_options.get(google_lang_code, [("Default", None)])], value="Default")

    speech_button.click(generate_speech, 
                        inputs=[text_input, google_lang_input, google_voice_input], 
                        outputs=[speech_output, speech_message])
    
    google_lang_input.change(update_google_voice_options, inputs=[google_lang_input], outputs=[google_voice_input])

iface.launch()