# 迁移到 IndexTTS 2.5

从 IndexTTS 2 切换到 `IndexTTS-2.5`，需要更新语音生成流程。**旧版自定义音色需要手动迁移**。请用原始参考音频创建新音色，并在应用中替换原来的 `uspeech:` 音色 ID。

| 功能 | IndexTTS 2 | IndexTTS 2.5 |
| --- | --- | --- |
| 语音生成 | 请求直接返回音频 | 提交异步任务，查询状态后下载音频 |
| 参考音频 | 随请求上传 | 支持先上传为素材，后续通过素材 ID 引用 |
| 自定义音色 | 使用旧版音色 ID | 用上传的素材创建可复用音色，取得新的音色 ID |

**计费方式沿用 IndexTTS 2**。语音生成成功后按输入文本的字符数计费，标点和空白也计入字符数。生成的音频不另行计费。

## 1. 准备参考音频

找出需要迁移的自定义音色，准备每个音色的原始参考音频。原始音频遗失时，请重新准备一段参考音频。如果只使用预设音色，可在 IndexTTS 2.5 的音色列表中选择预设音色，直接从第 4 步开始。

以下示例使用有权访问目标项目的 ModelVerse API Key，请先将其设置为 `MODELVERSE_API_KEY`。

## 2. 上传参考音频素材

IndexTTS 2.5 新增独立的参考素材上传功能。调用 `POST /v1/files` 上传音频，保存响应中的 `id`，作为后续使用的 `asset_id`。示例假设 `speaker.wav` 长 5 秒，请按实际文件填写时长。

```bash
curl https://api.modelverse.cn/v1/files \
  -H "Authorization: Bearer $MODELVERSE_API_KEY" \
  -F 'purpose=tts:speech_reference:IndexTTS-2.5' \
  -F 'duration_ms=5000' \
  -F 'file=@speaker.wav'
```

上传后的素材可用于创建可复用音色，也可直接引用来生成语音。只想试听参考音频时，可以跳过第 3 步，在提交任务时选择素材作为音色来源。

## 3. 用素材创建新音色

将上一步取得的素材 ID 填入 `<ASSET_ID>`，通过 `POST /v1/audio/voice/upload` 创建音色。

```bash
curl https://api.modelverse.cn/v1/audio/voice/upload \
  -H "Authorization: Bearer $MODELVERSE_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"model":"IndexTTS-2.5","name":"客服女声","asset_id":"<ASSET_ID>"}'
```

响应中的 `id` 是新的 `voice_id`。每创建一个音色，就记录旧音色 ID 和新音色 ID 的对应关系，方便切换应用配置。也可通过 IndexTTS 2.5 的音色列表确认创建结果。

## 4. 提交任务并获取音频

使用新音色试听时，将 `<VOICE_ID>` 替换为第 3 步取得的音色 ID，再提交生成任务。使用预设音色或直接使用素材时，请参考 API 文档中的音色来源说明。

```bash
curl https://api.modelverse.cn/v1/tasks/submit \
  -H "Authorization: Bearer $MODELVERSE_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
    "model":"IndexTTS-2.5",
    "input":{"text":"你好，欢迎使用语音合成。"},
    "parameters":{"voice":{"source":"custom","voice_id":"<VOICE_ID>"}}
  }'
```

提交成功后，保存响应中的 `output.task_id`。用该 ID 查询任务，状态为 `Success` 后，从 `output.urls` 返回的链接下载音频。

```bash
curl 'https://api.modelverse.cn/v1/tasks/status?task_id=<TASK_ID>' \
  -H "Authorization: Bearer $MODELVERSE_API_KEY"
```
