| import sys
|
| import os
|
| import argparse
|
|
|
|
|
|
|
|
|
| def generate_coqui(text, output_path):
|
| print(f"Starting Coqui TTS for: {output_path}")
|
| from TTS.api import TTS
|
| import torch
|
|
|
| device = "cuda" if torch.cuda.is_available() else "cpu"
|
|
|
| tts = TTS(model_name="tts_models/en/vctk/vits", progress_bar=False, gpu=(device == "cuda"))
|
| tts.tts_to_file(text=text, file_path=output_path)
|
| print("Coqui TTS Complete")
|
|
|
| def generate_pyttsx3(text, output_path):
|
| print(f"Starting pyttsx3 for: {output_path}")
|
| import pyttsx3
|
|
|
| engine = pyttsx3.init()
|
| engine.save_to_file(text, output_path)
|
| engine.runAndWait()
|
| print("pyttsx3 Complete")
|
|
|
| if __name__ == "__main__":
|
| parser = argparse.ArgumentParser()
|
| parser.add_argument("--text", required=True)
|
| parser.add_argument("--out", required=True)
|
| parser.add_argument("--engine", default="pyttsx3", choices=["coqui", "pyttsx3"])
|
| args = parser.parse_args()
|
|
|
| try:
|
| if args.engine == "coqui":
|
| try:
|
| generate_coqui(args.text, args.out)
|
| except ImportError:
|
| print("Coqui import failed, falling back to pyttsx3")
|
| generate_pyttsx3(args.text, args.out)
|
| except Exception as e:
|
| print(f"Coqui failed: {e}")
|
|
|
| generate_pyttsx3(args.text, args.out)
|
| else:
|
| generate_pyttsx3(args.text, args.out)
|
| except Exception as e:
|
| print(f"FATAL TTS ERROR: {e}")
|
| sys.exit(1)
|
|
|