#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""CosyVoice 长文本测试"""

import requests, json, time, os

API_KEY = "sk-c25679401ba24c749f53be86b0c9a7a6"
API_URL = "https://dashscope.aliyuncs.com/api/v1/services/audio/tts/SpeechSynthesizer"
OUTPUT_DIR = "test-results"
os.makedirs(OUTPUT_DIR, exist_ok=True)

# 《春》朱自清，约 1700+ 字
TEXT = """盼望着，盼望着，东风来了，春天的脚步近了。

一切都像刚睡醒的样子，欣欣然张开了眼。山朗润起来了，水涨起来了，太阳的脸红起来了。

小草偷偷地从土地里钻出来，嫩嫩的，绿绿的。园子里，田野里，瞧去，一大片一大片满是的。坐着，躺着，打两个滚，踢几脚球，赛几趟跑，捉几回迷藏。风轻悄悄的，草软绵绵的。

桃树，杏树，梨树，你不让我，我不让你，都开满了花赶趟儿。红的像火，粉的像霞，白的像雪。花里带着甜味；闭了眼，树上仿佛已经满是桃儿，杏儿，梨儿。花下成千成百的蜜蜂嗡嗡地闹着，大小的蝴蝶飞来飞去。野花遍地是：杂样儿，有名字的，没名字的，散在草丛里像眼睛像星星，还眨呀眨。

"吹面不寒杨柳风"，不错的，像母亲的手抚摸着你，风里带着些新翻的泥土的气息，混着青草味儿，还有各种花的香，都在微微润湿的空气里酝酿。鸟儿将巢安在繁花嫩叶当中，高兴起来了，呼朋引伴的卖弄清脆的歌喉，唱出婉转的曲子，跟清风流水应和着。牛背上牧童的短笛，这时候也成天嘹亮的响着。

雨是最寻常的，一下就是三两天。可别恼。看，像牛毛，像花针，像细丝，密密地斜织着，人家屋顶上全笼着一层薄烟。树叶却绿得发亮，小草也青得逼你的眼。傍晚时候，上灯了，一点点黄晕的光，烘托出一片安静而和平的夜。在乡下，小路上，石桥边，有撑着伞慢慢走着的人，地里还有工作的农民，披着蓑戴着笠。他们的房屋稀稀疏疏的，在雨里静默着。

天上的风筝渐渐多了，地上的孩子也多了。城里乡下，家家户户，老老小小，也赶趟似的，一个个都出来了。舒活舒活筋骨，抖擞抖擞精神，各做各的一份事儿去。"一年之计在于春"，刚起头儿，有的是功夫，有的是希望。

春天像刚落地的娃娃，从头到脚都是新的，它生长着。

春天像小姑娘，花枝招展的，笑着走着。

春天像健壮的青年，有铁一般的胳膊和腰脚，领着我们向前去。"""

print("=" * 60)
print("  CosyVoice 长文本语音合成测试")
print("=" * 60)
print(f"\n模型: cosyvoice-v3-flash")
print(f"音色: longanyang")
print(f"格式: mp3 / 采样率: 24000")
print(f"文本长度: {len(TEXT)} 字符\n")

payload = {
    "model": "cosyvoice-v3-flash",
    "input": {
        "text": TEXT,
        "voice": "longanyang",
        "format": "mp3",
        "sample_rate": 24000
    }
}
headers = {"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"}

print("发送请求...")
t0 = time.time()
resp = requests.post(API_URL, headers=headers, json=payload, timeout=120)
elapsed = time.time() - t0

if resp.status_code != 200:
    print(f"❌ HTTP {resp.status_code}")
    print(json.dumps(resp.json(), ensure_ascii=False, indent=2))
    exit(1)

data = resp.json()
audio_url = data["output"]["audio"]["url"]
chars = data["usage"]["characters"]
rid = data["request_id"]

print(f"✅ 合成成功！ 耗时: {elapsed:.1f}s")
print(f"   Request ID: {rid}")
print(f"   计费字符数: {chars}")
print(f"   音频URL: {audio_url}")

# 下载
print(f"\n下载音频...")
ar = requests.get(audio_url, timeout=60)
ts = time.strftime("%Y%m%d_%H%M%S")
fname = os.path.join(OUTPUT_DIR, f"cosyvoice-春-{ts}.mp3")
with open(fname, "wb") as f:
    f.write(ar.content)
size = os.path.getsize(fname)
print(f"✅ 已保存: {fname}")
print(f"   文件大小: {size:,} 字节 ({size/1024:.1f} KB)")
print(f"   文本 {chars} 字 → 音频 {size/1024:.1f} KB")
