Spaces:
Running
Running
import tempfile | |
import edge_tts | |
import gradio as gr | |
import asyncio | |
language_dict = { | |
"Amharic": { | |
"Ameha": "am-ET-AmehaNeural", | |
"Mekdes": "am-ET-MekdesNeural" | |
} | |
} | |
async def text_to_speech_edge(text, speaker): | |
voice = language_dict["Amharic"][speaker] | |
try: | |
communicate = edge_tts.Communicate(text, voice) | |
# Create temp file with increased timeout | |
with tempfile.NamedTemporaryFile(delete=False, suffix=".mp3") as tmp_file: | |
tmp_path = tmp_file.name | |
await asyncio.wait_for(communicate.save(tmp_path), timeout=30) | |
return tmp_path | |
except asyncio.TimeoutError: | |
error_msg = "α΅α α°α΅: αα α αααα’ α₯α£αα α₯αα°αα αααα©α’ (Timeout)" | |
raise gr.Error(error_msg) | |
except Exception as e: | |
error_msg = f"α΅α α°α΅: α΅αα ααα α α αα°α»ααα’\nError: {str(e)}" | |
raise gr.Error(error_msg) | |
with gr.Blocks(title="Amharic TTS") as demo: | |
gr.HTML(""" | |
<style> | |
h1 { color: #FF007F; text-align: center; } | |
.gradio-button { background-color: #FF007F !important; color: white !important; } | |
.gradio-textbox, .gradio-dropdown { border-color: #FF007F !important; } | |
</style> | |
<center><h1>Amharic Text-to-Speech</h1></center> | |
""") | |
with gr.Row(): | |
with gr.Column(): | |
input_text = gr.Textbox(lines=5, label="α¨α ααα α½αα", | |
placeholder="α΅αα αααα α α½αα α«α΅αα‘...") | |
speaker = gr.Dropdown( | |
choices=["Ameha", "Mekdes"], | |
value="Ameha", | |
label="α αα²α΅α΅" | |
) | |
run_btn = gr.Button(value="α΅αα αα α", variant="primary") | |
with gr.Column(): | |
output_audio = gr.Audio(type="filepath", label="α¨α΅αα αα€α΅") | |
run_btn.click( | |
text_to_speech_edge, | |
inputs=[input_text, speaker], | |
outputs=output_audio | |
) | |
if __name__ == "__main__": | |
demo.launch(server_port=7860, share=False) |