前言说明

随着Index-TTS2在线语音合成专业版用户规模持续爆发式增长,平台原有算力资源长期处于高负载运行状态,高峰期频繁出现算力不足、合成请求排队、接口响应延迟、大批量文本合成超时等问题,极大影响了开发者批量调用、商业配音、自动化语音播报等场景的使用体验。

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);
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。