SINGING.COM / app.py
WANIFAHEEM12's picture
Create app.py
e922766 verified
Raw
History Blame Contribute Delete
6.76 kB
"""
سنگنگ وائس جنریٹر - سادہ اور پکا ورژن
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)