前言说明
随着Index-TTS2在线语音合成专业版用户规模持续爆发式增长,平台原有算力资源长期处于高负载运行状态,高峰期频繁出现算力不足、合成请求排队、接口响应延迟、大批量文本合成超时等问题,极大影响了开发者批量调用、商业配音、自动化语音播报等场景的使用体验。
为突破算力限制、提升语音合成效率与服务稳定性,接口搭载 RTX5090 32G 强劲算力,基于Index-TTS2官方原生模型,支持专业音色克隆与精细情感调节,零门槛一键生成自然逼真AI语音,Index-TTS2臻享版专属API正式上线。
臻享版API在完整兼容专业版全部核心能力的基础上,依托全新独享GPU算力资源,大幅提升接口并发承载能力、文本合成速度与音频输出质量,有效杜绝高峰期排队、卡顿、超时等问题,完美适配长文本批量合成、高频次接口调用、高清音色克隆、精细化情感配音、中英文混合语音生成等各类商业及开发场景。
本接口文档将详细说明臻享版API的调用规则、参数配置、功能权限及使用规范,助力开发者快速接入、高效使用高性能AI语音合成服务,为各类语音创作、智能配音、程序开发场景提供稳定、优质的技术支撑。
接口概览
| 接口 | URL | 方法 |
|---|---|---|
| 异步提交 | https://www.yuntts.com/api/v1/indextts-flagship-submit |
POST |
| 状态查询 | https://www.yuntts.com/api/v1/indextts-flagship-status |
POST |
请求头
| Header | 值 | 必填 | 说明 |
|---|---|---|---|
Authorization |
Bearer YOUR_API_KEY |
✅ | API 密钥认证 |
Content-Type |
application/json |
✅ | 请求体格式 |
一、异步提交接口
请求 URL
POST https://www.yuntts.com/api/v1/indextts-flagship-submit
请求参数
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
text |
string | ✅ | — | 要合成的文本,最大 2048 个字符 |
speaker_audio_url |
string | ✅ | — | 音色参考音频 URL,推荐 15 秒以内 |
emotion_audio_url |
string | ❌ | — | 情感参考音频 URL,推荐 15 秒以内 |
emotion_alpha |
float | ❌ | 0.5 | 情感影响因子,范围 0~1 |
emotion_vector |
array[float] | ❌ | — | 8 维情感向量 |
use_emotion_text |
boolean | ❌ | false | 是否从文本提取情感 |
emotion_text |
string | ❌ | — | 用于情感提取的文本 |
四种调用模式
模式 1:基本 TTS(仅音色克隆)
无情感控制,仅使用音色参考音频。
{
"text": "欢迎使用语音合成服务",
"speaker_audio_url": "https://example.com/voice.mp3"
}
模式 2:情感参考音频
从音频中提取情感特征,emotion_alpha 控制情感强度。
emotion_alpha = 0:无情感影响emotion_alpha = 0.5:中等情感影响(默认)emotion_alpha = 1:完全跟随情感音频
{
"text": "欢迎使用语音合成服务",
"speaker_audio_url": "https://example.com/voice.mp3",
"emotion_audio_url": "https://example.com/emotion.wav",
"emotion_alpha": 0.6
}
模式 3:情感参考文本
从文本中提取情感特征,系统分析文本的情感倾向并应用到合成语音。
{
"text": "欢迎使用语音合成服务",
"speaker_audio_url": "https://example.com/voice.mp3",
"use_emotion_text": true,
"emotion_text": "哈哈哈哈,今天是个好日子啊"
}
模式 4:情感向量
直接指定 8 维情感向量,精确控制每个情感维度的强度。
情感向量维度顺序:[高兴, 愤怒, 悲伤, 害怕, 厌恶, 忧郁, 惊讶, 平静]
每个值范围 0~1,所有值之和建议接近 1。
| 维度 | 索引 | 说明 |
|---|---|---|
| 高兴 | [0] | 开心、愉悦 |
| 愤怒 | [1] | 生气、愤怒 |
| 悲伤 | [2] | 难过、悲伤 |
| 害怕 | [3] | 恐惧、害怕 |
| 厌恶 | [4] | 厌烦、恶心 |
| 忧郁 | [5] | 忧愁、低落 |
| 惊讶 | [6] | 惊奇、意外 |
| 平静 | [7] | 平和、淡定 |
{
"text": "欢迎使用语音合成服务",
"speaker_audio_url": "https://example.com/voice.mp3",
"emotion_vector": [0.95, 0, 0, 0, 0, 0, 0.03, 0.02]
}
成功响应
{
"code": 200,
"message": "任务提交成功",
"data": {
"task_id": "3b00652e-eff5-467a-b7f1-c3b9922ab359",
"char_count": 120,
"cost": 0.0126,
"status": "submitted",
"message": "任务提交成功"
}
}
错误响应
{
"code": 400,
"error": "text_too_long",
"message": "文本长度不能超过2048个字符"
}
| 错误码 | HTTP 状态码 | 说明 |
|---|---|---|
empty_text |
400 | 文本为空 |
missing_speaker_audio |
400 | 缺少音色参考音频 |
invalid_url |
400 | 无效的音频 URL |
text_too_long |
400 | 文本超长 |
insufficient_balance |
402 | 余额不足 |
api_error |
500 | API 提交失败 |
二、状态查询接口
请求 URL
POST https://www.yuntts.com/api/v1/indextts-flagship-status
请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
task_id |
string | ✅ | 提交任务时返回的 task_id |
{
"task_id": "3b00652e-eff5-467a-b7f1-c3b9922ab359"
}
响应
合成成功
{
"code": 200,
"message": "语音合成成功",
"data": {
"task_id": "3b00652e-eff5-467a-b7f1-c3b9922ab359",
"status": "completed",
"audio_url": "https://www.yuntts.com/wp-content/uploads/indextts302/xxx.wav",
"message": "语音合成成功"
}
}
处理中
{
"code": 200,
"message": "任务正在处理中",
"data": {
"task_id": "3b00652e-eff5-467a-b7f1-c3b9922ab359",
"status": "processing",
"state": "STARTED",
"message": "任务正在处理中"
}
}
合成失败
{
"code": 500,
"error": "task_failed",
"message": "语音合成失败"
}
状态说明
| status | 说明 | 处理方式 |
|---|---|---|
submitted |
已提交 | 开始轮询 |
processing |
处理中 | 继续轮询 |
completed |
合成完成 | 停止轮询,下载音频 |
failed |
合成失败 | 停止轮询,自动退款 |
三、调用流程
1. 调用 indextts-flagship-submit 提交任务
↓
2. 获取 task_id
↓
3. 每隔 2~3 秒调用 indextts-flagship-status 查询状态
↓
4. status = "processing" → 继续轮询
status = "completed" → 获取 audio_url 下载音频
status = "failed" → 任务失败
建议轮询策略
| 参数 | 值 |
|---|---|
| 轮询间隔 | 2~3 秒 |
| 最大轮询次数 | 300 次(约 10 分钟) |
| 网络错误重试 | 最多 3 次 |
四、计费说明
| 项目 | 说明 |
|---|---|
| 计费方式 | 按字符数预扣费 |
| 计费规则 | 汉字算 2 字符,其他算 1 字符 |
| 单价 | ¥150 / 百万 Tokens |
| 最低扣费 | ¥0.001 |
| 文本上限 | 2048 个字符 |
| 任务失败 | 自动退款 |
五、完整调用示例
cURL
# 提交任务
curl -X POST https://www.yuntts.com/api/v1/indextts-flagship-submit
-H "Authorization: Bearer YOUR_API_KEY"
-H "Content-Type: application/json"
-d '{
"text": "欢迎使用语音合成服务",
"speaker_audio_url": "https://example.com/voice.mp3"
}'
# 查询状态
curl -X POST https://www.yuntts.com/api/v1/indextts-flagship-status
-H "Authorization: Bearer YOUR_API_KEY"
-H "Content-Type: application/json"
-d '{
"task_id": "3b00652e-eff5-467a-b7f1-c3b9922ab359"
}'
Python
import requests
import time
API_BASE = "https://www.yuntts.com/api/v1"
HEADERS = {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
}
def submit_task(text, speaker_audio_url, **kwargs):
payload = {
"text": text,
"speaker_audio_url": speaker_audio_url,
**kwargs
}
resp = requests.post(f"{API_BASE}/indextts-flagship-submit", json=payload, headers=HEADERS)
result = resp.json()
if result.get("code") == 200:
return result["data"]["task_id"]
else:
raise Exception(result.get("message", "提交失败"))
def wait_for_result(task_id, max_retries=300, interval=2):
for i in range(max_retries):
resp = requests.post(
f"{API_BASE}/indextts-flagship-status",
json={"task_id": task_id},
headers=HEADERS
)
result = resp.json()
status = result.get("data", {}).get("status")
if status == "completed":
return result["data"]["audio_url"]
elif status == "failed":
raise Exception(result.get("message", "合成失败"))
time.sleep(interval)
raise Exception("轮询超时")
# 基本TTS
task_id = submit_task("欢迎使用语音合成服务", "https://example.com/voice.mp3")
audio_url = wait_for_result(task_id)
print(f"音频下载链接: {audio_url}")
# 情感参考音频
task_id = submit_task(
"欢迎使用语音合成服务",
"https://example.com/voice.mp3",
emotion_audio_url="https://example.com/emotion.wav",
emotion_alpha=0.6
)
# 情感参考文本
task_id = submit_task(
"欢迎使用语音合成服务",
"https://example.com/voice.mp3",
use_emotion_text=True,
emotion_text="哈哈哈哈,今天是个好日子啊"
)
# 情感向量
task_id = submit_task(
"欢迎使用语音合成服务",
"https://example.com/voice.mp3",
emotion_vector=[0.95, 0, 0, 0, 0, 0, 0.03, 0.02]
)
JavaScript
const API_BASE = 'https://www.yuntts.com/api/v1';
const HEADERS = {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
};
async function submitTask(text, speakerAudioUrl, options = {}) {
const payload = { text, speaker_audio_url: speakerAudioUrl, ...options };
const resp = await fetch(`${API_BASE}/indextts-flagship-submit`, {
method: 'POST',
headers: HEADERS,
body: JSON.stringify(payload)
});
const result = await resp.json();
if (result.code === 200) return result.data.task_id;
throw new Error(result.message || '提交失败');
}
async function waitForResult(taskId, maxRetries = 300, interval = 2000) {
for (let i = 0; i < maxRetries; i++) {
const resp = await fetch(`${API_BASE}/indextts-flagship-status`, {
method: 'POST',
headers: HEADERS,
body: JSON.stringify({ task_id: taskId })
});
const result = await resp.json();
const status = result.data?.status;
if (status === 'completed') return result.data.audio_url;
if (status === 'failed') throw new Error(result.message || '合成失败');
await new Promise(r => setTimeout(r, interval));
}
throw new Error('轮询超时');
}
// 使用示例
const taskId = await submitTask('欢迎使用语音合成服务', 'https://example.com/voice.mp3');
const audioUrl = await waitForResult(taskId);
console.log('音频下载链接:', audioUrl);
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

评论(0)