接口概述

Index-TTS2 同步语音合成 API 是一款支持文件上传的语音合成接口,用户可通过上传说话人音色参考音频与情感参考音频,生成具备特定情感基调与专属音色的语音内容。该接口支持流式输出,可满足实时语音合成需求;同时,考虑到网站用户量大、接口调用频次高可能导致的调用失败问题,我们已新增其他算力接口作为补充,保障接口调用的稳定性与流畅性。
如需要在线使用Index-TTS2 语音合成,请访问Index-TTS2在线语音合成,可选模式1进行体验!

Index-TTS2 同步语音合成 API 接口文档 1

接口信息

  • 接口地址: https://www.yuntts.com/api/v1/indextts2_infer
  • 请求方法: POST
  • 认证方式: Authorization: Bearer <API_KEY>
  • Content-Type: multipart/form-data

请求参数

参数名 类型 必填 默认值 描述
input string - 要合成的文本
response_format string wav 输出格式,支持 wav、mp3、ogg、flac
speed float 1.0 语速,范围 0.1-4.0
sample_rate int 24000 目标音频采样率,支持 16000、22050、24000
gain float 1.0 音量,范围 0.1-10.0
interval_silence int 200 句子间隔静音 (ms)
max_text_tokens_per_sentence int 120 单句最大Token数
emo_random boolean false 启用情绪随机性
stream_mode boolean true 启用流式输出
emo_control_method int 0 情绪控制方式:0=无情感参考,1=基于情绪音频,2=基于情绪向量,3=基于情绪文本
emo_weight float - 情感权重,范围 0.0-1.0,仅在 emo_control_method 不为 0 时有效
emo_vec array - 情绪向量,8个维度:[高兴,生气,悲伤,害怕,厌恶,忧郁,惊讶,平静],每个维度范围 0-1.2,总和不超过1.5,仅在 emo_control_method=2 时有效
emo_text string - 情感文本,仅在 emo_control_method=3 时有效
spk_audio_file file - 说话人音色参考音频,支持 wav、mp3 格式,最大 20MB
emo_audio_file file - 情感参考音频,支持 wav、mp3 格式,最大 10MB,仅在 emo_control_method=1 时必填

情绪向量维度说明

情绪向量包含 8 个维度,顺序如下:

  1. 高兴 - 表示愉快、快乐的情绪
  2. 生气 - 表示愤怒、恼火的情绪
  3. 悲伤 - 表示难过、悲伤的情绪
  4. 害怕 - 表示恐惧、害怕的情绪
  5. 厌恶 - 表示讨厌、厌恶的情绪
  6. 忧郁 - 表示忧郁、消沉的情绪
  7. 惊讶 - 表示惊讶、震惊的情绪
  8. 平静 - 表示平静、安宁的情绪

每个维度的值范围为 [0, 1.2],且所有维度的值相加不能大于 1.5。

请求示例

使用 cURL 发送请求

案例1:无情感参考 (emo_control_method=0)

curl -X POST "https://www.yuntts.com/api/v1/indextts2_infer" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "input=你好,欢迎使用 Index-TTS2 语音合成服务" \
  -F "response_format=mp3" \
  -F "speed=1.0" \
  -F "emo_control_method=0" \
  -F "spk_audio_file=@speaker.wav"

案例2:基于情绪音频 (emo_control_method=1)

curl -X POST "https://www.yuntts.com/api/v1/indextts2_infer" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "input=你好,欢迎使用 Index-TTS2 语音合成服务" \
  -F "response_format=mp3" \
  -F "speed=1.0" \
  -F "emo_control_method=1" \
  -F "emo_weight=0.6" \
  -F "spk_audio_file=@speaker.wav" \
  -F "emo_audio_file=@emotion.wav"

案例3:基于情绪向量 (emo_control_method=2)

curl -X POST "https://www.yuntts.com/api/v1/indextts2_infer" 
  -H "Authorization: Bearer YOUR_API_KEY" 
  -F "input=你好,欢迎使用 Index-TTS2 语音合成服务" 
  -F "response_format=mp3" 
  -F "speed=1.0" 
  -F "emo_control_method=2" 
  -F "emo_vec=[0.8, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.2]" 
  -F "emo_weight=0.6" 
  -F "spk_audio_file=@speaker.wav"

