know-flow / src /text_to_speech.py
Hieucyber2208's picture
Update src/text_to_speech.py
cc85380 verified
raw
history blame
3.12 kB
import torch
from transformers import VitsModel, AutoTokenizer
import torchaudio
import os
from gtts import gTTS
def generate_audio(text, filename="output.mp3", gender="female", speed="normal"):
"""
Convert text to speech and save it as an audio file.
Parameters:
text (str): The text to convert.
filename (str): The output file name.
gender (str): "male" (use MMS-TTS) or "female" (use gTTS).
speed (str): "slow", "normal", or "fast" (only for gTTS).
"""
print("\n[DEBUG] Function: generate_audio")
print(f"Received parameters -> text: {text[:50]}..., filename: {filename}, gender: {gender}, speed: {speed}")
lang = "vi"
if gender.lower() == "female":
print("[DEBUG] Using gTTS for female voice...")
speed_mapping = {"slow": True, "normal": False, "fast": False}
slow = speed_mapping.get(speed.lower(), False)
try:
tts = gTTS(text=text, lang=lang, slow=slow)
tts.save(filename)
print(f"βœ… Audio saved as {filename}")
except Exception as e:
print(f"[ERROR] Failed to generate audio: {e}")
else:
print("[ERROR] Male voice generation not implemented yet!")
# Debug check for file existence
if os.path.exists(filename):
print(f"βœ… Verified: {filename} exists.")
else:
print(f"[ERROR] {filename} was not created.")
import os
def text_to_speech(gender, speed):
"""
Convert text files in the folder to speech and save as audio files.
Parameters:
gender (str): "male" (use MMS-TTS) or "female" (use gTTS).
speed (str): "slow", "normal", or "fast" (only for gTTS).
"""
print("\n[DEBUG] Function: text_to_speech")
print(f"Received parameters -> gender: {gender}, speed: {speed}")
text_folder = "./"
print(f"[DEBUG] Looking for text files in: {os.path.abspath(text_folder)}")
# Get all valid text files (excluding specific ones)
text_files = sorted([
f for f in os.listdir(text_folder)
if f.endswith('.txt') and f not in ["text.txt", "requirements.txt"]
])
print(f"[DEBUG] Found text files: {text_files}")
if not text_files:
print("[WARNING] No text files found for conversion.")
for text_file in text_files:
file_path = os.path.join(text_folder, text_file)
try:
print(f"[DEBUG] Reading file: {file_path}")
with open(file_path, "r", encoding="utf-8") as file:
content = file.read()
audio_file = text_file.replace("txt", "mp3")
print(f"[DEBUG] Generating audio for: {text_file} -> {audio_file}")
generate_audio(content, audio_file, gender=gender, speed=speed)
# Verify if audio was created
if os.path.exists(audio_file):
print(f"βœ… Audio file created: {audio_file}")
else:
print(f"[ERROR] Audio file {audio_file} was not created!")
except Exception as e:
print(f"[ERROR] Failed to process {text_file}: {e}")