import tempfile import edge_tts import gradio as gr import asyncio language_dict = { "Amharic": { "Ameha": "am-ET-AmehaNeural", "Mekdes": "am-ET-MekdesNeural" }, "English": { "Ryan": "en-GB-RyanNeural", "Clara": "en-CA-ClaraNeural" } } async def text_to_speech_edge(text, language, speaker): voice = language_dict[language][speaker] try: communicate = edge_tts.Communicate(text, voice) 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)" if language == "Amharic" else "Error: Timeout. Please try again." raise gr.Error(error_msg) except Exception as e: error_msg = f"ስህተት: ድምፅ መፍጠር አልተቻለም።\nError: {str(e)}" if language == "Amharic" else f"Error: Failed to generate audio.\nDetails: {str(e)}" raise gr.Error(error_msg) def update_speakers(language): speakers = list(language_dict[language].keys()) return gr.Dropdown(choices=speakers, value=speakers[0]) with gr.Blocks(title="Amharic & English TTS") as demo: gr.HTML("""