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/speechAuthorization: Bearer sk-your-rex-keyContent-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
Section titled “Azure TTS”azure-tts 支持完整的 Edge TTS / Azure TTS 音色名称。完整清单共 322 个音色:
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.mp3UnrealSpeech
Section titled “UnrealSpeech”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/tasksGET /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 并禁用两个同步模式。异步生成期间会显示任务进度,完成后可直接播放或下载代理后的音频。
WebSocket 分块输出
Section titled “WebSocket 分块输出”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}服务端会依次转发:
- 二进制音频帧;
{"type":"progress", ...}文本帧,包含逐词时间戳;{"type":"complete", ...}文本帧,然后正常关闭连接。
该路由不会把 WebSocket 帧转换为 SSE;客户端需要同时处理二进制帧和 JSON 文本帧。
计费与注意事项
Section titled “计费与注意事项”- UnrealSpeech 按输入字符计费:每个 Unicode 字符按 1 个输入 token 进入现有按量计费流程。
- 同步
speech、同步stream、异步任务和 WebSocket 均按请求文本字符数计费。 - UnrealSpeech 的
speed使用-1到1的原生值,不是 Azure TTS 的倍率语义。 response_format=pcm仅适用于 UnrealSpeechstream模式。- 如果请求失败,服务端可能返回 JSON 错误信息;请检查 HTTP 状态码,不要直接把错误响应当作音频播放。
- 鉴权、限流和服务端错误的处理方式见错误码。

