01单笔合成

将文本合成为语音。短文本(≤ 3000 UTF-8 字节,约 1000 汉字)使用单笔接口同步返回音频;长文本使用异步任务接口异步处理。TTS 为纯文本输入(JSON body),无文件直传环节。

Endpoint POST/v1/tts
Content-Type application/json 响应为 JSON:inferenceId + durationMs + url(现签下载链接)

请求参数

参数类型必填说明
reqParams.textstring是待合成文本,≤ 3000 UTF-8 字节(约 1000 汉字);超出请使用异步任务接口
reqParams.speakerstring是音色 code,完整清单调 GET /v1/tts/voices 获取(见下方"当前可用音色"表),缺省体验可先传 default
audioParams.speechRateinteger否语速百分比偏移(-50–100);当前引擎暂不支持语速控制,传值静默忽略,缺省为原速
audioParams.formatstring否输出音频格式:wav(缺省)/ mp3(体积约 wav 的 1/5);服务端转换,url 扩展名即格式

当前可用音色

清单随平台音色库动态更新,程序化获取请调 GET /v1/tts/voices(Bearer API Key)。下表为登录态实时渲染,加载失败时仅显示缺省音色。

音色 code名称性别风格
default默认音色female—

模型无需指定:平台自动使用 product 为 tts 的当前唯一在线模型。

shell
curl https://www.suanlinfang.cn/v1/tts \
  -H "Authorization: Bearer nk-your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "reqParams": { "text": "欢迎使用算邻坊语音合成。", "speaker": "default" },
    "audioParams": { "speechRate": 0 }
  }'
python
import requests

resp = requests.post(
    "https://www.suanlinfang.cn/v1/tts",
    headers={"Authorization": "Bearer nk-your-api-key"},
    json={
        "reqParams": {"text": "欢迎使用算邻坊语音合成。", "speaker": "default"},
        "audioParams": {"speechRate": 0},
    },
).json()
audio = requests.get(resp["url"])   # url 为现签产物下载链接(1 小时有效)
with open("tts.wav", "wb") as f:
    f.write(audio.content)
print("durationMs:", resp["durationMs"])
注意:单笔响应为扁平 JSON:inferenceId 是本笔推理流水号(报障时提供可反查),durationMs 是合成时长(毫秒),url 是现签产物下载链接(1 小时有效,过期重新调用即换新链),音频不随响应内嵌、请 GET 该链接下载(格式即 url 扩展名,wav 缺省 / mp3 可选)。计费按 reqParams.text 字符数计算,详见计费说明。

时长估算

Endpoint POST/v1/tts/estimate

输入待合成文本,返回字符数与预计成品音频时长(估算系数由平台统一维护,接口单一来源);鉴权同产品端点(Bearer API Key),文本上限校验与单笔一致(超限返回同款引导错误)。

请求参数

参数类型必填说明
reqParams.textstring是待估算文本;仅此一个入参,speaker / audioParams 与时长估算无关

响应示例

json · response
{
  "chars": 42,
  "estimateSeconds": 11
}
02异步合成(长文本)

长文本使用异步任务接口异步处理:提交全文后平台按 500 字自动切块合成,拼接为完整音频;任务状态机与轮询约定见通用说明 · 异步任务。

Endpoint POST/v1/tts/tasks
Content-Type application/json 平台自动按 500 字切块合成并拼接为完整音频,任务完成后通过查询接口获取下载链接

请求参数

参数类型必填说明
reqParams.textstring是长文本,≤ 20 万字,按 500 字自动切块
reqParams.speakerstring是音色 code,完整清单调 GET /v1/tts/voices 获取(见下方"当前可用音色"表),缺省体验可先传 default
audioParams.speechRateinteger否语速百分比偏移(-50–100);当前引擎暂不支持语速控制,传值静默忽略
audioParams.formatstring否输出音频格式:wav(缺省)/ mp3;作用于聚合后的完整音频,url 扩展名即格式

模型无需指定:平台自动使用 product 为 tts 的当前唯一在线模型。

查询接口

Endpoint GET/v1/tts/tasks/{taskNo}

查询响应示例(success 时)

json · response
{
  "status": "success",
  "totalUnits": 12,
  "doneUnits": 12,
  "resultUrl": "https://oss.../output.wav?Expires=...&Signature=...",
  "expireAt": "2026-09-27T12:00:00Z",
  "durationSec": 356
}

resultUrl 为拼接后完整音频(格式即 url 扩展名,wav 缺省 / mp3 可选)的短时效下载链接(1 小时,expireAt 为绝对过期时间);链接过期后在任务保留期内重新查询即可获取新链接。任务为二值终态:全部单元成功才返回 resultUrl,失败任务无音频产物(见异步任务通用说明)。

03历史记录查询

查询本 API Key 所属账户的语音合成调用历史;鉴权同产品端点(Bearer API Key),响应为分页 JSON(无信封)。

单笔历史

Endpoint GET/v1/tts/records

分页查询语音合成单笔形态的历史。

Query 参数

参数类型必填说明
pageinteger否页码,默认 1
pageSizeinteger否每页条数,默认 10

任务历史

Endpoint GET/v1/tts/tasks

分页查询语音合成异步任务形态的历史。

Query 参数

参数类型必填说明
pageinteger否页码,默认 1
pageSizeinteger否每页条数,默认 10

响应字段(items[] 内,null 字段不下发)

字段类型说明
formstringsingle / task(单笔 / 异步任务)
statusstringprocessing / success / failed
taskNostring任务形态的任务号(单笔为 null 不下发)
inputCountinteger计费输入计数(TTS=合成字符数,含标点与空格)
consumerCostnumber本笔消费金额(元)
elapsedMsinteger推理耗时(毫秒)
errorMsgstring失败原因(成功为 null 不下发)
createdAt / completedAtstring受理 / 完成时间;两者之差即处理耗时
resultUrlstringsuccess 且有产物时现签的下载链接(1 小时有效,重查换新链)
voice / voiceDisplayNamestring音色 code 与中文名快照
format / outputSize—实际交付格式(wav/mp3)与产物字节数
durationSecinteger合成音频时长秒

响应示例

json · response
{
  "total": 42, "page": 1, "pageSize": 10,
  "items": [{
    "form": "single", "status": "success",
    "voiceDisplayName": "君航", "format": "mp3",
    "inputCount": 52, "consumerCost": 0.0104,
    "createdAt": "2026-10-29T10:00:00", "completedAt": "2026-10-29T10:00:08",
    "resultUrl": "https://…(现签 1h)"
  }]
}
04计费说明

按笔后付费:每次成功调用按实际用量从账户余额扣费,失败调用不扣费。费用明细与账户余额可在「语音合成工具」页的「历史记录」与「账户信息」页查看。

按 input 文本字符数计费(含标点与空格),元 / 万字符。牌价以平台实时牌价为准。异步任务按单元逐笔计费(每块文本各计一笔)。

重试提示:网络中断可能发生在计费已完成之后(如语音合成音频回传中断)。此时重试同一请求会产生新的计费,请结合「调用记录」核对后再重试。