跳转到正文

语音与模型目录 ​

GET /v1/chat/catalog 返回公开模型、音色及实时积分价格。文本聊天使用 POST /v1/chat/completions,语音使用下方接口。

模型与价格 ​

实时模型目录 · 积分价格

正在加载模型目录…

语音转文字 ​

POST /v1/chat/transcribe,传入 { "audio": "data:audio/webm;base64,..." }。支持纯 base64,解码后最大 10MB;返回 text 和 language。

文字转语音 ​

实时模型目录 · 积分价格

正在加载模型目录…

展开模型可查看已启用音色。音色名称和说明可由管理员配置;禁用音色不会出现在目录中,也不能用于新的合成请求。刷新本页即可读取最新配置。模型禁用后,其全部音色也会从文档和目录的音色列表中移除,且不能用于新的合成请求;重新启用不会重置各音色的独立配置。默认音色或其所属模型被禁用后,会自动选择其他已启用模型的已启用音色。

POST /v1/chat/speech,传入 { "text": "你好", "voice": "speech-light:zf_xiaoni" },最多 2,000 字符。不传 voice 使用后台默认音色。使用目录中的 voices[].id,其 modelId 对应模型及价格。支持 Speech Standard、Speech Light、Speech Pro、Speech Expressive。音色自动决定语音模型,与聊天模型独立选择。

返回 audio(MP3 data URI,格式为 data:audio/mpeg;base64,...)、voice 和 billing: { model, credits, characters, price, unit: "1000_characters" }。所有音色(包括 Speech Pro)均返回 MP3。audio 可直接赋给音频播放器的 src,或将逗号后面的 base64 解码并保存为 .mp3 文件。Speech Pro 无需客户端转码,音色 ID 和按字符计费规则不变,详见可运行的 Python 示例。

流式语音 ​

在同一个 POST /v1/chat/speech 请求中加入 "stream": true。Speech Standard、Speech Light、Speech Pro 和 Speech Expressive 均支持,目录通过 speechModels[].streaming 标识此能力。不传 stream 或传 false,保持上面的完整 JSON 响应。

json
{ "text": "你好,今天过得怎么样?", "voice": "speech-pro:Ashley", "stream": true }

响应为连续的 MP3 二进制流,Content-Type: audio/mpeg,不再是 JSON、base64 或 SSE。代理收到音频就逐步转发;Speech Pro 采用增量转码,不等待完整音频。这不代表模型本身的生成延迟有保证。文本仍作为一个请求提交,不会自动拆句。

安装了 curl 和 FFmpeg 后,可以直接边接收边播放:

bash
curl --fail --no-buffer https://api.coldstart.win/v1/chat/speech \
  -H "Authorization: Bearer $COLDSTART_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text":"你好,今天过得怎么样?","voice":"speech-pro:Ashley","stream":true}' \
  | ffplay -nodisp -autoexit -f mp3 -i pipe:0

电话客户端应逐块读取响应,并交给持续运行的 MP3 解码器/播放器。浏览器可通过 response.body.getReader() 配合流式播放实现;调用 response.blob()、arrayBuffer() 或 json() 会等待完整响应。网络数据块并非独立 MP3 文件,不能把每块当作完整音频分别解码。用户打断或挂断时取消 fetch/reader。浏览器播放仍需通过用户交互解锁音频权限。

响应头提供 X-Speech-Voice(URL 编码后的对外音色 ID)、X-Speech-Credits、X-Speech-Characters 和 X-Speech-Usage-Id。积分金额为本次预扣金额;成功完成后,价格与非流式相同,按字符计费。流式失败或服务端完成处理前断连,会退回本次积分并记录失败用量;服务端已经成功完成后再取消,不会撤销成功扣费。

音频开始前的错误仍返回常规 HTTP 状态和 JSON 错误体;开始后若失败,会中断连接,请丢弃不完整音频,并在任务历史核对最终扣费。收到 HTTP 200 或首块音频不代表请求已经成功完成。若客户端前还有额外代理,应关闭此路由的响应缓冲与压缩;API 已发送 X-Accel-Buffering: no 和 Cache-Control: no-store, no-transform。

语音文本被明确判定违反内容政策时,流式和非流式请求都会在音频开始前返回 HTTP 400,错误码为 content_policy_violation,并退回积分。请勿自动重试相同文本,应调整为符合内容政策的文本。支持流式不代表没有内容限制。

语音请求独立处理,请明确传入所需的公开音色 ID。语音非流式返回包含音频 data URI 和账单的 JSON,流式返回音频字节。

语音消耗 = 清理后文本的计费字符数 × 模型每千字符单价 / 1,000,向上保留八位小数。Speech Light、Speech Pro 和 Speech Expressive 按 UTF-16 单位计数,以目录标注为准:普通中文、英文字母计 1,😀 等补充平面字符计 2。Speech Standard 按 Unicode 码点计数。目录的 speechModels[].characterCounting 和响应的 billing.character_counting 标明规则(utf16_code_units 或 unicode_codepoints);billing.characters 为实际计费数量。格式标记和动作描述在合成和计数前移除。失败或空音频原额退款。每次合成请求收费,直接重播返回的音频不收费;控制台在当前页面按消息和音色缓存音频。