Hieucyber2208 commited on
Commit
8adf349
·
verified ·
1 Parent(s): c345861

Update src/text_to_speech.py

Browse files
Files changed (1) hide show
  1. src/text_to_speech.py +24 -61
src/text_to_speech.py CHANGED
@@ -14,74 +14,37 @@ def generate_audio(text, filename="output.mp3", gender="female", speed="normal")
14
  gender (str): "male" (use MMS-TTS) or "female" (use gTTS).
15
  speed (str): "slow", "normal", or "fast" (only for gTTS).
16
  """
17
- print("\n[DEBUG] Function: generate_audio")
18
- print(f"Received parameters -> text: {text[:50]}..., filename: {filename}, gender: {gender}, speed: {speed}")
19
-
20
  lang = "vi"
21
 
22
  if gender.lower() == "female":
23
- print("[DEBUG] Using gTTS for female voice...")
24
  speed_mapping = {"slow": True, "normal": False, "fast": False}
25
  slow = speed_mapping.get(speed.lower(), False)
26
 
27
- try:
28
- tts = gTTS(text=text, lang=lang, slow=slow)
29
- tts.save(filename)
30
- print(f"✅ Audio saved as {filename}")
31
- except Exception as e:
32
- print(f"[ERROR] Failed to generate audio: {e}")
33
- else:
34
- print("[ERROR] Male voice generation not implemented yet!")
35
-
36
- # Debug check for file existence
37
- if os.path.exists(filename):
38
- print(f"✅ Verified: {filename} exists.")
 
 
 
 
 
39
  else:
40
- print(f"[ERROR] {filename} was not created.")
41
- import os
42
-
43
  def text_to_speech(gender, speed):
44
- """
45
- Convert text files in the folder to speech and save as audio files.
46
-
47
- Parameters:
48
- gender (str): "male" (use MMS-TTS) or "female" (use gTTS).
49
- speed (str): "slow", "normal", or "fast" (only for gTTS).
50
- """
51
- print("\n[DEBUG] Function: text_to_speech")
52
- print(f"Received parameters -> gender: {gender}, speed: {speed}")
53
-
54
  text_folder = "./"
55
- print(f"[DEBUG] Looking for text files in: {os.path.abspath(text_folder)}")
56
-
57
- # Get all valid text files (excluding specific ones)
58
- text_files = sorted([
59
- f for f in os.listdir(text_folder)
60
- if f.endswith('.txt') and f not in ["text.txt", "requirements.txt"]
61
- ])
62
-
63
- print(f"[DEBUG] Found text files: {text_files}")
64
-
65
- if not text_files:
66
- print("[WARNING] No text files found for conversion.")
67
-
68
  for text_file in text_files:
69
- file_path = os.path.join(text_folder, text_file)
70
- try:
71
- print(f"[DEBUG] Reading file: {file_path}")
72
- with open(file_path, "r", encoding="utf-8") as file:
73
- content = file.read()
74
-
75
- audio_file = text_file.replace("txt", "mp3")
76
- print(f"[DEBUG] Generating audio for: {text_file} -> {audio_file}")
77
-
78
- generate_audio(content, audio_file, gender=gender, speed=speed)
79
-
80
- # Verify if audio was created
81
- if os.path.exists(audio_file):
82
- print(f"✅ Audio file created: {audio_file}")
83
- else:
84
- print(f"[ERROR] Audio file {audio_file} was not created!")
85
-
86
- except Exception as e:
87
- print(f"[ERROR] Failed to process {text_file}: {e}")
 
14
  gender (str): "male" (use MMS-TTS) or "female" (use gTTS).
15
  speed (str): "slow", "normal", or "fast" (only for gTTS).
16
  """
 
 
 
17
  lang = "vi"
18
 
19
  if gender.lower() == "female":
20
+ # gTTS chỉ giọng nữ
21
  speed_mapping = {"slow": True, "normal": False, "fast": False}
22
  slow = speed_mapping.get(speed.lower(), False)
23
 
24
+ tts = gTTS(text=text, lang=lang, slow=slow)
25
+ tts.save(filename)
26
+ print(f"✅ Audio saved as {filename}")
27
+
28
+ elif gender.lower() == "male":
29
+ # MMS-TTS cho giọng nam
30
+ model = VitsModel.from_pretrained("facebook/mms-tts-vie")
31
+ tokenizer = AutoTokenizer.from_pretrained("facebook/mms-tts-vie")
32
+
33
+ inputs = tokenizer(text, return_tensors="pt")
34
+ with torch.no_grad():
35
+ output = model(**inputs).waveform
36
+
37
+ # Lưu file âm thanh
38
+ torchaudio.save(filename, output, 24000, backend="sox_io")
39
+ print(f"✅ Audio saved as {filename}")
40
+
41
  else:
42
+ print("⚠️ Giọng không hợp lệ! Chỉ hỗ trợ 'male' hoặc 'female'.")
 
 
43
  def text_to_speech(gender, speed):
 
 
 
 
 
 
 
 
 
 
44
  text_folder = "./"
45
+ text_files = sorted([f for f in os.listdir(text_folder) if f.endswith('.txt') and f != "text.txt" and f != "requirements.txt"])
 
 
 
 
 
 
 
 
 
 
 
 
46
  for text_file in text_files:
47
+ with open(f"{text_file}", "r", encoding="utf-8") as file:
48
+ content = file.read()
49
+ audio_file = text_file.replace("txt","mp3")
50
+ generate_audio(content, f"{audio_file}", gender=gender, speed=speed)