Vgjkmhf commited on
Commit
78ed1f1
·
verified ·
1 Parent(s): 41d0a63

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +109 -110
app.py CHANGED
@@ -41,7 +41,7 @@ def download_file(url):
41
  except:
42
  return None
43
 
44
- # --- حالت‌های مختلف برای حل مشکل ---
45
  MODES = {
46
  "🔥 حالت 1: رفع تداخل شدید": {
47
  "index_rate": 0.25,
@@ -57,21 +57,21 @@ MODES = {
57
  "rms_mix_rate": 0.30,
58
  "method": "harvest"
59
  },
60
- "⚡ حالت 3: بدون Index (اضطراری)": {
61
  "index_rate": 0.00,
62
  "protect": 0.50,
63
  "filter_radius": 5,
64
  "rms_mix_rate": 0.15,
65
  "method": "rmvpe"
66
  },
67
- "🎵 حالت 4: تعادل (پیشنهادی)": {
68
  "index_rate": 0.40,
69
  "protect": 0.42,
70
  "filter_radius": 3,
71
  "rms_mix_rate": 0.20,
72
  "method": "rmvpe"
73
  },
74
- "🔬 حالت 5: دقت بالا (کند)": {
75
  "index_rate": 0.50,
76
  "protect": 0.45,
77
  "filter_radius": 3,
@@ -87,7 +87,7 @@ def apply_mode(mode_name):
87
  m["filter_radius"], m["rms_mix_rate"])
88
  return "rmvpe", 0.40, 0.42, 3, 0.20
89
 
90
- # --- تابع اصلی با 3 روش مختلف ---
91
  def run_rvc_advanced(audio_path, model_up, model_link, index_up, index_link,
92
  pitch, method, index_rate, protect, filter_radius,
93
  rms_mix_rate, use_index):
@@ -100,7 +100,7 @@ def run_rvc_advanced(audio_path, model_up, model_link, index_up, index_link,
100
  if not model_path:
101
  return None, "⚠️ مدل (.pth) الزامی است!"
102
 
103
- # Index (اختیاری شد)
104
  index_path = None
105
  if use_index:
106
  index_path = index_up.name if index_up else download_file(index_link) if index_link else None
@@ -119,7 +119,7 @@ def run_rvc_advanced(audio_path, model_up, model_link, index_up, index_link,
119
  else:
120
  print("⚠️ بارگذاری بدون Index...")
121
  rvc = RVCInference(device="cpu", model_path=model_path)
122
- index_rate = 0.0 # غیرفعال کردن Index Rate
123
 
124
  sig = inspect.signature(rvc.infer_file)
125
  valid_params = sig.parameters.keys()
@@ -170,70 +170,68 @@ def run_rvc_advanced(audio_path, model_up, model_link, index_up, index_link,
170
  if 'noise_scale' in valid_params:
171
  args['noise_scale'] = 0.4
172
 
173
- print(f"⚙️ تنظیمات: Method={method}, Index={index_rate:.2f}, Protect={protect:.2f}")
174
- print(f" Filter={filter_radius}, RMS={rms_mix_rate:.2f}")
175
  print("🚀 در حال پردازش...")
176
 
177
  rvc.infer_file(**args)
178
 
179
  if os.path.exists(output_path) and os.path.getsize(output_path) > 1000:
180
 
181
- # تشخیص مشکل و پیشنهاد
182
  suggestions = ["✅ تبدیل موفق!\n"]
183
 
184
  if index_rate > 0.6:
185
- suggestions.append("💡 اگر تداخل دارد: Index Rate را کاهش دهید")
186
 
187
  if index_rate < 0.3 and use_index:
188
- suggestions.append("💡 اگر تلفظ ضعیف است: Index Rate را افزایش دهید")
189
 
190
  if protect < 0.35:
191
- suggestions.append("💡 صامت‌های فارسی گم می‌شود؟ Protect را افزایش دهید")
192
 
193
  if not use_index or not index_path:
194
- suggestions.append("⚠️ بدون Index کار کردید - کیفیت ممکن است ضعیف باشد")
195
- suggestions.append("💡 پیشنهاد: Index file را آپلود کنید و دوباره امتحان کنید")
196
 
197
- suggestions.append("\n🔄 حالت‌های دیگر را امتحان کنید:")
198
- suggestions.append(" • حالت 1 → تداخل شدید دارید")
199
- suggestions.append(" • حالت 2 → تلفظ فارسی ضعیف است")
200
- suggestions.append(" • حالت 3 → Index ندارید")
201
 
202
  return output_path, "\n".join(suggestions)
203
  else:
204
- return None, "❌ خطا: فایل خروجی خالی است"
205
 
206
  except Exception as e:
207
  error_msg = str(e)
208
  print(f"❌ خطا: {error_msg}")
209
 
210
  if "index" in error_msg.lower() and use_index:
211
- return None, "❌ خطای Index! گزینه 'استفاده از Index' را خاموش کنید و حالت 3 را امتحان کنید."
212
  else:
213
- return None, f"❌ {error_msg}\n\n💡 سعی کنید:\n1. حالت 3 (بدون Index)\n2. Method را عوض کنید\n3. مدل دیگری استفاده کنید"
214
 
215
- # --- رابط کاربری ---
216
- with gr.Blocks(title="RVC Ultimate Farsi Fixer", theme=gr.themes.Soft()) as app:
217
  gr.Markdown("""
218
  # 🎙️ RVC - حل قطعی مشکل فارسی
219
 
220
- ## 🔥 اگر صدا تداخل دارد یا تلفظ خراب است:
221
 
222
- ### روش 1️⃣: Index دارید
223
  1. Index را آپلود کنید
224
- 2. "استفاده از Index" را فعال کنید
225
- 3. **حالت 1** را امتحان کنید (تداخل شدید)
226
- 4. اگر حل نشد → **حالت 2** (تلفظ قوی)
227
 
228
- ### روش 2️⃣: Index ندارید یا کار نمی‌کند
229
- 1. "استفاده از Index" را **خاموش** کنید
230
  2. **حالت 3** را انتخاب کنید
231
- 3. این روش کیفیت کمتری دارد اما تداخل ندارد
232
 
233
- ### روش 3⃣: مدل مشکل دارد
234
- - مدل باید با صدای **فارسی** آموزش دیده باشد
235
- - اگر مدل انگلیسی است، تلفظ فارسی خراب می‌شود
236
- - مدل جدیدتر (v2) بگیرید
237
  """)
238
 
239
  with gr.Row():
@@ -241,132 +239,133 @@ with gr.Blocks(title="RVC Ultimate Farsi Fixer", theme=gr.themes.Soft()) as app:
241
  gr.Markdown("### 📁 فایل‌ها")
242
  audio_in = gr.Audio(type="filepath", label="🎵 صدای ورودی")
243
 
244
- with gr.Accordion("📤 آپلود مدل و Index", open=True):
245
- model_up = gr.File(label="🔷 مدل (.pth)", file_types=[".pth"])
246
- index_up = gr.File(label="🔶 Index (.index)", file_types=[".index"])
247
-
248
- use_index = gr.Checkbox(
249
- value=True,
250
- label="✅ استفاده از Index (اگر کار نکرد خاموش کنید)",
251
- info="اگر خطا می‌دهد این را خاموش کنید"
252
- )
253
 
254
  with gr.Accordion("🔗 یا از لینک", open=False):
255
- model_link = gr.Textbox(label="لینک .pth")
256
- index_link = gr.Textbox(label="لینک .index")
257
 
258
  with gr.Column():
259
- gr.Markdown("### 🎯 انتخاب حالت")
260
 
261
  mode = gr.Dropdown(
262
  choices=list(MODES.keys()),
263
  value="🔥 حالت 1: رفع تداخل شدید",
264
- label="حالت عملکرد",
265
- info="هر حالت را به ترتیب امتحان کنید"
266
  )
267
 
268
  apply_mode_btn = gr.Button("⚡ اعمال حالت", variant="secondary")
269
 
270
  gr.Markdown("---")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
271
 
272
- with gr.Group():
273
- gr.Markdown("**🎚️ تنظیمات دستی**")
274
-
275
- method = gr.Dropdown(
276
- ["rmvpe", "harvest", "crepe", "pm"],
277
- value="rmvpe",
278
- label="الگوریتم Pitch"
279
- )
280
-
281
- pitch = gr.Slider(-12, 12, 0, step=1, label="🎵 Pitch Shift")
282
-
283
- index_rate = gr.Slider(0, 1, 0.25, step=0.05,
284
- label="📊 Index Rate",
285
- info="تداخل دارد؟ → کاهش دهید")
286
-
287
- protect = gr.Slider(0, 0.5, 0.50, step=0.01,
288
- label="🛡️ Protect",
289
- info="تلفظ ضعیف؟ → افزایش دهید")
290
-
291
- filter_radius = gr.Slider(0, 7, 7, step=1,
292
- label="🎚️ Filter Radius",
293
- info="لرزش دارد؟ → بالا ببرید")
294
-
295
- rms_mix_rate = gr.Slider(0, 1, 0.10, step=0.05,
296
- label="🔊 RMS Mix Rate")
297
 
298
  btn = gr.Button("🚀 تبدیل صدا", variant="primary", size="lg")
299
 
300
- # خروجی
301
  with gr.Row():
302
  out_audio = gr.Audio(label="🎧 نتیجه")
303
- out_msg = gr.Textbox(label="📋 پیام‌ها و پیشنهادات", lines=8)
304
 
305
- # راهنما
306
- with gr.Accordion("📖 توضیحات حالت‌ها", open=False):
307
  gr.Markdown("""
308
  ## 🔥 حالت 1: رفع تداخل شدید
309
- **زمان استفاده**: صدا چند لایه است / chorus effect
310
  - Index Rate: 0.25 (خیلی کم)
311
  - Protect: 0.50 (خیلی بالا)
312
  - Filter: 7 (حداکثر)
313
- - RMS: 0.10 (خیلی کم)
314
 
315
- **نتیجه**: تداخل صدا برطرف می‌شود اما ممکن است کمی از لهجه مدل فاصله بگیرد
316
 
317
  ---
318
 
319
- ## 🎯 حالت 2: تلفظ فارسی قوی
320
- **زمان استفاده**: تلفظ خراب است / صامت‌ها گم می‌شوند
321
  - Index Rate: 0.75 (خیلی بالا)
322
- - Method: harvest (دقیق‌تر)
323
  - Protect: 0.48
324
- - RMS: 0.30 (بالا)
325
 
326
- **نتیجه**: تلفظ فارسی قوی‌تر می‌شود اما ممکن است کمی تداخل ایجاد شود
327
 
328
  ---
329
 
330
- ## ⚡ حالت 3: بدون Index (اضطراری)
331
- **زمان استفاده**: Index ندارید یا خطا می‌دهد
332
  - Index Rate: 0.00 (غیرفعال)
333
  - Protect: 0.50
334
- - Filter: 5
335
 
336
- **نتیجه**: بدون تداخل اما کیفیت پایین‌تر
337
 
338
  ---
339
 
340
- ## 🎵 حالت 4: تعادل
341
- **زمان استفاده**: برای تست اولیه
342
- - تنظیمات متعادل بین همه پارامترها
343
 
344
  ---
345
 
346
  ## 🔬 حالت 5: دقت بالا
347
- **زمان استفاده**: وقت دارید و بهترین کیفیت می‌خواهید
348
- - Method: crepe (دقیق‌ترین اما کند)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
349
 
350
  ---
351
 
352
- ## ⚠️ اگر هیچ حالتی جواب نداد:
353
 
354
- ### احتمال 1: مدل با فارسی train نشده
355
- - مدل‌های انگلیسی هرگز تلفظ فارسی درست نمی‌کنند
356
- - باید مدل با صدای فارسی پیدا کنید
 
357
 
358
- ### احتمال 2: Index file اشتباه است
359
- - Index باید دقیقاً مخصوص همان مدل باشد
360
- - اگر Index مدل دیگری باشد، مشکل ایجاد می‌کند
 
361
 
362
- ### احتمال 3: فایل ورودی مشکل دارد
363
- - از فایل WAV با کیفیت استفاده کنید
364
- - نویز پس‌زمینه را حذف کنید
 
365
 
366
- ### احتمال 4: مدل کیفیت پایین دارد
367
- - Epoch کم است (زیر 100)
368
- - Data کم بوده (زیر 10 دقیقه)
369
- - از مدل بهتری استفاده کنید
370
  """)
371
 
372
  # اتصالات
 
41
  except:
42
  return None
43
 
44
+ # --- حالت‌های مختلف ---
45
  MODES = {
46
  "🔥 حالت 1: رفع تداخل شدید": {
47
  "index_rate": 0.25,
 
57
  "rms_mix_rate": 0.30,
58
  "method": "harvest"
59
  },
60
+ "⚡ حالت 3: بدون Index": {
61
  "index_rate": 0.00,
62
  "protect": 0.50,
63
  "filter_radius": 5,
64
  "rms_mix_rate": 0.15,
65
  "method": "rmvpe"
66
  },
67
+ "🎵 حالت 4: متعادل": {
68
  "index_rate": 0.40,
69
  "protect": 0.42,
70
  "filter_radius": 3,
71
  "rms_mix_rate": 0.20,
72
  "method": "rmvpe"
73
  },
74
+ "🔬 حالت 5: دقت بالا": {
75
  "index_rate": 0.50,
76
  "protect": 0.45,
77
  "filter_radius": 3,
 
87
  m["filter_radius"], m["rms_mix_rate"])
88
  return "rmvpe", 0.40, 0.42, 3, 0.20
89
 
90
+ # --- تابع اصلی ---
91
  def run_rvc_advanced(audio_path, model_up, model_link, index_up, index_link,
92
  pitch, method, index_rate, protect, filter_radius,
93
  rms_mix_rate, use_index):
 
100
  if not model_path:
101
  return None, "⚠️ مدل (.pth) الزامی است!"
102
 
103
+ # Index
104
  index_path = None
105
  if use_index:
106
  index_path = index_up.name if index_up else download_file(index_link) if index_link else None
 
119
  else:
120
  print("⚠️ بارگذاری بدون Index...")
121
  rvc = RVCInference(device="cpu", model_path=model_path)
122
+ index_rate = 0.0
123
 
124
  sig = inspect.signature(rvc.infer_file)
125
  valid_params = sig.parameters.keys()
 
170
  if 'noise_scale' in valid_params:
171
  args['noise_scale'] = 0.4
172
 
173
+ print(f"⚙️ Method={method}, Index={index_rate:.2f}, Protect={protect:.2f}")
174
+ print(f" Filter={filter_radius}, RMS={rms_mix_rate:.2f}")
175
  print("🚀 در حال پردازش...")
176
 
177
  rvc.infer_file(**args)
178
 
179
  if os.path.exists(output_path) and os.path.getsize(output_path) > 1000:
180
 
 
181
  suggestions = ["✅ تبدیل موفق!\n"]
182
 
183
  if index_rate > 0.6:
184
+ suggestions.append("💡 تداخل دارد؟ Index Rate را کاهش دهید")
185
 
186
  if index_rate < 0.3 and use_index:
187
+ suggestions.append("💡 تلفظ ضعیف؟ Index Rate را افزایش دهید")
188
 
189
  if protect < 0.35:
190
+ suggestions.append("💡 صامت‌ها گم می‌شود؟ Protect را افزایش دهید")
191
 
192
  if not use_index or not index_path:
193
+ suggestions.append("⚠️ بدون Index کار کردید")
194
+ suggestions.append("💡 پیشنهاد: Index را آپلود کنید")
195
 
196
+ suggestions.append("\n🔄 حالت‌های دیگر:")
197
+ suggestions.append(" • حالت 1 → تداخل شدید")
198
+ suggestions.append(" • حالت 2 → تلفظ ضعیف")
199
+ suggestions.append(" • حالت 3 → بدون Index")
200
 
201
  return output_path, "\n".join(suggestions)
202
  else:
203
+ return None, "❌ فایل خروجی خالی"
204
 
205
  except Exception as e:
206
  error_msg = str(e)
207
  print(f"❌ خطا: {error_msg}")
208
 
209
  if "index" in error_msg.lower() and use_index:
210
+ return None, "❌ خطای Index! 'استفاده از Index' را خاموش کنید"
211
  else:
212
+ return None, f"❌ {error_msg}\n\n💡 راه‌حل:\n1. حالت 3 (بدون Index)\n2. Method عوض کنید\n3. مدل دیگر"
213
 
214
+ # --- رابط کاربری (بدون theme) ---
215
+ with gr.Blocks(title="RVC Ultimate Farsi Fixer") as app:
216
  gr.Markdown("""
217
  # 🎙️ RVC - حل قطعی مشکل فارسی
218
 
219
+ ## 🔥 راهنمای سریع:
220
 
221
+ ### ✅ اگر Index دارید:
222
  1. Index را آپلود کنید
223
+ 2. "استفاده از Index" فعال باشد
224
+ 3. **حالت 1** تداخل شدید
225
+ 4. **حالت 2** تلفظ ضعیف
226
 
227
+ ### ❌ اگر Index ندارید:
228
+ 1. "استفاده از Index" را خاموش کنید
229
  2. **حالت 3** را انتخاب کنید
 
230
 
231
+ ### اگر هیچکدام جواب نداد:
232
+ - مدل با فارسی train نشده
233
+ - Index اشتباه است
234
+ - مدل v2 بگیرید
235
  """)
236
 
237
  with gr.Row():
 
239
  gr.Markdown("### 📁 فایل‌ها")
240
  audio_in = gr.Audio(type="filepath", label="🎵 صدای ورودی")
241
 
242
+ model_up = gr.File(label="🔷 مدل (.pth)", file_types=[".pth"])
243
+ index_up = gr.File(label="🔶 Index (.index)", file_types=[".index"])
244
+
245
+ use_index = gr.Checkbox(
246
+ value=True,
247
+ label="✅ استفاده از Index (خطا داد؟ خاموش کنید)"
248
+ )
 
 
249
 
250
  with gr.Accordion("🔗 یا از لینک", open=False):
251
+ model_link = gr.Textbox(label="لینک .pth", placeholder="https://...")
252
+ index_link = gr.Textbox(label="لینک .index", placeholder="https://...")
253
 
254
  with gr.Column():
255
+ gr.Markdown("### 🎯 تنظیمات")
256
 
257
  mode = gr.Dropdown(
258
  choices=list(MODES.keys()),
259
  value="🔥 حالت 1: رفع تداخل شدید",
260
+ label="حالت عملکرد"
 
261
  )
262
 
263
  apply_mode_btn = gr.Button("⚡ اعمال حالت", variant="secondary")
264
 
265
  gr.Markdown("---")
266
+ gr.Markdown("**🎚️ تنظیمات دستی**")
267
+
268
+ method = gr.Dropdown(
269
+ ["rmvpe", "harvest", "crepe", "pm"],
270
+ value="rmvpe",
271
+ label="الگوریتم"
272
+ )
273
+
274
+ pitch = gr.Slider(-12, 12, 0, step=1, label="🎵 Pitch")
275
+
276
+ index_rate = gr.Slider(0, 1, 0.25, step=0.05,
277
+ label="📊 Index Rate (تداخل→کم / تلفظ→زیاد)")
278
+
279
+ protect = gr.Slider(0, 0.5, 0.50, step=0.01,
280
+ label="🛡️ Protect (تلفظ ضعیف→زیاد)")
281
+
282
+ filter_radius = gr.Slider(0, 7, 7, step=1,
283
+ label="🎚️ Filter (لرزش→زیاد)")
284
 
285
+ rms_mix_rate = gr.Slider(0, 1, 0.10, step=0.05,
286
+ label="🔊 RMS Mix")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
287
 
288
  btn = gr.Button("🚀 تبدیل صدا", variant="primary", size="lg")
289
 
 
290
  with gr.Row():
291
  out_audio = gr.Audio(label="🎧 نتیجه")
292
+ out_msg = gr.Textbox(label="📋 پیام‌ها", lines=10)
293
 
294
+ with gr.Accordion("📖 راهنمای کامل", open=False):
 
295
  gr.Markdown("""
296
  ## 🔥 حالت 1: رفع تداخل شدید
 
297
  - Index Rate: 0.25 (خیلی کم)
298
  - Protect: 0.50 (خیلی بالا)
299
  - Filter: 7 (حداکثر)
 
300
 
301
+ **زمان استفاده**: صدا چند لایه / chorus
302
 
303
  ---
304
 
305
+ ## 🎯 حالت 2: تلفظ فارسی قوی
 
306
  - Index Rate: 0.75 (خیلی بالا)
307
+ - Method: harvest
308
  - Protect: 0.48
 
309
 
310
+ **زمان استفاده**: تلفظ خراب / صامت‌ها گم
311
 
312
  ---
313
 
314
+ ## ⚡ حالت 3: بدون Index
 
315
  - Index Rate: 0.00 (غیرفعال)
316
  - Protect: 0.50
 
317
 
318
+ **زمان استفاده**: Index ندارید / خطا
319
 
320
  ---
321
 
322
+ ## 🎵 حالت 4: متعادل
323
+ تنظیمات بین همه پارامترها
 
324
 
325
  ---
326
 
327
  ## 🔬 حالت 5: دقت بالا
328
+ - Method: crepe (کند اما دقیق)
329
+
330
+ ---
331
+
332
+ ## ⚠️ علت‌های اصلی مشکل:
333
+
334
+ ### 1. مدل با فارسی train نشده
335
+ مدل‌های انگلیسی تلفظ فارسی خراب می‌کنند
336
+
337
+ ### 2. Index اشتباه
338
+ Index باید دقیقاً مخصوص همان مدل باشد
339
+
340
+ ### 3. مدل v1 است
341
+ مدل v2 بگیرید
342
+
343
+ ### 4. Dataset کم
344
+ مدل با Data بیشتر بهتر است
345
 
346
  ---
347
 
348
+ ## 🔧 تنظیمات دستی:
349
 
350
+ **Index Rate:**
351
+ - 0.0-0.3: بدون تداخل، کم‌تر شبیه مدل
352
+ - 0.4-0.6: متعادل
353
+ - 0.7-1.0: خیلی شبیه مدل، ممکن است تداخل داشته باشد
354
 
355
+ **Protect:**
356
+ - 0.0-0.2: صامت‌ها ممکن است گم شوند
357
+ - 0.3-0.4: متعادل
358
+ - 0.45-0.5: حفاظت بالا، تلفظ واضح
359
 
360
+ **Filter Radius:**
361
+ - 0-2: طبیعیتر، ممکن است لرزش داشته باشد
362
+ - 3-5: متعادل
363
+ - 6-7: بدون لرزش، ممکن است کمی مصنوعی شود
364
 
365
+ **RMS Mix:**
366
+ - 0.0-0.2: حجم صدای ورودی حفظ می‌شود
367
+ - 0.25-0.35: متعادل
368
+ - 0.4-1.0: حجم صدای خروجی بیشتر
369
  """)
370
 
371
  # اتصالات