过去,同一音色朗读同一句话,每次请求返回的节奏都会略有不同。旁白可以利用这种变化。电话语音菜单、要播放成千上万次的应用提示音,或为配合剪辑而重新生成的台词,则需要与团队审定的版本接近的读法。
今天,Paxa TTS Flash v2 新增两项控制。Temperature 决定朗读在每次请求之间的变化程度。停顿标签在您写下它的位置插入设定时长的静默。两者在控制台和 API 中都能使用。
- Temperature 0,第 1 次Foi Thong0:05
- Temperature 0,第 2 次Foi Thong0:05
- Temperature 0.5,第 1 次Foi Thong0:06
- Temperature 0.5,第 2 次Foi Thong0:05
- Temperature 2,第 1 次Foi Thong0:06
- Temperature 2,第 2 次Foi Thong0:05
Temperature#
Temperature 的取值范围是 0 到 2,步长为 0.1,默认值为 0.5。它改变朗读在每次请求之间的节奏、停顿、呼吸和语调。未传入该字段的请求按 0.5 朗读,变化比以前的请求更小。
- 设为
0时,朗读变化最小。同一音色朗读同一段文字,每次请求的节奏和语调最接近,两次朗读仍可能不同。 - 设为默认值
0.5时,朗读在每次请求之间略有变化。不传该字段与传入0.5是同一个请求。 - 设为
2时,朗读变化最大。
Temperature 与指令搭配#
指令决定情绪,Temperature 决定这种读法的变化程度。Kaprao 用 [sad] 读一句话,再用 [angry] 读另一句,每句在 0 和 2 各读两次。
- [sad],Temperature 0,第 1 次Kaprao0:05
- [sad],Temperature 0,第 2 次Kaprao0:05
- [sad],Temperature 2,第 1 次Kaprao0:05
- [sad],Temperature 2,第 2 次Kaprao0:05
- [angry],Temperature 0,第 1 次Kaprao0:03
- [angry],Temperature 0,第 2 次Kaprao0:03
- [angry],Temperature 2,第 1 次Kaprao0:04
- [angry],Temperature 2,第 2 次Kaprao0:03
较低的 Temperature 适合带指令、需要反复播放的台词,例如应用提示音或游戏角色的回复。较高的值能为一个场景提供几个不同的版本以供挑选。
在控制台的语音工具中,Temperature 是语速下方的滑块,0 处标为“更稳定”,2 处标为“更具创意”。滑块位于 0.5 时显示“默认”,位于其他位置时显示“重置”按钮。深层链接和分享链接都会保留这个值。
在 API 中,POST /v1/tts、OpenAI 兼容的语音端点和实时连接的 start 帧都有 temperature 字段。任何 Temperature 下,请求费用都相同。
curl -X POST https://api.paxalabs.com/v1/tts \
-H "Authorization: Bearer $PAXA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"text": "สวัสดีครับ ยินดีต้อนรับสู่ Paxa Labs",
"voice": "khanomkrok",
"model": "paxa-tts-flash-v2",
"temperature": 0
}' \
--output speech.mp3import { writeFile } from "node:fs/promises";
const response = await fetch("https://api.paxalabs.com/v1/tts", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.PAXA_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
text: "สวัสดีครับ ยินดีต้อนรับสู่ Paxa Labs",
voice: "khanomkrok",
model: "paxa-tts-flash-v2",
temperature: 0,
}),
});
if (!response.ok) throw new Error(`TTS failed: ${response.status}`);
await writeFile("speech.mp3", Buffer.from(await response.arrayBuffer()));import os
import requests
response = requests.post(
"https://api.paxalabs.com/v1/tts",
headers={"Authorization": f"Bearer {os.environ['PAXA_API_KEY']}"},
json={"text": "สวัสดีครับ ยินดีต้อนรับสู่ Paxa Labs", "voice": "khanomkrok", "model": "paxa-tts-flash-v2", "temperature": 0},
)
response.raise_for_status()
with open("speech.mp3", "wb") as f:
f.write(response.content)Paxa TTS Flash v2 支持 Temperature。Paxa TTS Flash 保留自身的变化方式,只接受取整后为 0.5 的值,其他值会在扣费前返回 400 validation。Temperature 指南说明了设计音色的情况,以及带 Idempotency-Key 的重试。
停顿标签#
停顿标签会在它前面那个词之后加入静默。您可以写命名时长 [short pause]、[pause] 或 [long pause],也可以写精确时长,例如 [pause 300ms]。Paxa TTS Flash v2 的每个音色都能读取停顿标签,Paxa TTS Flash 一个也不读取。
- 无停顿Nom Yen0:02
- [short pause]Nom Yen0:02
- [pause]Nom Yen0:02
- [long pause]Nom Yen0:02
- [pause 500ms]Nom Yen0:02
命名停顿的时长取决于标签前那个词的语言。
| 语言 | [short pause] | [pause] | [long pause] |
|---|---|---|---|
| 泰语 | 130 ms | 180 ms | 460 ms |
| 中文 | 100 ms | 140 ms | 360 ms |
| 英语及其他语言 | 120 ms | 170 ms | 460 ms |
[pause 300ms]、[pause 0.3s]和[pause:300]是同一个停顿。不带单位的数字按毫秒计。- 精确时长会取整到最接近的 10 ms,最长 500 ms。更长的时长(例如
[pause 1s])按 500 ms 播放。 - 停顿会叠加在朗读本身在该词后留下的间隙上。同一个标签放在句号后,产生的静默比放在句中更长。
- 无论语速如何,停顿时长都不变。
停顿标签也是文本,其字符与其他字符一样计入请求的长度和费用。停顿指南包含其余细节,包括实时连接中的用法。
此次发布的其他更新#
[emphasis] 现在作为指令读取,与 [whispering]、[excited] 相同。
常见问题#
Temperature 会影响价格吗?#
从 0 到 2,任何 Temperature 下请求费用都相同。
设为 0 时,两次朗读有多接近?#
节奏、停顿和语调都比其他任何设置下更接近。两次结果不保证一致。
停顿可以超过 500 ms 吗?#
单个标签最多停顿 500 ms。更长的标签按 500 ms 播放,不会被拒绝。