# Python 3.10+，仅使用标准库。密钥先设置到环境变量。
import json, os, urllib.request, wave

request = urllib.request.Request(
    "https://tts.heang.top/v1/audio/speech",
    data=json.dumps({
        "input": "你好，这是流式语音合成测试。",
        "instructions": "自然、清晰、温暖的成年女声。",
        "response_format": "pcm",
        "cfg_scale": 1,
        "max_new_tokens": 500,
    }).encode("utf-8"),
    headers={
        "Content-Type": "application/json",
        "User-Agent": "BreezeAgent/1.0",
        "CF-Access-Client-Id": os.environ["TTS_CLIENT_ID"],
        "CF-Access-Client-Secret": os.environ["TTS_CLIENT_SECRET"],
    },
)
with urllib.request.urlopen(request, timeout=180) as response:
    if "audio" not in response.headers.get("Content-Type", ""):
        raise RuntimeError("服务未返回音频，请检查认证和响应内容")
    with wave.open("speech.wav", "wb") as audio:
        audio.setnchannels(1)
        audio.setsampwidth(2)
        audio.setframerate(24000)
        while chunk := response.read1(4096):
            # 实时播放：将 chunk 交给 PCM 播放队列，勿等待整个请求结束。
            audio.writeframesraw(chunk)
# wave 自动写入正确的文件长度；不要把 .pcm 直接改名为 .wav。