import gradio as gr import torch from audiocraft.models import MusicGen from audiocraft.data.audio import audio_write import numpy as np import tempfile import os # تهيئة النموذج device = "cuda" if torch.cuda.is_available() else "cpu" model = MusicGen.get_pretrained('facebook/musicgen-small', device=device) model.set_generation_params(duration=8) # مدة الموسيقى الافتراضية بالثواني # قائمة الأنماط الموسيقية MUSIC_STYLES = { "موسيقى كلاسيكية": "classical orchestra music, peaceful and harmonious", "موسيقى عربية": "traditional arabic music with oud and percussion", "بوب": "upbeat pop music with catchy melody", "روك": "electric guitar rock music with drums", "جاز": "smooth jazz with saxophone and piano", "إلكترونية": "electronic dance music with synthesizer", "هادئة": "calm ambient music with soft melodies", "حماسية": "energetic music with strong beats", "حزينة": "emotional sad music with piano", "سعيدة": "happy cheerful music with positive vibes" } # قائمة الآلات الموسيقية INSTRUMENTS = { "بيانو": "piano", "جيتار": "guitar", "عود": "oud", "كمان": "violin", "طبول": "drums", "ساكسفون": "saxophone", "ناي": "flute", "سينثيسايزر": "synthesizer" } def generate_music(style, mood, instruments, melody_complexity=0.7, rhythm_strength=0.7, harmony_richness=0.7): """ توليد مقطع موسيقي باستخدام المعلمات المحددة """ try: # بناء النص الوصفي للموسيقى style_prompt = MUSIC_STYLES[style] instruments_prompt = ", ".join([INSTRUMENTS[i] for i in instruments]) # إنشاء النص الوصفي الكامل prompt = f"{style_prompt} with {instruments_prompt}, " prompt += f"{'complex' if melody_complexity > 0.7 else 'simple'} melody, " prompt += f"{'strong' if rhythm_strength > 0.7 else 'soft'} rhythm, " prompt += f"{'rich' if harmony_richness > 0.7 else 'basic'} harmony" # توليد الموسيقى model.set_generation_params( use_sampling=True, top_k=250, top_p=0.0, temperature=1.0, cfg_coef=3.0, duration=8 ) output = model.generate([prompt], progress=True) # تحويل الموسيقى إلى ملف صوتي with tempfile.NamedTemporaryFile(suffix='.wav', delete=False) as temp_file: audio_write( temp_file.name, output[0].cpu(), model.sample_rate, strategy="loudness", loudness_compressor=True ) return temp_file.name, prompt except Exception as e: return None, f"حدث خطأ: {str(e)}" # إنشاء واجهة المستخدم with gr.Blocks(title="مولد الموسيقى الذكي 🎵", theme=gr.themes.Soft()) as iface: gr.Markdown(""" # 🎵 مولد الموسيقى الذكي قم بتوليد مقاطع موسيقية فريدة باستخدام الذكاء الاصطناعي! ### 📝 التعليمات: 1. اختر نمط الموسيقى 2. حدد المزاج المطلوب 3. اختر الآلات الموسيقية 4. اضبط معلمات التوليد 5. انقر على "توليد" وانتظر النتيجة """) with gr.Row(): with gr.Column(): style_dropdown = gr.Dropdown( choices=list(MUSIC_STYLES.keys()), value=list(MUSIC_STYLES.keys())[0], label="نمط الموسيقى" ) mood_radio = gr.Radio( choices=["سعيد", "حزين", "هادئ", "حماسي"], value="سعيد", label="المزاج" ) instruments_dropdown = gr.Dropdown( choices=list(INSTRUMENTS.keys()), value=[list(INSTRUMENTS.keys())[0]], multiselect=True, label="الآلات الموسيقية" ) with gr.Row(): melody_slider = gr.Slider( minimum=0.1, maximum=1.0, value=0.7, step=0.1, label="تعقيد اللحن" ) rhythm_slider = gr.Slider( minimum=0.1, maximum=1.0, value=0.7, step=0.1, label="قوة الإيقاع" ) harmony_slider = gr.Slider( minimum=0.1, maximum=1.0, value=0.7, step=0.1, label="ثراء التناغم" ) generate_btn = gr.Button("توليد 🎵", variant="primary") with gr.Column(): audio_output = gr.Audio( label="الموسيقى المولدة", type="filepath" ) prompt_output = gr.Textbox( label="النص الوصفي المستخدم", interactive=False ) with gr.Row(): gr.Markdown(""" ### 💡 نصائح: - جرب مزج أنماط مختلفة من الموسيقى - استخدم آلات موسيقية متنوعة - اضبط المعلمات للحصول على النتيجة المطلوبة ### ℹ️ معلومات: - يستخدم هذا التطبيق نموذج MusicGen من Meta - مدة المقطع الموسيقي 8 ثوانٍ - جودة الصوت 44.1 كيلوهرتز """) # ربط الأحداث generate_btn.click( generate_music, inputs=[ style_dropdown, mood_radio, instruments_dropdown, melody_slider, rhythm_slider, harmony_slider ], outputs=[audio_output, prompt_output] ) # تشغيل التطبيق iface.launch()