| import argparse |
| from openai import OpenAI |
|
|
| def get_args(): |
| parser = argparse.ArgumentParser() |
| parser.add_argument("--ip", type=str, required=True) |
| parser.add_argument("--port", type=int, default=8080) |
| parser.add_argument("--text", "-t", type=str, required=False) |
| parser.add_argument("--phonemes", "-p", type=str, required=False) |
| parser.add_argument("--model", "-m", type=str, required=False, default="kokoro", choices=["kokoro",]) |
| parser.add_argument("--language", "-l", type=str, required=False, default="en", choices=["en", "zh", "ja"]) |
| parser.add_argument("--voice", "-v", type=str, required=False, default="jm_kumo") |
| parser.add_argument("--speed", type=float, default=0.8) |
| parser.add_argument("--response_format", "-f", type=str, default="wav") |
| parser.add_argument("--output", type=str, default="output") |
| return parser.parse_args() |
|
|
| args = get_args() |
| if not args.text and not args.phonemes: |
| raise SystemExit("Either --text or --phonemes must be provided.") |
|
|
| client = OpenAI( |
| base_url=f'http://{args.ip}:{args.port}/v1', |
| api_key="dummy_key" |
| ) |
|
|
| payload = dict( |
| model=args.model, |
| voice=args.voice, |
| response_format=args.response_format, |
| speed=args.speed, |
| instructions=args.language |
| ) |
| if args.phonemes: |
| payload["phonemes"] = args.phonemes |
| else: |
| payload["input"] = args.text |
|
|
| speech = client.audio.speech.create( |
| **payload |
| ) |
|
|
| audio_file = args.output + '.' + args.response_format |
| with open(audio_file, "wb") as f: |
| f.write(speech.content) |
|
|
| print(f"Saved result to {audio_file}") |
|
|