Skip to content

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

通用字段:

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

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

Azure TTS ​

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

查看或下载完整 voice 清单

Azure 扩展字段:

字段类型说明
speedfloat倍率,1.0 表示 100%。
volumefloat音量倍率,1.0 表示 100%。
pitchnumber相对基准音高的 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.mp3

UnrealSpeech ​

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

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

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

UnrealSpeech 扩展字段:

字段类型默认值说明
Bitrate / bitratestring192k可选值:16k、32k、48k、64k、128k、192k、256k、320k。
Speed / speedfloat0UnrealSpeech 原生语速,范围 -1 到 1;负数更慢,正数更快。
Pitch / pitchfloat1音高倍率,范围 0.5 到 1.5。
TimestampType / timestamptypestringsentenceword 或 sentence;仅 speech 和异步任务使用。
Codec / codecstringlibmp3lamestream 模式可使用 libmp3lame、pcm_s16le 或 pcm_mulaw。
Temperature / temperaturefloat0.25stream 模式范围 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
}

服务端会依次转发:

  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 状态码,不要直接把错误响应当作音频播放。
  • 鉴权、限流和服务端错误的处理方式见错误码。

Powered by VitePress