文本转语音
通过 OpenAI 的语音 API,用 Qwen3-TTS 和 ZONOS2 把文本变成语音——预置音色、按描述设计的音色、用一小段录音克隆声音、情绪控制,支持 10 到 40 多种语言,按音频分钟计价。
Lovely Router 提供 OpenAI 的语音端点 POST /v1/audio/speech,背后是运行在我们自己 GPU 上的开源语音模型。把 OpenAI SDK 指向 https://lovelyrouter.com/v1,使用你的 Lovely Router 密钥,响应里就是音频。在 OpenAI 的字段之外,你还可以按描述设计音色、用一小段录音克隆声音、指定语言,在 ZONOS2 上还能设置情绪。所有字段见音频端点参考。
模型#
| 模型 | 价格 | 擅长 | 语言 |
|---|---|---|---|
qwen3-tts | 每分钟 $0.036 | 按描述设计音色、9 个可用风格指令控制的预置音色、声音克隆 | 10 种:中文、英语、日语、韩语、德语、法语、俄语、葡萄牙语、西班牙语、意大利语 |
zonos2 | 每分钟 $0.036 | 高还原度的声音克隆、情绪(开心、悲伤、愤怒、惊讶) | 40 多种,英语、中文、日语效果最好 |
两者都按生成音频的秒数计费,每次请求至少 1 秒。Qwen3-TTS 由阿里巴巴通义千问团队以 Apache-2.0 许可发布;ZONOS2 由 Zyphra 以 Apache-2.0 许可发布。
两个模型都运行在无人使用时会休眠的托管 GPU 上:闲置后的第一个请求需要等模型加载,qwen3-tts 约 45 秒,zonos2 最长约 2 分钟。之后,Qwen3-TTS 的生成速度约为实时的两倍;ZONOS2 单个请求约等于实时,多个请求同时进行时更快。
合成语音#
curl https://lovelyrouter.com/v1/audio/speech \
-H "Authorization: Bearer $LOVELY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3-tts",
"input": "欢迎回来!你的订单已经发货,预计周四送达。",
"voice": "serena",
"instructions": "温暖开朗,语速稍快"
}' \
--output welcome.mp3响应就是音频本身(默认 MP3,可用 response_format 更改),音频秒数在 x-lovely-audio-seconds 响应头里。文本最长 4,096 个字符;长文本会逐句用同一个音色朗读。
音色#
voice 可以是模型的预置音色、已保存声音的 id,或 OpenAI 的音色名——后者会映射到最接近的预置音色,所以为 OpenAI 写的代码无需修改。
qwen3-tts 音色 | 声音特点 | 母语 |
|---|---|---|
vivian | 明亮、略带个性的年轻女声 | 中文 |
serena | 温暖、温柔的年轻女声 | 中文 |
uncle_fu | 成熟男声,低沉醇厚 | 中文 |
dylan | 年轻男声,清晰自然 | 中文(北京话) |
eric | 活泼男声,略带沙哑 | 中文(四川话) |
ryan | 富有节奏感的有力男声 | 英语 |
aiden | 阳光的美式男声 | 英语 |
ono_anna | 俏皮轻快的年轻女声 | 日语 |
sohee | 温暖、情感丰富的女声 | 韩语 |
zonos2 有三个:american_female、american_male 和 british_female。
每个音色都能说其模型支持的所有语言,说母语时效果最好。不传 voice 时,模型会按 language 选一个合适的预置音色(qwen3-tts:中文用 vivian,日语用 ono_anna,韩语用 sohee,其余用 ryan)。
风格指令#
在 qwen3-tts 上,instructions 控制预置或克隆音色的说话方式:情绪、语速、音量、耳语、口音。像给配音演员讲戏一样写,用任何语言都可以:
{ "model": "qwen3-tts", "voice": "uncle_fu", "input": "都过来,我告诉你们当年到底发生了什么。", "instructions": "缓慢、神秘,压低声音像在说悄悄话" }设计音色#
不传 voice,在 instructions 里描述声音——年龄、性别、音色、语速、情绪、口音——qwen3-tts 就会为它生成一个新音色:
{ "model": "qwen3-tts", "input": "啊哈!落帆,我们要进港了。", "instructions": "一位嗓音沙哑洪亮的老海盗船长,带着醉意,觉得一切都很好笑" }设计出来的音色每次会略有不同。想固定一个,就把生成结果保存为声音,之后使用它的 id。
情绪(ZONOS2)#
zonos2 用 emotion 代替指令:happy、sad、angry、surprised 之一,或 0 到 1 的权重,例如 {"happy": 0.7, "surprised": 0.3}。说话人的声音不变,只改变表达方式。
克隆声音#
两个模型都能用一小段录音克隆声音:3 到 15 秒、单人清晰说话、没有音乐。保存一次,之后把它的 id 作为 voice 使用:
curl https://lovelyrouter.com/v1/audio/voices \
-H "Authorization: Bearer $LOVELY_API_KEY" \
-F name="旁白" \
-F transcript="感谢收听,我们下周节目再见。" \
-F consent=true \
-F file=@narrator.wav返回的是声音对象。然后用它的 id 合成:
curl https://lovelyrouter.com/v1/audio/speech \
-H "Authorization: Bearer $LOVELY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "qwen3-tts", "voice": "voice_8f2c4a1e9b7d3f60a5c2e1d4", "input": "今天我们来聊聊茶的历史。"}' \
--output episode.mp3transcript是录音里说的内容。有了它,Qwen3-TTS 的克隆更接近原声;没有它,只匹配声音的音色。ZONOS2 不需要它。- 必须传
consent: true:你确认这是你自己的声音,或你已获得说话人的克隆许可,并对使用方式负责。不要用克隆的声音欺骗他人或冒充他人。 - 保存的声音免费、仅你的账户可见,删除前一直保留,每个账户最多 100 个。支持 WAV、MP3、M4A、OGG/Opus、FLAC 或 WebM,最大 10 MB。
- 保存的声音可用于两个模型、它们支持的所有语言,在
qwen3-tts上还可以配合instructions。
只用一次的克隆,可以直接随请求发送录音:reference_audio(https URL、data: URL 或 base64)、reference_text 和 consent: true。
输出#
response_format | 得到的内容 |
|---|---|
mp3(默认) | MP3,128 kbps |
opus | Ogg Opus,64 kbps |
aac | AAC(ADTS) |
flac | FLAC |
wav | WAV,16 位 |
pcm | 原始 16 位小端采样,24 kHz 单声道(与 OpenAI 相同) |
Qwen3-TTS 生成 24 kHz 音频,ZONOS2 生成 44.1 kHz。speed(0.25 到 4.0)改变语速而不改变音高;按返回的秒数计费。