Spaces:
Build error
Build error
| """ | |
| سنگنگ وائس جنریٹر - سادہ اور پکا ورژن | |
| 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 = """ | |
| <style> | |
| .gradio-container { | |
| max-width: 900px !important; | |
| margin: auto !important; | |
| } | |
| h1 { | |
| text-align: center; | |
| color: #667eea; | |
| } | |
| </style> | |
| """ | |
| # انٹرفیس بنائیں | |
| 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) |