Appearance
Speech API
Speech API 使用 OpenAI 兼容的文本转语音请求,并直接返回可播放的音频文件。当前支持 azure-tts、unreal-speech-v8 和 indextts-2;实际可用模型仍以 GET /v1/models 为准。IndexTTS2 使用参考音频 URL 克隆音色,其 WAV 输出、异步任务和情绪控制请见 IndexTTS2 API。下文其他模型的音色名、MP3 和语速参数不适用于 IndexTTS2。
同步生成
http
POST https://ai.furry.vg/v1/audio/speech
Authorization: Bearer sk-your-s3ai-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
azure-tts 支持完整的 Edge TTS / Azure TTS 音色名称。完整清单共 322 个音色:
Azure 扩展字段:
| 字段 | 类型 | 说明 |
|---|---|---|
speed | float | 倍率,1.0 表示 100%。 |
volume | float | 音量倍率,1.0 表示 100%。 |
pitch | number | 相对基准音高的 Hz 偏移量。 |
bash
curl https://ai.furry.vg/v1/audio/speech \
-H "Authorization: Bearer sk-your-s3ai-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
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
bash
curl https://ai.furry.vg/v1/audio/speech \
-H "Authorization: Bearer sk-your-s3ai-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 字符:
http
POST /v1/audio/speech/tasks
GET /v1/audio/speech/tasks/{task_id}
GET /v1/audio/speech/tasks/{task_id}/content提交请求使用与 UnrealSpeech 同步模式相同的 JSON 字段,但固定走异步任务,不需要设置 stream 或 speech。
bash
curl https://ai.furry.vg/v1/audio/speech/tasks \
-H "Authorization: Bearer sk-your-s3ai-key" \
-H "Content-Type: application/json" \
-d '{
"model": "unreal-speech-v8",
"text": "需要异步合成的长文本。",
"voiceid": "Mei",
"bitrate": "192k",
"speed": 0,
"pitch": 1,
"timestamptype": "word"
}'提交响应示例:
json
{
"id": "task_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"object": "audio.speech",
"created_at": 1784120000,
"status": "queued",
"model": "unreal-speech-v8",
"progress": 0
}轮询响应的 status 为 queued、in_progress、completed 或 failed。完成后响应包含网关内容地址:
json
{
"id": "task_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"object": "audio.speech",
"created_at": 1784120000,
"status": "completed",
"model": "unreal-speech-v8",
"progress": 100,
"content_url": "https://ai.furry.vg/v1/audio/speech/tasks/task_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/content",
"timestamps_url": "https://ai.furry.vg/v1/audio/speech/tasks/task_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/timestamps"
}timestamps_url 仅在上游任务返回时间戳结果时出现。它返回 JSON 时间戳数据,而不是 SRT/VTT 文件;粒度由提交请求的 TimestampType / timestamptype(word 或 sentence)决定。网关不会公开上游临时 S3 地址。
下载音频:
bash
curl https://ai.furry.vg/v1/audio/speech/tasks/task_xxx/content \
-H "Authorization: Bearer sk-your-s3ai-key" \
--output speech.mp3下载时间戳:
bash
curl https://ai.furry.vg/v1/audio/speech/tasks/task_xxx/timestamps \
-H "Authorization: Bearer sk-your-s3ai-key" \
--output timestamps.json网页 Playground 也提供 speech、stream 和 async 三种模式。输入超过 1,000 个 Unicode 字符时会禁用 stream;超过 5,000 个字符时会自动切换到 async 并禁用两个同步模式。异步生成期间会显示任务进度,完成后可直接播放或下载代理后的音频。
WebSocket 分块输出
UnrealSpeech WebSocket 路由透明代理上游帧:
text
wss://ai.furry.vg/v1/audio/speech/websocket?model=unreal-speech-v8连接握手使用 Authorization: Bearer sk-your-s3ai-key。连接后发送一帧 UnrealSpeech JSON payload:
json
{
"Text": "你好。",
"VoiceId": "Mei",
"Bitrate": "192k",
"Speed": 0,
"Pitch": 1
}服务端会依次转发:
- 二进制音频帧;
{"type":"progress", ...}文本帧,包含逐词时间戳;{"type":"complete", ...}文本帧,然后正常关闭连接。
该路由不会把 WebSocket 帧转换为 SSE;客户端需要同时处理二进制帧和 JSON 文本帧。
计费与注意事项
- UnrealSpeech 按输入字符计费:每个 Unicode 字符按 1 个输入 token 进入现有按量计费流程。
- 同步
speech、同步stream、异步任务和 WebSocket 均按请求文本字符数计费。 - UnrealSpeech 的
speed使用-1到1的原生值,不是 Azure TTS 的倍率语义。 response_format=pcm仅适用于 UnrealSpeechstream模式。- 如果请求失败,服务端可能返回 JSON 错误信息;请检查 HTTP 状态码,不要直接把错误响应当作音频播放。
- 鉴权、限流和服务端错误的处理方式见错误码。
