生成语音
两个方案,按用户的话选:
两个都走中转,API key 都用 .env 里的 MY_API_KEY,写成 Authorization: Bearer $MY_API_KEY,别打印出来。
方案一:我们自己的音色(默认)
给一段参考人声和一段文字,生成同一个音色说这段话的语音,用的是 AutoDL 上的 IndexTTS2 工作流。照 AutoDL ComfyUI API 文档1调,只改两处:
- base URL:
https://autodl.art换成https://autodl-proxy.liuhetian.work - API key:官方文档里令牌前面不带
Bearer,经中转要带
# 提交,返回 data.task_id
curl -sS https://autodl-proxy.liuhetian.work/api/v1/comfyui/comfyui_workflow/indextts2-v1 \
-H "Authorization: Bearer $MY_API_KEY" -H "content-type: application/json" \
-d '{"prompt_text": "要说的话", "emo_control_method": "与音色参考音频相同",
"prompt_simple": "https://wiki.liuhetian.work/skills/agent-io/assets/%E5%A4%A7%E7%B1%B3_14s.wav"}'
# 轮询:data.status 是 QUEUED 或 RUNNING,就隔 5 秒再查一次
curl -sS https://autodl-proxy.liuhetian.work/api/v1/comfyui/comfyui_workflow/result/<task_id> \
-H "Authorization: Bearer $MY_API_KEY"
- 参考音频
prompt_simple:用户没指定音色,就用上面例子里的大米音色(assets/大米_14s.wav,14 秒)。要换音色,就给几秒钟的人声,wav 或 mp3,填 URL;本地文件写成data:audio/wav;base64,… - 结果:状态是
SUCCESS时,data.results[0].url就是 wav 链接,24 小时后失效,拿到马上下载。状态是FAILED时看msg - 可能排很久:一段时间没人用,后端要冷启动,第一次排了十几分钟;热起来以后一次十来秒。轮询的超时别设太短
- 其余参数:比如情绪控制,以
GET https://autodl-proxy.liuhetian.work/api/v1/comfyui/workflows/indextts2-v1返回的data.input_rules为准
方案二:微软 MAI-Voice 的 Mei(用户说不用自己的音色时)
用 OpenRouter 上微软的 microsoft/mai-voice-2.1-flash,同步返回 mp3,几秒出结果,拿到就能播。照 OpenRouter TTS 文档2调,只改 base URL:https://openrouter.ai 换成 https://openrouter.reverse-pro.xyz。
curl -sS -o out.mp3 -w '%{http_code}\n' https://openrouter.reverse-pro.xyz/api/v1/audio/speech \
-H "Authorization: Bearer $MY_API_KEY" -H "Content-Type: application/json" \
-d '{"model": "microsoft/mai-voice-2.1-flash", "voice": "zh-CN-Mei:MAI-Voice-2.1-Flash",
"response_format": "mp3", "input": "要说的话"}'
response_format必须写mp3:不写默认是 pcm,裸数据,播放器打不开- 结果:打印出来的状态码是 200,
out.mp3就是音频;不是 200,out.mp3里装的是 JSON 报错,读出来看 - 换音色:用户点名才换。中文音色有
zh-CN-Bo、zh-CN-Grant、zh-CN-Harper、zh-CN-Lan、zh-CN-Mei、zh-CN-Wei六个,后面都要带:MAI-Voice-2.1-Flash - 语速:Mei 读得偏慢,用户嫌慢就加
"speed": 1.2;实测 1.3 能把 7–9 秒的一句缩到 6 秒左右 - 语气控制不了:
instructions不起作用,写进input会被念出来 - 价格:按字数算,每百万字 15 美元,168 字的播报读了 43 秒,花 0.0025 美元
- 长稿子:一次能读多长没测过,几千字的稿子按段落拆开分别生成
- 不能克隆、不能多人对话:要特定人声用方案一
维护记录:接口从哪来、实测结果、为什么从 Gemini 换成 MAI-Voice。正常使用不用看,出问题再看。
-
AutoDL ComfyUI API 文档,2026-10-15 读。 ↩
-
OpenRouter TTS 文档,2026-10-15 读。 ↩