File size: 2,293 Bytes
a44ca9d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
52
53
54
55
56
57
58
59
60
61
"""Inflect-Nano-v2 TTS CLI

Usage:
    python -m inflect_tts_sdk --text "Hello world" --output output.wav
    python -m inflect_tts_sdk --text "Hello world" --output output.wav --speed 1.2 --variation 0.5
"""
import argparse, sys, time
from pathlib import Path

def main():
    parser = argparse.ArgumentParser(
        description="Inflect-Nano-v2 TTS CLI for AX650 NPU3",
        formatter_class=argparse.RawDescriptionHelpFormatter,
        epilog="""Examples:
  python -m inflect_tts_sdk --text "Hello world" --output hello.wav
  python -m inflect_tts_sdk --text "Hello!" --speed 1.5 --variation 0.3
  python -m inflect_tts_sdk --text "Hello!" --model-dir /path/to/models
""")
    parser.add_argument("--text", required=True, help="Input text to synthesize")
    parser.add_argument("--output", required=True, help="Output WAV file path")
    parser.add_argument("--model-dir", default=None,
                        help="Model directory (default: auto-detect)")
    parser.add_argument("--speed", type=float, default=1.0,
                        help="Playback speed 0.5-2.0 (default: 1.0)")
    parser.add_argument("--variation", type=float, default=0.667,
                        help="Voice variation 0.0-1.0 (default: 0.667)")
    parser.add_argument("--seed", type=int, default=0,
                        help="Random seed (default: 0)")
    args = parser.parse_args()

    print(f"๐ŸŽค Text: {args.text}")
    print(f"๐Ÿ“ Output: {args.output}")

    sys.path.insert(0, str(Path(__file__).resolve().parent))
    from tts_engine import InflectTTSEngine

    try:
        engine = InflectTTSEngine(model_dir=args.model_dir)
    except Exception as e:
        print(f"โŒ Failed to init engine: {e}")
        print("   Make sure axmodels are at models/ or use --model-dir")
        sys.exit(1)

    t0 = time.perf_counter()
    engine.save(
        args.text, args.output,
        speed=args.speed,
        variation=args.variation,
        seed=args.seed,
    )
    elapsed = time.perf_counter() - t0

    import soundfile as sf
    info = sf.info(args.output)
    rtf = elapsed / info.duration if info.duration > 0 else 0
    print(f"โœ… Done! {info.duration:.2f}s audio, {elapsed:.2f}s wall, RTF={rtf:.3f}x")
    print(f"๐Ÿ”Š {args.output}")

if __name__ == "__main__":
    main()