""" سنگنگ وائس جنریٹر - سادہ اور پکا ورژن Hugging Face Spaces کے لیے """ import gradio as gr import numpy as np import soundfile as sf import tempfile import math # سادہ سنگنگ جنریٹر کلاس class SimpleSingingGenerator: def __init__(self): print("سنگنگ جنریٹر تیار ہے!") def generate_tone(self, frequency, duration, sample_rate=22050): """سادہ سائن ویو جنریٹ کریں""" t = np.linspace(0, duration, int(sample_rate * duration)) tone = 0.5 * np.sin(2 * np.pi * frequency * t) return tone, sample_rate def create_melody(self, lyrics, style="normal"): """لیکس کے مطابق میلوڈی بنائیں""" # lyrics کی لمبائی کے مطابق نوٹس بنائیں word_count = len(lyrics.split()) duration = max(3, min(10, word_count * 0.5)) # 3-10 سیکنڈ if style == "happy": # خوش سٹائل - اونچے نوٹ base_freq = 523.25 # C5 melody = [] for i in range(int(duration * 4)): # 4 نوٹ فی سیکنڈ freq = base_freq + 50 * math.sin(i * 0.5) melody.append(freq) elif style == "sad": # اداس سٹائل - نیچے نوٹ base_freq = 329.63 # E4 melody = [] for i in range(int(duration * 4)): freq = base_freq - 30 * math.sin(i * 0.3) melody.append(freq) else: # نارمل سٹائل base_freq = 440.0 # A4 melody = [base_freq] * int(duration * 4) return melody, duration def generate_singing(self, voice_file, lyrics, style, language): """مکمل سنگنگ جنریٹ کریں""" # چیک ان پٹ if voice_file is None: return None, "❌ براہ کرم آواز اپ لوڈ کریں!" if not lyrics or lyrics.strip() == "": return None, "❌ براہ کرم بول لکھیں!" try: # میلوڈی بنائیں melody, duration = self.create_melody(lyrics, style) # آواز بنائیں all_audio = [] sample_rate = 22050 for i, freq in enumerate(melody): tone, _ = self.generate_tone(freq, 0.25, sample_rate) all_audio.extend(tone) audio_array = np.array(all_audio) # عارضی فائل میں save کریں temp_file = tempfile.NamedTemporaryFile(delete=False, suffix='.wav') sf.write(temp_file.name, audio_array, sample_rate) status = f"""✅ کامیابی! گانا تیار ہے۔ 📊 معلومات: • دورانیہ: {duration:.1f} سیکنڈ • سٹائل: {style} • زبان: {language} • بول کی لمبائی: {len(lyrics.split())} الفاظ 🎵 گانا تیار ہے! نیچے سنیں۔ """ return temp_file.name, status except Exception as e: return None, f"❌ خطاء: {str(e)}" # جنریٹر شروع کریں generator = SimpleSingingGenerator() # CSS سٹائل css = """ """ # انٹرفیس بنائیں with gr.Blocks(css=css, title="🎤 اردو سنگنگ جنریٹر") as demo: gr.Markdown(""" # 🎤 اردو سنگنگ وائس جنریٹر ### اپنی آواز سے گانا بنائیں! **👉 استعمال کرنے کا طریقہ:** 1. اپنی آواز ریکارڈ کریں یا اپ لوڈ کریں 2. بول لکھیں (اردو یا انگلش) 3. سٹائل منتخب کریں 4. "🎤 گانا بنائیں" دبائیں """) with gr.Row(): with gr.Column(scale=1): # آواز ان پٹ audio_input = gr.Audio( label="📢 1. اپنی آواز ریکارڈ کریں یا اپ لوڈ کریں", type="filepath", sources=["microphone", "upload"] ) # بول lyrics_input = gr.Textbox( label="📝 2. بول لکھیں", placeholder="مثال: تم ہو میرے دل کی دھڑکن...", lines=4, value="تم ہو میرے دل کی دھڑکن، تم ہو میری جان" ) with gr.Row(): style_input = gr.Radio( choices=["normal", "happy", "sad"], label="🎵 3. سٹائل منتخب کریں", value="normal" ) lang_input = gr.Radio( choices=["urdu", "english", "hindi"], label="🌍 4. زبان", value="urdu" ) # مثال کے بول gr.Markdown("### 📋 مثال کے بول (کلک کریں اور کاپی کریں):") examples = gr.Examples( examples=[ ["تم ہو میرے دل کی دھڑکن، تم ہو میری جان"], ["دل دل پاکستان، جان جان پاکستان"], ["Happy birthday to you, happy birthday to you"], ["ہم ہیں رہبرِ کائنات، ہم ہیں محافظ ایک وطن"] ], inputs=[lyrics_input], label="مثال کے بول" ) generate_btn = gr.Button("🎤 گانا بنائیں", variant="primary", size="lg") with gr.Column(scale=1): audio_output = gr.Audio(label="🎧 تیار شدہ گانا", type="filepath") status_output = gr.Textbox(label="📊 حیثیت", lines=8) gr.Markdown(""" ### 💡 نوٹ: - یہ ایک ڈیمو ورژن ہے - آواز کلوننگ فیچر جلد آرہا ہے - بہتر کوالٹی کے لیے GPU چاہیے """) # بٹن کا کام generate_btn.click( fn=generator.generate_singing, inputs=[audio_input, lyrics_input, style_input, lang_input], outputs=[audio_output, status_output] ) # ایپ چلائیں if __name__ == "__main__": demo.launch(server_port=7860)