File size: 1,938 Bytes
8dae870 | 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 | import argparse
import sys
from core.cloner import KokoClone
def main() -> None:
"""Entry point for the KokoClone command-line tool."""
parser = argparse.ArgumentParser(description="KokoClone: Zero-Shot Multilingual Voice Cloning")
parser.add_argument(
"--mode",
choices=["tts", "convert"],
default="tts",
help="Operation mode: 'tts' (text → cloned speech) or 'convert' (audio → re-voiced speech)",
)
parser.add_argument("--text", type=str, help="[tts mode] Text to synthesize")
parser.add_argument(
"--lang",
type=str,
default="en",
help="[tts mode] Language code (en, hi, fr, ja, zh, it, pt, es)",
)
parser.add_argument(
"--source",
type=str,
help="[convert mode] Path to source audio file to re-voice (.wav)",
)
parser.add_argument("--ref", type=str, required=True, help="Path to reference voice audio file (.wav)")
parser.add_argument("--out", type=str, default="output.wav", help="Output file path (.wav)")
args = parser.parse_args()
cloner = KokoClone()
if args.mode == "tts":
if not args.text:
parser.error("--text is required when --mode is 'tts'")
cloner.generate(
text=args.text,
lang=args.lang,
reference_audio=args.ref,
output_path=args.out,
)
elif args.mode == "convert":
if not args.source:
parser.error("--source is required when --mode is 'convert'")
try:
cloner.convert(
source_audio=args.source,
reference_audio=args.ref,
output_path=args.out,
)
except Exception as exc:
print(f"Error during voice conversion: {exc}", file=sys.stderr)
sys.exit(1)
if __name__ == "__main__":
main() |