本文详细介绍语音合成模型 IndexTeam/IndexTTS-2 的 API 调用方法,包括两类核心接口的输入输出参数、请求示例、响应格式、注意事项及常见问题,供接口调用时查阅字段含义及使用规范。
1. 认证方式
所有接口均采用 API Key 认证,需在请求头中携带 Authorization 字段,格式如下:
Authorization: Bearer $MODELVERSE_API_KEY
说明:将 $MODELVERSE\_API\_KEY 替换为您实际的 API Key,即可完成身份认证,获取接口调用权限。
2. 核心接口一:/v1/audio/infer
该接口用于通过参考音频提取音色、情感特征,结合配置参数完成语音合成,请求体格式必须为 multipart/form\-data(表单模式)。
2.1 接口地址
https://api.modelverse.cn/v1/audio/infer
2.2 请求参数(Form Data 表单文件参数)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| model | string | 是 | 要使用的 TTS 模型名称,固定填写:IndexTeam/IndexTTS-2 |
| spk_audio_file | 文件(二进制) | 是 | 说话人参考音频文件,用于提取音色特征;仅支持 MP3、WAV 格式,文件大小小于 20MB |
| emo_audio_file | 文件(二进制) | 否 | 情感参考音频文件,用于提取语音的情感特征;仅支持 MP3、WAV 格式,文件大小小于 20MB |
| payload | string | 是 | JSON 格式的配置参数字符串,具体配置项见下文 2.3 |
2.3 payload 配置参数(JSON 格式)
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| input | string | 是 | - | 需要合成的文本内容,最大支持 600 字符 |
| sample_rate | int | 否 | 22050 | 输出音频采样率,单位为 Hz;常见值:22050、44100、48000 |
| speed | float | 否 | 1 | 语速调整系数,接口限制范围:0.25 ≤ 值 ≤ 4.0 |
| gain | float | 否 | 1 | 音量调整系数,1 为原始音量,>1 表示增大,<1 表示减小 |
| emo_control_method | int | 否 | 0 | 情感控制方式:0 = 无情感参考;1 = 情感音频参考(需同时传 emo_audio_file);2 = 情感向量参考;3 = 情感文本参考 |
| emo_alpha | float | 否 | 1 | 情感融合权重,用于控制情感特征对输出结果的影响程度 |
| emo_vec | array[float] | 否 | [0, 0, 0, 0, 0, 0, 0, 0] | 8 维情感向量,仅在 emo_control_method = 2 时生效;所有元素之和不能超过 1.5;示例:[0.1, 0.2, 0.0, 0.3, 0.1, 0.0, 0.2, 0.4] |
| emo_text | string | 否 | "" | 情感文本描述,仅在 emo_control_method = 3 时生效;示例:"今天股票涨停了,好激动" |
| use_random | bool | 否 | false | 情感随机性开关;true 表示随机引入情感变化,false 表示严格按指定情感合成 |
| interval_silence | int | 否 | 200 | 文本分块合成时间隔静音时长,单位为毫秒 |
2.4 请求示例(curl)
如果您使用 Windows 系统,建议使用 Postman 或其他 API 调用工具,避免命令行调用出现兼容问题。
curl https://api.modelverse.cn/v1/audio/infer \
-H "Authorization: Bearer $MODELVERSE_API_KEY" \
-H "Content-Type: multipart/form-data" \
-F "model=IndexTeam/IndexTTS-2" \
-F "spk_audio_file=@audio/klee.wav" \
-F "emo_audio_file=@audio/emo_sad.wav" \
-F "payload={
\"input\": \"酒楼丧尽天良,开始借机竞拍房间,哎,一群蠢货。\",
\"emo_weight\": 0.8,
\"emo_control_method\": 1
}" \
--output 007_sad_08.wav
2.5 响应格式
API 返回二进制音频文件流,具体说明如下:
-
音频格式:目前仅支持 WAV 格式输出
-
Content-Type:audio/wav
2.6 错误响应
当请求失败时,API 会返回标准的 JSON 格式错误响应:
{
"error": {
"message": "错误描述信息",
"type": "invalid_request_error",
"code": "error_code",
"param": "<请求 ID,用于反馈或排查错误原因>"
}
}
3. 核心接口二:/v1/audio/speech(兼容接口)
该接口为兼容接口,支持通过内置音色或自定义音色完成语音合成,请求体格式为 JSON。
3.1 接口地址
https://api.modelverse.cn/v1/audio/speech
3.2 请求参数(JSON 格式)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| model | string | 是 | 要使用的 TTS 模型名称,例如:IndexTeam/IndexTTS-2 |
| input | string | 是 | 要转换为语音的文本内容,最大支持 600 字符 |
| voice | string | 是 | 使用的音色,可选值:1. 内置音色:jack_cheng, sales_voice, crystla_liu, stephen_chow, xiaoyueyue, mkas, entertain, novel, movie2. 自定义音色 ID:形如 uspeech:xxxx(详见 4. 使用自定义音色) |
3.3 调用示例
以下示例展示如何使用 IndexTeam/IndexTTS-2 模型进行语音合成,请确保将 $MODELVERSE_API_KEY 替换为您自己的 API Key。
3.3.1 curl 示例(使用内置音色)
curl https://api.modelverse.cn/v1/audio/speech \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $MODELVERSE_API_KEY" \
-d '{
"model": "IndexTeam/IndexTTS-2",
"input": "你好!欢迎使用 Modelverse 语音合成服务。",
"voice": "jack_cheng"
}' \
--output speech.wav
4. 使用自定义音色(可选)
除使用内置音色外,您可上传自己的音色(含特定情绪的样例语音),生成专属 voice_id,在 TTS 请求中通过 voice 字段引用。
注意:当前自定义音色资源会在上传 7 天后自动清理,如需长期使用请注意提前备份或重新上传;可联系商务团队咨询长期保存需求。
4.1 自定义音色使用步骤
-
上传音色,获取 voice_id:调用 POST /v1/audio/voice/upload 上传符合要求的示例语音,接口会返回一个 id 作为自定义音色 ID;详细请求参数与返回结构请参考《自定义音色管理 API 文档》。
-
在 TTS 请求中使用 voice_id:在 /v1/audio/speech 请求中,将 voice 字段设置为步骤一返回的 id 即可(示例见 4.2)。
-
管理已有的自定义音色(可选):如需查看或删除已有音色,可调用 GET /v1/audio/voice/list 和 POST /v1/audio/voice/delete;具体请求/返回格式见《自定义音色管理 API 文档》。
提示:自定义音色完全兼容 OpenAI 协议,仅复用 voice 字段,无需学习新的参数名。
4.2 自定义 voice_id 调用示例(curl)
VOICE_ID="uspeech:xxxx-xxxx-xxxx-xxxx"
curl https://api.modelverse.cn/v1/audio/speech \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $MODELVERSE_API_KEY" \
-d "{
\"model\": \"IndexTeam/IndexTTS-2\",
\"input\": \"你好,我是自定义的温柔女声。\",
\"voice\": \"$VOICE_ID\"
}" \
--output speech-custom.wav
4.3 voice 字段行为说明
-
voice 为空:使用默认音色或模型自带的默认配置。
-
voice 为内置名称(如 jack_cheng 等):使用平台内置的预置音色。
-
voice 为形如 uspeech:xxxx 的值:使用您上传的自定义音色,平台会根据该 ID 查找并应用对应的音色/情绪素材,无需额外配置。
4.4 响应格式
与 /v1/audio/infer 接口一致,API 返回二进制音频文件流:
-
音频格式:目前仅支持 WAV 格式输出
-
Content-Type:audio/wav
4.5 错误处理
当请求失败时,API 会返回标准的 JSON 格式错误响应,与 /v1/audio/infer 接口错误响应格式一致:
{
"error": {
"message": "错误描述信息",
"type": "invalid_request_error",
"code": "error_code",
"param": "<请求 ID,用于反馈或排查错误原因>"
}
}
5. 注意事项
-
音频格式:所有接口响应的二进制流格式目前仅支持 WAV,暂不支持其他音频格式。
-
文本长度限制:单次请求的文本长度限制为 600 字符以内(IndexTeam/IndexTTS-2 模型)。
-
语音类型:不同的 voice 参数会产生不同音色和风格的语音效果,建议根据实际场景选择合适的语音类型。
-
参考音频要求:spk_audio_file 和 emo_audio_file 仅支持 MP3、WAV 格式,单个文件 ≤ 20MB,时长 5–30 秒,采样率至少 16kHz,不符合要求会返回 4xx 错误。
6. 常见问题(FAQ)
Q:我上传的音频有什么要求?
A:必须是 MP3/WAV 格式,单个文件 ≤ 20MB,时长 5–30 秒,采样率至少 16kHz,不符合要求会返回 4xx 错误,并在 error.code 中标明原因。
Q:voice 字段应该填什么?
A: 1. 想直接用平台提供的固定音色:填写内置名称(如 jack_cheng); 2. 想用自己录制的音色:先调用上传接口拿到 id,然后在 TTS 请求中把 voice 设置为这个 id(例如 uspeech:xxxx)。
Q:出现 invalid_voice_id / voice_not_found 等错误怎么办?
A:说明当前账号下找不到这个 voice_id,或者已被删除。可以先调用 /v1/audio/voice/list 确认当前可用的 ID,再在请求里使用正确的值。
Q:不同账号之间能共享自定义音色吗?
A:同一组织下所有子账号,自定义音色可以共享。非同一账号下,无法共享。