Spaces:
Sleeping
Sleeping
Update main.py
Browse files
main.py
CHANGED
|
@@ -8,7 +8,7 @@ from stable_audio_tools.inference.generation import generate_diffusion_cond_inpa
|
|
| 8 |
import requests
|
| 9 |
import os
|
| 10 |
import io
|
| 11 |
-
import scipy.io.wavfile
|
| 12 |
from fastapi.responses import StreamingResponse
|
| 13 |
from huggingface_hub import login
|
| 14 |
|
|
@@ -52,15 +52,17 @@ def translate_and_enhance(arabic_text, instrument):
|
|
| 52 |
user_content = f"Translate and enhance: {arabic_text}. Focus on {instrument}."
|
| 53 |
|
| 54 |
try:
|
| 55 |
-
|
|
|
|
| 56 |
if response.status_code == 200:
|
| 57 |
result = response.json()
|
| 58 |
return result['choices'][0]['message']['content']
|
| 59 |
else:
|
| 60 |
return f"A high-quality {instrument} track, {arabic_text}"
|
| 61 |
except Exception as e:
|
| 62 |
-
|
| 63 |
-
|
|
|
|
| 64 |
|
| 65 |
@app.post("/generate-music")
|
| 66 |
async def generate_music(request: MusicRequest):
|
|
@@ -68,6 +70,7 @@ async def generate_music(request: MusicRequest):
|
|
| 68 |
if model is None:
|
| 69 |
raise HTTPException(status_code=500, detail="Model not loaded on server.")
|
| 70 |
|
|
|
|
| 71 |
enhanced_prompt = translate_and_enhance(request.prompt, request.instrument)
|
| 72 |
|
| 73 |
conditioning = [{
|
|
@@ -88,17 +91,11 @@ async def generate_music(request: MusicRequest):
|
|
| 88 |
)
|
| 89 |
|
| 90 |
output = rearrange(output, "b d n -> d (b n)")
|
| 91 |
-
# تحويل البيانات لـ float32 ثم int16
|
| 92 |
output = output.to(torch.float32).div(torch.max(torch.abs(output))).clamp(-1, 1).mul(32767).to(torch.int16).cpu()
|
| 93 |
|
| 94 |
-
# --- التعديل هون ---
|
| 95 |
buffer = io.BytesIO()
|
| 96 |
-
# استخدام scipy بدل torchaudio لتجنب مشكلة الـ backend
|
| 97 |
-
# ملاحظة: scipy بتتوقع (التردد، مصفوفة البيانات)
|
| 98 |
-
# ولازم نحول التنسور لـ numpy array
|
| 99 |
scipy.io.wavfile.write(buffer, sample_rate, output.numpy().T)
|
| 100 |
buffer.seek(0)
|
| 101 |
-
# ------------------
|
| 102 |
|
| 103 |
return StreamingResponse(buffer, media_type="audio/wav")
|
| 104 |
except Exception as e:
|
|
|
|
| 8 |
import requests
|
| 9 |
import os
|
| 10 |
import io
|
| 11 |
+
import scipy.io.wavfile
|
| 12 |
from fastapi.responses import StreamingResponse
|
| 13 |
from huggingface_hub import login
|
| 14 |
|
|
|
|
| 52 |
user_content = f"Translate and enhance: {arabic_text}. Focus on {instrument}."
|
| 53 |
|
| 54 |
try:
|
| 55 |
+
# تعديل: قللنا الـ timeout لـ 5 ثواني بس كرمال ما يروح الوقت والـ Space يفصل
|
| 56 |
+
response = requests.post(api_url, json={"messages": [{"role": "system", "content": system_prompt}, {"role": "user", "content": user_content}]}, headers=headers, timeout=5)
|
| 57 |
if response.status_code == 200:
|
| 58 |
result = response.json()
|
| 59 |
return result['choices'][0]['message']['content']
|
| 60 |
else:
|
| 61 |
return f"A high-quality {instrument} track, {arabic_text}"
|
| 62 |
except Exception as e:
|
| 63 |
+
# إذا صار timeout بالترجمة، منكمل فوراً بالنص الأصلي لنوفر وقت
|
| 64 |
+
print(f"Translation skipped (Timeout/Error) to save time.")
|
| 65 |
+
return f"A professional {instrument} music, style of {arabic_text}"
|
| 66 |
|
| 67 |
@app.post("/generate-music")
|
| 68 |
async def generate_music(request: MusicRequest):
|
|
|
|
| 70 |
if model is None:
|
| 71 |
raise HTTPException(status_code=500, detail="Model not loaded on server.")
|
| 72 |
|
| 73 |
+
# الترجمة هلأ صارت أسرع بكتير بالاستجابة
|
| 74 |
enhanced_prompt = translate_and_enhance(request.prompt, request.instrument)
|
| 75 |
|
| 76 |
conditioning = [{
|
|
|
|
| 91 |
)
|
| 92 |
|
| 93 |
output = rearrange(output, "b d n -> d (b n)")
|
|
|
|
| 94 |
output = output.to(torch.float32).div(torch.max(torch.abs(output))).clamp(-1, 1).mul(32767).to(torch.int16).cpu()
|
| 95 |
|
|
|
|
| 96 |
buffer = io.BytesIO()
|
|
|
|
|
|
|
|
|
|
| 97 |
scipy.io.wavfile.write(buffer, sample_rate, output.numpy().T)
|
| 98 |
buffer.seek(0)
|
|
|
|
| 99 |
|
| 100 |
return StreamingResponse(buffer, media_type="audio/wav")
|
| 101 |
except Exception as e:
|