跳转到内容

Speech API

Speech API 使用 OpenAI 兼容的文本转语音请求,并直接返回可播放的音频文件。当前支持 azure-tts、unreal-speech-v8 和 indextts-2;实际可用模型仍以 GET /v1/models 为准。IndexTTS2 使用参考音频 URL 克隆音色,其 WAV 输出、异步任务和情绪控制请见 IndexTTS2 API。下文其他模型的音色名、MP3 和语速参数不适用于 IndexTTS2。

POST https://ai.j1ao.vip/v1/audio/speech
Authorization: Bearer sk-your-rex-key
Content-Type: application/json

通用字段:

字段 类型 必填 说明
model string 是 TTS 模型,例如 azure-tts 或 unreal-speech-v8。
input string 是 需要转换为语音的文本。UnrealSpeech 也接受官方字段 Text 或全小写 text。
voice string 是 音色名称。UnrealSpeech 也接受 VoiceId 或全小写 voiceid。
response_format string 否 输出音频格式,默认 mp3。
speed float 否 语速。不同模型的取值语义见下文。

请求成功时直接返回音频二进制内容,不返回上游文件 URL。使用命令行调用时应通过 --output 或 -o 保存文件。

azure-tts 支持完整的 Edge TTS / Azure TTS 音色名称。完整清单共 322 个音色:

查看或下载完整 voice 清单

Azure 扩展字段:

字段 类型 说明
speed float 倍率,1.0 表示 100%。
volume float 音量倍率,1.0 表示 100%。
pitch number 相对基准音高的 Hz 偏移量。
终端窗口
curl https://ai.j1ao.vip/v1/audio/speech \
-H "Authorization: Bearer sk-your-rex-key" \
-H "Content-Type: application/json" \
-d '{
"model": "azure-tts",
"input": "你好,这是 Azure TTS 的 OpenAI 兼容接口。",
"voice": "zh-CN-XiaoxiaoNeural",
"response_format": "mp3",
"speed": 1.0,
"volume": 1.0,
"pitch": 0
}' \
--output speech.mp3

UnrealSpeech 同步请求可选择两种模式:

模式 JSON 控制字段 文本上限 输出格式
speech "speech": true,也是默认模式 5,000 字符 mp3
stream "stream": true 1,000 字符 mp3 或 pcm

stream 与 speech 不能同时为 true。speech 模式虽然从上游获得临时存储 URL,但网关会代理下载并直接返回音频,不会把上游 S3 URL 暴露给客户端。

UnrealSpeech 扩展字段:

字段 类型 默认值 说明
Bitrate / bitrate string 192k 可选值:16k、32k、48k、64k、128k、192k、256k、320k。
Speed / speed float 0 UnrealSpeech 原生语速,范围 -1 到 1;负数更慢,正数更快。
Pitch / pitch float 1 音高倍率,范围 0.5 到 1.5。
TimestampType / timestamptype string sentence word 或 sentence;仅 speech 和异步任务使用。
Codec / codec string libmp3lame stream 模式可使用 libmp3lame、pcm_s16le 或 pcm_mulaw。
Temperature / temperature float 0.25 stream 模式范围 0.1 到 0.8。

官方首字母大写字段和对应全小写字段会自动转换为同一内部请求。也可以继续使用 OpenAI 字段 input 和 voice。

常用 UnrealSpeech 音色包括:

  • 中文女声:Mei、Lian、Ting、Jing
  • 中文男声:Wei、Jian、Hao、Sheng
  • 英文女声:Autumn、Melody、Hannah、Emily、Ivy、Kaitlyn、Luna、Willow、Lauren、Sierra
  • 英文男声:Noah、Jasper、Caleb、Ronan、Ethan、Daniel、Zane
终端窗口
curl https://ai.j1ao.vip/v1/audio/speech \
-H "Authorization: Bearer sk-your-rex-key" \
-H "Content-Type: application/json" \
-d '{
"model": "unreal-speech-v8",
"Text": "你好,这是 UnrealSpeech 的同步语音接口。",
"VoiceId": "Mei",
"Bitrate": "192k",
"Speed": 0,
"Pitch": 1,
"speech": true,
"response_format": "mp3"
}' \
--output speech.mp3

