Spaces:
Running
Running
File size: 2,809 Bytes
2bbabc3 ce98cc8 2bbabc3 ce98cc8 f88a8c0 ce98cc8 7481e8e ce98cc8 2bbabc3 51e442c ce98cc8 51e442c 2bbabc3 51e442c ce98cc8 51e442c 2bbabc3 7481e8e ce98cc8 7481e8e ce98cc8 7481e8e ce98cc8 2bbabc3 ce98cc8 2bbabc3 ce98cc8 51e442c ce98cc8 51e442c ce98cc8 2bbabc3 ce98cc8 2bbabc3 ce98cc8 |
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 |
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):
# Handle Tigrinya as Amharic with different label
if language == "Tigrinya":
language = "Amharic"
try:
voice = language_dict[language][speaker]
except KeyError:
error_msg = (f"α΅α
α°α΅: α΅αα
'{speaker}' α αα°αααα’"
if language == "Amharic"
else f"Error: Voice '{speaker}' not found")
raise gr.Error(error_msg)
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 = ("α΅α
α°α΅: αα α αααα’ α₯α£αα α₯αα°αα αααα©α’"
if language == "Amharic"
else "Error: Timeout. Please try again.")
raise gr.Error(error_msg)
except Exception as e:
error_msg = (f"α΅α
α°α΅: {str(e)}"
if language == "Amharic"
else f"Error: {str(e)}")
raise gr.Error(error_msg)
def update_speakers(language):
if language == "Tigrinya":
speakers = list(language_dict["Amharic"].keys())
else:
speakers = list(language_dict.get(language, []))
return gr.Dropdown(choices=speakers, value=speakers[0] if speakers else None)
with gr.Blocks(title="SelamGPT TTS") as demo:
gr.Markdown("## Amharic, English & Tigrinya Text-to-Speech")
with gr.Row():
language = gr.Dropdown(
choices=["Amharic", "English", "Tigrinya"],
value="Amharic",
label="Language"
)
speaker = gr.Dropdown(
label="Speaker",
allow_custom_value=False
)
input_text = gr.Textbox(label="Input Text")
generate_btn = gr.Button("Generate Audio")
output_audio = gr.Audio(label="Output")
# API endpoints
demo.load(
fn=lambda: gr.Dropdown(choices=language_dict["Amharic"].keys()),
outputs=speaker
)
language.change(
update_speakers,
inputs=language,
outputs=speaker
)
generate_btn.click(
text_to_speech_edge,
inputs=[input_text, language, speaker],
outputs=output_audio
)
if __name__ == "__main__":
demo.launch(server_port=7860) |