|
|
|
|
|
""" |
|
|
CLI for Voice Tech for All TTS System |
|
|
""" |
|
|
import argparse |
|
|
import sys |
|
|
import os |
|
|
|
|
|
|
|
|
def main(): |
|
|
parser = argparse.ArgumentParser( |
|
|
description="Voice Tech for All - Multi-lingual TTS System", |
|
|
formatter_class=argparse.RawDescriptionHelpFormatter, |
|
|
epilog=""" |
|
|
Examples: |
|
|
# Download Hindi models |
|
|
python -m src.cli download --lang hi |
|
|
|
|
|
# Download all models |
|
|
python -m src.cli download --all |
|
|
|
|
|
# Synthesize text |
|
|
python -m src.cli synthesize --text "नमस्ते" --voice hi_male --output hello.wav |
|
|
|
|
|
# Start API server |
|
|
python -m src.cli serve --port 8000 |
|
|
|
|
|
# List available voices |
|
|
python -m src.cli list |
|
|
""", |
|
|
) |
|
|
|
|
|
subparsers = parser.add_subparsers(dest="command", help="Commands") |
|
|
|
|
|
|
|
|
download_parser = subparsers.add_parser("download", help="Download TTS models") |
|
|
download_parser.add_argument("--voice", type=str, help="Specific voice to download") |
|
|
download_parser.add_argument( |
|
|
"--lang", type=str, help="Download all voices for a language" |
|
|
) |
|
|
download_parser.add_argument( |
|
|
"--all", action="store_true", help="Download all models" |
|
|
) |
|
|
download_parser.add_argument( |
|
|
"--force", action="store_true", help="Force re-download" |
|
|
) |
|
|
|
|
|
|
|
|
synth_parser = subparsers.add_parser("synthesize", help="Synthesize text to speech") |
|
|
synth_parser.add_argument( |
|
|
"--text", "-t", type=str, required=True, help="Text to synthesize" |
|
|
) |
|
|
synth_parser.add_argument( |
|
|
"--voice", "-v", type=str, default="hi_male", help="Voice to use" |
|
|
) |
|
|
synth_parser.add_argument( |
|
|
"--output", "-o", type=str, default="output.wav", help="Output file" |
|
|
) |
|
|
synth_parser.add_argument( |
|
|
"--speed", "-s", type=float, default=1.0, help="Speech speed" |
|
|
) |
|
|
|
|
|
|
|
|
serve_parser = subparsers.add_parser("serve", help="Start API server") |
|
|
serve_parser.add_argument( |
|
|
"--host", type=str, default="0.0.0.0", help="Host to bind" |
|
|
) |
|
|
serve_parser.add_argument( |
|
|
"--port", "-p", type=int, default=8000, help="Port to bind" |
|
|
) |
|
|
serve_parser.add_argument( |
|
|
"--reload", action="store_true", help="Enable auto-reload" |
|
|
) |
|
|
|
|
|
|
|
|
list_parser = subparsers.add_parser("list", help="List available voices") |
|
|
|
|
|
args = parser.parse_args() |
|
|
|
|
|
if args.command == "download": |
|
|
from src.downloader import ModelDownloader |
|
|
|
|
|
downloader = ModelDownloader() |
|
|
|
|
|
if args.voice: |
|
|
downloader.download_model(args.voice, force=args.force) |
|
|
elif args.lang: |
|
|
downloader.download_language(args.lang, force=args.force) |
|
|
elif args.all: |
|
|
downloader.download_all_models(force=args.force) |
|
|
else: |
|
|
download_parser.print_help() |
|
|
|
|
|
elif args.command == "synthesize": |
|
|
from src.engine import TTSEngine |
|
|
|
|
|
engine = TTSEngine() |
|
|
|
|
|
print(f"Synthesizing: {args.text}") |
|
|
print(f"Voice: {args.voice}") |
|
|
|
|
|
output_path = engine.synthesize_to_file( |
|
|
text=args.text, output_path=args.output, voice=args.voice, speed=args.speed |
|
|
) |
|
|
print(f"Saved to: {output_path}") |
|
|
|
|
|
elif args.command == "serve": |
|
|
from src.api import start_server |
|
|
|
|
|
print(f"Starting server on {args.host}:{args.port}") |
|
|
start_server(host=args.host, port=args.port, reload=args.reload) |
|
|
|
|
|
elif args.command == "list": |
|
|
from src.config import LANGUAGE_CONFIGS |
|
|
from src.downloader import ModelDownloader |
|
|
|
|
|
downloader = ModelDownloader() |
|
|
|
|
|
print("\n📢 Available TTS Voices:\n") |
|
|
print(f"{'Voice Key':<15} {'Language':<15} {'Gender':<10} {'Downloaded':<12}") |
|
|
print("-" * 55) |
|
|
|
|
|
for key, config in LANGUAGE_CONFIGS.items(): |
|
|
downloaded = "✓" if downloader.get_model_path(key) else "✗" |
|
|
gender = "Male" if "male" in key else "Female" |
|
|
print(f"{key:<15} {config.name:<15} {gender:<10} {downloaded:<12}") |
|
|
|
|
|
print(f"\nTotal: {len(LANGUAGE_CONFIGS)} voices") |
|
|
|
|
|
else: |
|
|
parser.print_help() |
|
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
|
main() |
|
|
|