Rezfars commited on
Commit
7d84cd2
·
verified ·
1 Parent(s): b1417c1

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +21 -29
app.py CHANGED
@@ -1,49 +1,41 @@
1
- import os
2
  import torch
3
- import soundfile as sf
4
  from transformers import AutoTokenizer, VitsModel
 
 
5
 
6
- # مدل فارسی انتخاب شده
7
- MODEL_NAME = "facebook/mms-tts-fas"
8
-
9
  def init_model():
10
  tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
11
  model = VitsModel.from_pretrained(MODEL_NAME)
12
  return tokenizer, model
13
 
14
- def synthesize(text, tokenizer, model, speaker_id=0, rate=1.0, pitch=1.0):
15
- # speaker_id: برای انتخاب “صدای” مختلف اگر مدل پشتیبانی کنه
16
- # rate, pitch: پارامتر ساده برای تغییر سرعت/کِشِش صدا (اگر قابل باشه)
17
  inputs = tokenizer(text, return_tensors="pt")
18
  with torch.no_grad():
19
  outputs = model(**inputs)
20
- waveform = outputs.waveform.squeeze().cpu().numpy()
21
- sampling_rate = model.config.sampling_rate
22
- # ساده سازی: نرخ یا pitch تغییر نمیشه به صورت مستقیم، مگر مدل پشتیبانی کنه
23
- return waveform, sampling_rate
24
-
25
- def save_wav(waveform, rate, filepath):
26
- sf.write(filepath, waveform, rate)
 
 
 
 
27
 
28
  def main():
29
  tokenizer, model = init_model()
30
- print("مدل آماده است.")
31
-
32
- # نمونه گفتگو دو نفره
33
- speaker1_text = input("متن برای نفر اول: ")
34
- speaker2_text = input("متن برای نفر دوم: ")
35
-
36
- # نفر اول: صدای “نرمال”
37
- wav1, sr1 = synthesize(speaker1_text, tokenizer, model, speaker_id=0)
38
  save_wav(wav1, sr1, "speaker1.wav")
39
- print("فایل speaker1.wav ذخیره شد.")
40
 
41
- # نفر دوم: صدای “نرمال” یا می‌تونی speaker_id=1 قرار بدی اگر مدل پشتیبانی کنه
42
- wav2, sr2 = synthesize(speaker2_text, tokenizer, model, speaker_id=0)
43
  save_wav(wav2, sr2, "speaker2.wav")
44
- print("فایل speaker2.wav ذخیره شد.")
45
-
46
- print("تموم شد—می‌تونی فایل‌های wav رو گوش بدی.")
47
 
48
  if __name__ == "__main__":
49
  main()
 
 
1
  import torch
 
2
  from transformers import AutoTokenizer, VitsModel
3
+ import numpy as np
4
+ import soundfile as sf
5
 
6
+ MODEL_NAME = "facebook/mms-tts-eng" # فقط نمونه؛ ممکن است برای فارسی نشناسد
7
+ # اگر مدل فارسی پیدا شد، اون رو بزار مثلا: "Kamtera/persian-tts‑male‑vits"
 
8
  def init_model():
9
  tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
10
  model = VitsModel.from_pretrained(MODEL_NAME)
11
  return tokenizer, model
12
 
13
+ def synthesize(text, tokenizer, model):
 
 
14
  inputs = tokenizer(text, return_tensors="pt")
15
  with torch.no_grad():
16
  outputs = model(**inputs)
17
+ if not hasattr(outputs, "waveform"):
18
+ raise ValueError("مدل خروجی waveform ندارد. خروجی: {}".format(outputs))
19
+ waveform = outputs.waveform.squeeze().cpu().numpy()
20
+ # اگر بعد ذخیره به خطا خورد، امتحان کن:
21
+ # waveform = waveform.T
22
+ sr = model.config.sampling_rate
23
+ return waveform, sr
24
+
25
+ def save_wav(waveform, sr, filename):
26
+ sf.write(filename, waveform, sr)
27
+ print(f"ذخیره شد: {filename}")
28
 
29
  def main():
30
  tokenizer, model = init_model()
31
+ print("مدل آماده است:", MODEL_NAME)
32
+ text1 = input("متن نفر اول: ")
33
+ wav1, sr1 = synthesize(text1, tokenizer, model)
 
 
 
 
 
34
  save_wav(wav1, sr1, "speaker1.wav")
 
35
 
36
+ text2 = input("متن نفر دوم: ")
37
+ wav2, sr2 = synthesize(text2, tokenizer, model)
38
  save_wav(wav2, sr2, "speaker2.wav")
 
 
 
39
 
40
  if __name__ == "__main__":
41
  main()