接口概述
Index-TTS2 同步语音合成 API 是一款支持文件上传的语音合成接口,用户可通过上传说话人音色参考音频与情感参考音频,生成具备特定情感基调与专属音色的语音内容。该接口支持流式输出,可满足实时语音合成需求;同时,考虑到网站用户量大、接口调用频次高可能导致的调用失败问题,我们已新增其他算力接口作为补充,保障接口调用的稳定性与流畅性。
如需要在线使用Index-TTS2 语音合成,请访问Index-TTS2在线语音合成,可选模式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 个维度,顺序如下:
- 高兴 - 表示愉快、快乐的情绪
- 生气 - 表示愤怒、恼火的情绪
- 悲伤 - 表示难过、悲伤的情绪
- 害怕 - 表示恐惧、害怕的情绪
- 厌恶 - 表示讨厌、厌恶的情绪
- 忧郁 - 表示忧郁、消沉的情绪
- 惊讶 - 表示惊讶、震惊的情绪
- 平静 - 表示平静、安宁的情绪
每个维度的值范围为 [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调用失败、文件保存失败等 |
注意事项
- API密钥:请妥善保管您的API密钥,不要在前端代码中暴露。
- 文件大小:说话人音色参考音频最大 20MB,情感参考音频最大 10MB。
- 文本长度:单次合成文本建议不超过 600 字符。
- 情绪向量:确保提供的情绪向量包含 8 个维度,且每个维度的值在有效范围内。
- 情感音频:当情绪控制方式为 1 时,必须提供情感参考音频。
- 流式输出:默认启用流式输出,可实时返回音频流。
计费说明
- 计费单位:按合成文本的字符数计费
- 计费规则:根据用户类型应用不同折扣
- 最低扣费:0.01 元
- 字符计算:汉字按 2 个字符计算,其他字符按 1 个字符计算
示例应用场景
- 个性化语音合成:上传说话人音色参考音频,生成具有个人特色的语音。
- 情感语音合成:通过情绪向量或情感参考音频,生成具有特定情感的语音。
- 多媒体内容制作:为视频、动画等多媒体内容生成配音。
- 智能助手:为智能助手添加个性化的语音回应。
联系我们
如果您在使用过程中遇到任何问题,请联系我们的技术支持团队:
- 微信:yuntts
- 官网:https://www.yuntts.com
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。


评论(0)