Arabic-XTTS-TTS / app.py
aladhefafalquran
COMPLETE REWRITE: Switch to Edge-TTS for ultra-natural Arabic voices
e4dc2fb
import gradio as gr
import edge_tts
import asyncio
import os
# Arabic voices from Microsoft Edge TTS (very natural sounding!)
ARABIC_VOICES = {
"ذكر - صوت عمر (مصري)": "ar-EG-ShakirNeural",
"أنثى - صوت سلمى (مصري)": "ar-EG-SalmaNeural",
"ذكر - صوت حامد (سعودي)": "ar-SA-HamedNeural",
"أنثى - صوت زرياء (سعودي)": "ar-SA-ZariyahNeural",
"ذكر - صوت عمر (عام)": "ar-AE-HamdanNeural",
"أنثى - صوت فاطمة (عام)": "ar-AE-FatimaNeural",
}
async def generate_speech(text, voice_name):
"""Generate speech using Edge TTS"""
if not text.strip():
return None, "⚠️ الرجاء إدخال نص"
try:
output_file = "output.mp3"
# Create TTS communication
communicate = edge_tts.Communicate(text, voice_name)
# Generate and save audio
await communicate.save(output_file)
return output_file, f"✅ تم توليد الصوت بنجاح باستخدام: {voice_name}"
except Exception as e:
return None, f"❌ خطأ: {str(e)}"
def generate_speech_sync(text, voice_key):
"""Synchronous wrapper for async function"""
voice_name = ARABIC_VOICES.get(voice_key, list(ARABIC_VOICES.values())[0])
return asyncio.run(generate_speech(text, voice_name))
# Build Gradio interface
with gr.Blocks(
title="Arabic TTS - Professional",
theme=gr.themes.Soft()
) as demo:
gr.Markdown("""
# 🎙️ محول النص إلى كلام العربي الاحترافي
### باستخدام تقنية Microsoft Azure TTS - أصوات طبيعية جداً!
**مميزات:**
- ✨ أصوات طبيعية بجودة عالية جداً
- 🌍 لهجات عربية متنوعة (مصرية، سعودية، إماراتية)
- ⚡ سريع وموثوق
- 🎯 دعم كامل للتشكيل والنطق الصحيح
""")
with gr.Row():
with gr.Column():
# Text input
text_input = gr.Textbox(
label="📝 النص العربي",
placeholder="اكتب النص الذي تريد تحويله إلى كلام...",
lines=6,
value="مرحباً بك في محول النص إلى كلام العربي الاحترافي. هذا النظام يستخدم تقنية متقدمة لتوليد صوت طبيعي جداً.",
)
# Voice selection
voice_dropdown = gr.Dropdown(
choices=list(ARABIC_VOICES.keys()),
value=list(ARABIC_VOICES.keys())[0],
label="🎤 اختر الصوت",
)
# Generate button
generate_btn = gr.Button(
"🚀 توليد الصوت",
variant="primary",
size="lg"
)
with gr.Column():
# Audio output
audio_output = gr.Audio(
label="🔊 الصوت المولد",
type="filepath"
)
# Status
status_output = gr.Textbox(
label="الحالة",
interactive=False
)
# Examples
gr.Markdown("---")
gr.Markdown("### 💡 أمثلة تجريبية")
gr.Examples(
examples=[
["السلام عليكم ورحمة الله وبركاته، كيف حالكم اليوم؟"],
["الذكاء الاصطناعي يُحدث ثورة في عالم التكنولوجيا بشكل سريع ومذهل."],
["مرحباً بكم في عالم التقنية الحديثة والابتكار المستمر."],
["العِلمُ نورٌ والجَهلُ ظلامٌ، فاطلُبوا العِلمَ مِن المَهدِ إلى اللَّحدِ."],
],
inputs=[text_input],
)
# Notes
gr.Markdown("""
---
### 📌 ملاحظات مهمة:
- **اللهجات**: اختر اللهجة المناسبة حسب احتياجك
- **التشكيل**: إضافة التشكيل يحسن النطق بشكل كبير
- **الجودة**: الأصوات المستخدمة هي من أفضل ما هو متاح حالياً
- **السرعة**: التوليد سريع جداً (أقل من 5 ثوانٍ)
### 🎯 اللهجات المتوفرة:
- **مصرية**: صوت طبيعي جداً مع لهجة مصرية واضحة
- **سعودية**: صوت خليجي احترافي
- **إماراتية**: صوت عربي فصيح مع نبرة خليجية
""")
# Connect button to function
generate_btn.click(
fn=generate_speech_sync,
inputs=[text_input, voice_dropdown],
outputs=[audio_output, status_output]
)
# Launch
if __name__ == "__main__":
demo.launch()