案例4:基于情绪文本 (emo_control_method=3)

curl -X POST "https://www.yuntts.com/api/v1/indextts2_infer" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "input=你好,欢迎使用 Index-TTS2 语音合成服务" \
  -F "response_format=mp3" \
  -F "speed=1.0" \
  -F "emo_control_method=2" \
  -F "emo_vec=[0.8, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.2]" \
  -F "emo_weight=0.6" \
  -F "spk_audio_file=@speaker.wav"

使用 JavaScript 发送请求

// 构建表单数据
const formData = new FormData();
formData.append('input', '你好,欢迎使用 Index-TTS2 语音合成服务');
formData.append('response_format', 'mp3');
formData.append('speed', '1.0');
formData.append('emo_control_method', '2');
formData.append('emo_vec', JSON.stringify([0.8, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.2]));
formData.append('emo_weight', '0.6');
formData.append('spk_audio_file', spkAudioFile); // spkAudioFile 是从文件输入获取的文件对象

// 发送请求
const response = await fetch('https://www.yuntts.com/api/v1/indextts2_infer', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY'
  },
  body: formData
});

// 解析响应
const data = await response.json();
if (response.ok) {
  console.log('合成成功:', data);
  console.log('音频URL:', data.data.audio_url);
} else {
  console.error('合成失败:', data.message);
}

使用 Python 发送请求 (基于情绪文本)

import requests

url = "https://www.yuntts.com/api/v1/indextts2_infer"
headers = {
    "Authorization": "Bearer YOUR_API_KEY"
}

# 准备表单数据
data = {
    "input": "你好,欢迎使用 Index-TTS2 语音合成服务",
    "response_format": "mp3",
    "speed": "1.0",
    "emo_control_method": "3",
    "emo_text": "开心",
    "emo_weight": "0.6"
}

# 准备文件数据
files = {
    "spk_audio_file": open("speaker.wav", "rb")
}

# 发送请求
response = requests.post(url, headers=headers, data=data, files=files)

# 处理响应
if response.status_code == 200:
    result = response.json()
    print("合成成功!")
    print(f"音频URL: {result['data']['audio_url']}")
else:
    result = response.json()
    print(f"合成失败: {result['message']}")

# 关闭文件
files["spk_audio_file"].close()

响应格式

成功响应

流式输出: 启用后直接返回音频二进制数据,禁用后返回 JSON 响应

{
  "code": 200,
  "message": "合成成功!",
  "data": {
    "audio_url": "https://www.yuntts.com/wp-content/uploads/audio/processed/indextts_infer_5e8f9a_1678901234.mp3",
    "format": "mp3",
    "char_count": 15,
    "points_deducted": 0.01
  }
}

失败响应

{
  "code": 400,
  "message": "情绪向量无效:必须包含8个维度",
  "data": null
}

错误码说明

错误码 描述
401 未授权,API密钥无效或缺失
400 请求参数错误,如文本为空、情绪向量格式错误等
403 余额不足,无法完成合成
500 服务器内部错误,如API调用失败、文件保存失败等

注意事项

  1. API密钥:请妥善保管您的API密钥,不要在前端代码中暴露。
  2. 文件大小:说话人音色参考音频最大 20MB,情感参考音频最大 10MB。
  3. 文本长度:单次合成文本建议不超过 600 字符。
  4. 情绪向量:确保提供的情绪向量包含 8 个维度,且每个维度的值在有效范围内。
  5. 情感音频:当情绪控制方式为 1 时,必须提供情感参考音频。
  6. 流式输出:默认启用流式输出,可实时返回音频流。

计费说明

  • 计费单位:按合成文本的字符数计费
  • 计费规则:根据用户类型应用不同折扣
  • 最低扣费:0.01 元
  • 字符计算:汉字按 2 个字符计算,其他字符按 1 个字符计算

示例应用场景

  1. 个性化语音合成:上传说话人音色参考音频,生成具有个人特色的语音。
  2. 情感语音合成:通过情绪向量或情感参考音频,生成具有特定情感的语音。
  3. 多媒体内容制作:为视频、动画等多媒体内容生成配音。
  4. 智能助手:为智能助手添加个性化的语音回应。

联系我们

如果您在使用过程中遇到任何问题,请联系我们的技术支持团队:

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