Spaces:
Sleeping
Sleeping
| 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() | |