cosyvoice_long.py 4.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """CosyVoice 长文本测试"""
  4. import requests, json, time, os
  5. API_KEY = "sk-c25679401ba24c749f53be86b0c9a7a6"
  6. API_URL = "https://dashscope.aliyuncs.com/api/v1/services/audio/tts/SpeechSynthesizer"
  7. OUTPUT_DIR = "test-results"
  8. os.makedirs(OUTPUT_DIR, exist_ok=True)
  9. # 《春》朱自清,约 1700+ 字
  10. TEXT = """盼望着,盼望着,东风来了,春天的脚步近了。
  11. 一切都像刚睡醒的样子,欣欣然张开了眼。山朗润起来了,水涨起来了,太阳的脸红起来了。
  12. 小草偷偷地从土地里钻出来,嫩嫩的,绿绿的。园子里,田野里,瞧去,一大片一大片满是的。坐着,躺着,打两个滚,踢几脚球,赛几趟跑,捉几回迷藏。风轻悄悄的,草软绵绵的。
  13. 桃树,杏树,梨树,你不让我,我不让你,都开满了花赶趟儿。红的像火,粉的像霞,白的像雪。花里带着甜味;闭了眼,树上仿佛已经满是桃儿,杏儿,梨儿。花下成千成百的蜜蜂嗡嗡地闹着,大小的蝴蝶飞来飞去。野花遍地是:杂样儿,有名字的,没名字的,散在草丛里像眼睛像星星,还眨呀眨。
  14. "吹面不寒杨柳风",不错的,像母亲的手抚摸着你,风里带着些新翻的泥土的气息,混着青草味儿,还有各种花的香,都在微微润湿的空气里酝酿。鸟儿将巢安在繁花嫩叶当中,高兴起来了,呼朋引伴的卖弄清脆的歌喉,唱出婉转的曲子,跟清风流水应和着。牛背上牧童的短笛,这时候也成天嘹亮的响着。
  15. 雨是最寻常的,一下就是三两天。可别恼。看,像牛毛,像花针,像细丝,密密地斜织着,人家屋顶上全笼着一层薄烟。树叶却绿得发亮,小草也青得逼你的眼。傍晚时候,上灯了,一点点黄晕的光,烘托出一片安静而和平的夜。在乡下,小路上,石桥边,有撑着伞慢慢走着的人,地里还有工作的农民,披着蓑戴着笠。他们的房屋稀稀疏疏的,在雨里静默着。
  16. 天上的风筝渐渐多了,地上的孩子也多了。城里乡下,家家户户,老老小小,也赶趟似的,一个个都出来了。舒活舒活筋骨,抖擞抖擞精神,各做各的一份事儿去。"一年之计在于春",刚起头儿,有的是功夫,有的是希望。
  17. 春天像刚落地的娃娃,从头到脚都是新的,它生长着。
  18. 春天像小姑娘,花枝招展的,笑着走着。
  19. 春天像健壮的青年,有铁一般的胳膊和腰脚,领着我们向前去。"""
  20. print("=" * 60)
  21. print(" CosyVoice 长文本语音合成测试")
  22. print("=" * 60)
  23. print(f"\n模型: cosyvoice-v3-flash")
  24. print(f"音色: longanyang")
  25. print(f"格式: mp3 / 采样率: 24000")
  26. print(f"文本长度: {len(TEXT)} 字符\n")
  27. payload = {
  28. "model": "cosyvoice-v3-flash",
  29. "input": {
  30. "text": TEXT,
  31. "voice": "longanyang",
  32. "format": "mp3",
  33. "sample_rate": 24000
  34. }
  35. }
  36. headers = {"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"}
  37. print("发送请求...")
  38. t0 = time.time()
  39. resp = requests.post(API_URL, headers=headers, json=payload, timeout=120)
  40. elapsed = time.time() - t0
  41. if resp.status_code != 200:
  42. print(f"❌ HTTP {resp.status_code}")
  43. print(json.dumps(resp.json(), ensure_ascii=False, indent=2))
  44. exit(1)
  45. data = resp.json()
  46. audio_url = data["output"]["audio"]["url"]
  47. chars = data["usage"]["characters"]
  48. rid = data["request_id"]
  49. print(f"✅ 合成成功! 耗时: {elapsed:.1f}s")
  50. print(f" Request ID: {rid}")
  51. print(f" 计费字符数: {chars}")
  52. print(f" 音频URL: {audio_url}")
  53. # 下载
  54. print(f"\n下载音频...")
  55. ar = requests.get(audio_url, timeout=60)
  56. ts = time.strftime("%Y%m%d_%H%M%S")
  57. fname = os.path.join(OUTPUT_DIR, f"cosyvoice-春-{ts}.mp3")
  58. with open(fname, "wb") as f:
  59. f.write(ar.content)
  60. size = os.path.getsize(fname)
  61. print(f"✅ 已保存: {fname}")
  62. print(f" 文件大小: {size:,} 字节 ({size/1024:.1f} KB)")
  63. print(f" 文本 {chars} 字 → 音频 {size/1024:.1f} KB")