"""Yixo TTS 流式合成示例（Python 3.8+，依赖 requests）。

PCM 实时流：边收边写入 speech.pcm（48kHz 16-bit 单声道 s16le）。
把 response_format 改为 "wav" 则直接得到完整 speech.wav。

用法：YIXO_API_KEY=sk-xxx python tts_stream.py "要合成的文本"
"""

import os
import sys

import requests

BASE_URL = "https://baydadam.com/v1"
API_KEY = os.environ.get("YIXO_API_KEY", "<API Key>")

payload = {
    "model": "yixotts",
    "input": sys.argv[1] if len(sys.argv) > 1 else "你好，世界。",
    "voice": "zh_female_02_SSB0342",
    "response_format": "pcm",
}

with requests.post(
    f"{BASE_URL}/audio/speech",
    headers={
        "Authorization": f"Bearer {API_KEY}",
        "Content-Type": "application/json",
    },
    json=payload,
    stream=True,
    timeout=300,
) as response:
    if response.status_code != 200:
        # 错误响应为 JSON：{"error": "..."}，429 时带 Retry-After 头
        print(f"请求失败 {response.status_code}: {response.text}", file=sys.stderr)
        sys.exit(1)
    with open("speech.pcm", "wb") as output:
        for chunk in response.iter_content(chunk_size=8192):
            if chunk:
                output.write(chunk)

print("已保存 speech.pcm（48kHz 16-bit 单声道 s16le）")
