File size: 1,743 Bytes
1f7ead8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import sys
import os
import argparse

# Add backend to path if needed, but we try to use installed packages
# This script is meant to be run as a subprocess

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"
    # Re-init model here (expensive but safe)
    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}")
                # Fallback?
                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)