File size: 1,843 Bytes
fb41b93 | 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 | #!/usr/bin/env python3
"""OpenAI-Compatible 客户端示例:把 S3 speech tokens POST 到 /v1/audio/speech 生成 wav。
用法:
python3 openai_client.py --tokens "12,34,56" --out out.wav
python3 openai_client.py --tokens-npy sample_input/tokens.npy --out out.wav --fmt mp3
"""
import argparse
import json
import sys
import urllib.request
from pathlib import Path
import numpy as np
def main():
p = argparse.ArgumentParser(description="OpenAI-Compatible 板端 TTS client")
p.add_argument("--url", default="http://127.0.0.1:8000/v1/audio/speech")
p.add_argument("--tokens", default="", help="逗号分隔的 S3 token id 列表")
p.add_argument("--tokens-npy", default="", help="或从 npy 读取 token 序列")
p.add_argument("--out", default="output.wav")
p.add_argument("--fmt", default="wav", choices=["wav", "mel"])
p.add_argument("--model", default="chatterbox-onestep")
args = p.parse_args()
if args.tokens:
tokens = [int(t) for t in args.tokens.split(",") if t.strip()]
elif args.tokens_npy:
arr = np.load(args.tokens_npy).reshape(-1)
tokens = [int(t) for t in arr if t > 0]
else:
print("请提供 --tokens 或 --tokens-npy")
sys.exit(1)
body = json.dumps({
"model": args.model, "input": tokens, "voice": "default", "response_format": args.fmt,
}).encode("utf-8")
req = urllib.request.Request(args.url, data=body, headers={"Content-Type": "application/json"})
try:
with urllib.request.urlopen(req, timeout=180) as resp:
audio = resp.read()
except urllib.error.HTTPError as e:
print("server error:", e.code, e.read().decode()[:500])
sys.exit(1)
Path(args.out).write_bytes(audio)
print(f"OK: {len(audio)} bytes -> {args.out}")
if __name__ == "__main__":
main()
|