Spaces:
Paused
Paused
Update app.py
Browse files
app.py
CHANGED
|
@@ -442,17 +442,6 @@ language_dict = {
|
|
| 442 |
}
|
| 443 |
|
| 444 |
|
| 445 |
-
async def text_to_speech_edge(text, language_code, speaker, tashkeel_checkbox=False):
|
| 446 |
-
|
| 447 |
-
|
| 448 |
-
# Get the voice for the selected language and speaker
|
| 449 |
-
voice = language_dict[language_code][speaker]
|
| 450 |
-
communicate = edge_tts.Communicate(text, voice)
|
| 451 |
-
with tempfile.NamedTemporaryFile(delete=False, suffix=".mp3") as tmp_file:
|
| 452 |
-
tmp_path = tmp_file.name
|
| 453 |
-
await communicate.save(tmp_path)
|
| 454 |
-
|
| 455 |
-
return text, tmp_path
|
| 456 |
|
| 457 |
|
| 458 |
def get_speakers(language):
|
|
@@ -463,27 +452,41 @@ def get_speakers(language):
|
|
| 463 |
|
| 464 |
default_language = None
|
| 465 |
default_speaker = None
|
| 466 |
-
|
| 467 |
-
|
| 468 |
-
|
|
|
|
|
|
|
| 469 |
|
| 470 |
-
|
| 471 |
-
with
|
| 472 |
-
|
| 473 |
-
|
| 474 |
-
|
| 475 |
-
choices=list(language_dict.keys()), value=default_language, label="Languages", interactive=True
|
| 476 |
-
)
|
| 477 |
-
speaker = gr.Dropdown(choices=[], value=default_speaker, label="Speakers", interactive=False)
|
| 478 |
-
tashkeel_checkbox = gr.Checkbox(label="Tashkeel", value=False, visible=False, interactive=False)
|
| 479 |
-
run_btn = gr.Button(value="Generate Audio", variant="primary")
|
| 480 |
|
| 481 |
-
|
| 482 |
-
|
| 483 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 484 |
|
| 485 |
-
|
| 486 |
-
|
| 487 |
|
| 488 |
-
|
| 489 |
-
demo.queue().launch(share=False)
|
|
|
|
| 442 |
}
|
| 443 |
|
| 444 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 445 |
|
| 446 |
|
| 447 |
def get_speakers(language):
|
|
|
|
| 452 |
|
| 453 |
default_language = None
|
| 454 |
default_speaker = None
|
| 455 |
+
max_words = 1600 # Maximum word limit for input text
|
| 456 |
+
|
| 457 |
+
async def generate_audio(text, language, voice):
|
| 458 |
+
if len(text.split()) > max_words:
|
| 459 |
+
return "Error: Input text exceeds the maximum allowed word limit of 1600.", None
|
| 460 |
|
| 461 |
+
communicator = edge_tts.Communicate(text, voice)
|
| 462 |
+
with tempfile.NamedTemporaryFile(delete=False, suffix=".mp3") as tmp_file:
|
| 463 |
+
file_path = tmp_file.name
|
| 464 |
+
await communicator.save(file_path)
|
| 465 |
+
return None, file_path
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 466 |
|
| 467 |
+
def tts_wrapper(text, language, voice):
|
| 468 |
+
error_message, audio_path = gr.Blocks.run_coroutine(generate_audio(text, language, voice))
|
| 469 |
+
if error_message:
|
| 470 |
+
return error_message, None
|
| 471 |
+
return None, audio_path
|
| 472 |
+
|
| 473 |
+
def update_voices(language):
|
| 474 |
+
return list(language_dict[language].keys())
|
| 475 |
+
|
| 476 |
+
with gr.Blocks() as app:
|
| 477 |
+
gr.Markdown("# Text-to-Speech Application")
|
| 478 |
+
with gr.Row():
|
| 479 |
+
text_input = gr.Textbox(lines=5, label="Input Text", placeholder="Enter text to convert to speech")
|
| 480 |
+
with gr.Row():
|
| 481 |
+
language_dropdown = gr.Dropdown(choices=list(language_dict.keys()), label="Select Language", value="English")
|
| 482 |
+
voice_dropdown = gr.Dropdown(choices=list(language_dict["English"].keys()), label="Select Voice", value="Jenny")
|
| 483 |
+
with gr.Row():
|
| 484 |
+
submit_button = gr.Button("Generate Speech")
|
| 485 |
+
with gr.Row():
|
| 486 |
+
error_output = gr.Textbox(label="Error Message", interactive=False)
|
| 487 |
+
audio_output = gr.Audio(label="Generated Audio", type="filepath")
|
| 488 |
|
| 489 |
+
language_dropdown.change(update_voices, inputs=[language_dropdown], outputs=[voice_dropdown])
|
| 490 |
+
submit_button.click(tts_wrapper, inputs=[text_input, language_dropdown, voice_dropdown], outputs=[error_output, audio_output])
|
| 491 |
|
| 492 |
+
app.launch()
|
|
|