Spaces:
Running
Running
| #!/usr/bin/env python | |
| """ | |
| 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 command | |
| 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" | |
| ) | |
| # Synthesize command | |
| 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 command | |
| 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 command | |
| 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() | |