长文本使用异步任务接口,单次最多 500,000 字符:

POST /v1/audio/speech/tasks
GET /v1/audio/speech/tasks/{task_id}
GET /v1/audio/speech/tasks/{task_id}/content

提交请求使用与 UnrealSpeech 同步模式相同的 JSON 字段,但固定走异步任务,不需要设置 stream 或 speech。

终端窗口
curl https://ai.j1ao.vip/v1/audio/speech/tasks \
-H "Authorization: Bearer sk-your-rex-key" \
-H "Content-Type: application/json" \
-d '{
"model": "unreal-speech-v8",
"text": "需要异步合成的长文本。",
"voiceid": "Mei",
"bitrate": "192k",
"speed": 0,
"pitch": 1,
"timestamptype": "word"
}'

提交响应示例:

{
"id": "task_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"object": "audio.speech",
"created_at": 1784120000,
"status": "queued",
"model": "unreal-speech-v8",
"progress": 0
}

轮询响应的 status 为 queued、in_progress、completed 或 failed。完成后响应包含网关内容地址:

{
"id": "task_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"object": "audio.speech",
"created_at": 1784120000,
"status": "completed",
"model": "unreal-speech-v8",
"progress": 100,
"content_url": "https://ai.j1ao.vip/v1/audio/speech/tasks/task_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/content",
"timestamps_url": "https://ai.j1ao.vip/v1/audio/speech/tasks/task_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/timestamps"
}

timestamps_url 仅在上游任务返回时间戳结果时出现。它返回 JSON 时间戳数据,而不是 SRT/VTT 文件;粒度由提交请求的 TimestampType / timestamptype(word 或 sentence)决定。网关不会公开上游临时 S3 地址。

下载音频:

终端窗口
curl https://ai.j1ao.vip/v1/audio/speech/tasks/task_xxx/content \
-H "Authorization: Bearer sk-your-rex-key" \
--output speech.mp3

下载时间戳:

终端窗口
curl https://ai.j1ao.vip/v1/audio/speech/tasks/task_xxx/timestamps \
-H "Authorization: Bearer sk-your-rex-key" \
--output timestamps.json

网页 Playground 也提供 speech、stream 和 async 三种模式。输入超过 1,000 个 Unicode 字符时会禁用 stream;超过 5,000 个字符时会自动切换到 async 并禁用两个同步模式。异步生成期间会显示任务进度,完成后可直接播放或下载代理后的音频。

UnrealSpeech WebSocket 路由透明代理上游帧:

wss://ai.j1ao.vip/v1/audio/speech/websocket?model=unreal-speech-v8

连接握手使用 Authorization: Bearer sk-your-rex-key。连接后发送一帧 UnrealSpeech JSON payload:

{
"Text": "你好。",
"VoiceId": "Mei",
"Bitrate": "192k",
"Speed": 0,
"Pitch": 1
}

服务端会依次转发:

  1. 二进制音频帧;
  2. {"type":"progress", ...} 文本帧,包含逐词时间戳;
  3. {"type":"complete", ...} 文本帧,然后正常关闭连接。

该路由不会把 WebSocket 帧转换为 SSE;客户端需要同时处理二进制帧和 JSON 文本帧。

  • UnrealSpeech 按输入字符计费:每个 Unicode 字符按 1 个输入 token 进入现有按量计费流程。
  • 同步 speech、同步 stream、异步任务和 WebSocket 均按请求文本字符数计费。
  • UnrealSpeech 的 speed 使用 -1 到 1 的原生值,不是 Azure TTS 的倍率语义。
  • response_format=pcm 仅适用于 UnrealSpeech stream 模式。
  • 如果请求失败,服务端可能返回 JSON 错误信息;请检查 HTTP 状态码,不要直接把错误响应当作音频播放。
  • 鉴权、限流和服务端错误的处理方式见错误码。