File size: 4,882 Bytes
8404c1b
e4dc2fb
 
8404c1b
e4dc2fb
 
 
 
 
 
 
 
 
8404c1b
 
e4dc2fb
 
 
8404c1b
e4dc2fb
8404c1b
e4dc2fb
 
 
 
 
 
 
 
 
 
8404c1b
e4dc2fb
 
 
 
 
 
 
 
 
 
 
 
8404c1b
 
e4dc2fb
 
 
 
 
 
 
 
8404c1b
e4dc2fb
8404c1b
 
e4dc2fb
 
 
 
 
 
8404c1b
e4dc2fb
 
 
 
 
 
8404c1b
60c97aa
e4dc2fb
 
 
 
 
 
60c97aa
e4dc2fb
 
 
 
60c97aa
8404c1b
e4dc2fb
 
 
 
 
 
 
 
8404c1b
 
 
 
 
 
e4dc2fb
 
8404c1b
e4dc2fb
8404c1b
e4dc2fb
 
8404c1b
 
 
e4dc2fb
 
 
 
 
 
 
 
 
8404c1b
 
e4dc2fb
 
 
 
 
 
 
 
 
 
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
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()