作者b站演示视频:
目录
一、GPT-SoVITS安装
GPT-SoVITS项目地址:GitHub - RVC-Boss/GPT-SoVITS: 1 min voice data can also be used to train a good TTS model! (few shot voice cloning)
GPT-SoVITS安装方法,可参考原项目readme文档:
GPT-SoVITS/docs/cn/README.md at main · RVC-Boss/GPT-SoVITS · GitHub
双击 go-webui.bat,或完成环境配置和依赖安装后,在终端中输入 python webui.py 即可启动项目。(Windows系统)
二、GPT-SoVITs本地化使用教程
1.前置数据集获取工具
WebUI界面如图所示(版本为beta0217fix2):
1.1 人声伴奏分离&去混响去延时工具
GPT-SoVITS集成UVR5工具,点击 方框1 中的 是否开启UVR5-WebUI 即可进入UVR5-WebUI界面(可能需要稍微等待一会)。若你的数据集非常干净,无BGM无混响无延迟,则可以略过本步骤,否则必须先预处理数据集。UVR5-WebUI界面如下:
在左边输入音频文件夹(不是音频文件本身)路径 或 拖拽音频文件,根据上方的描述选择合适的模型,补全两个输出文件夹路径,导出文件格式选择 wav 效果更好,点击转换后等待输出信息中出现success即可。若有任何报错,请返回终端中处理,所有的报错以终端中显示的内容为准。文件或文件夹路径直接复制Windows系统给出的路径即可。
完成输出后,关闭网页,返回WebUI界面中,取消勾选是否开启UVR5-WebUI,可释放部分内存。
1.2 语音切分工具
只需要补全两个路径,其它参数保持默认,点击 开启语音切割 即可。正常情况下速度会非常快。
1.3 语音降噪工具
同样,只需将语音切分的输出路径作为语音降噪的输入,再新建一个输出路径即可。补全两个路径后点击 开启语音降噪 ,通常GPU设备只需稍等片刻,CPU设备则需等待较长时间,降噪进度可以在终端中查看。
1.4 中文批量离线ASR工具
将语音降噪输出路径作为此处的输入路径,补全输出路径,其它保持默认,点击开启离线批量ASR即可,整体速度较快。这一步的目的是为每段音频自动添加字幕,并将所有音频的字幕和地址保存在一个.list文件中。
1.5 语音文本校对标注工具
先将刚刚生成的.list文件路径填入,点击 是否开启打标WebUI 后稍等片刻。
打开后界面如下:
在此界面下,你可以收听每一段音频并修改对应的文本。ASR自动生成字幕的文字通常都是正确的,但标点和断句可能与音频不符,可以手动修改一下。修改后需要点击左上角的 Submit Text 更新 .list 文件。右上角的 Previous Index 和 Next Index 可以实现向前和向后翻页的功能。若某个音频质量不佳,可勾选 Choose Audio 中的 Yes ,随后点击最上方的 Delete Audio 进行删除,则后续该音频不会出现在 .list 文件中,也不会参与训练。
完成校对后关闭本网页,同样返回WebUI界面取消勾选 是否开启打标WebUI,释放内存。
2. GPT-SoVITS-TTS
构建好前置数据集后,下面开始训练部分。
首先返回 WebUI 页面最上方,点击 1-GPT-SoVITS-TTS,进入训练部分。
2.1 1A-训练集格式化工具
打开后界面如下:
修改 实验/模型名(一定要改,每次训练都要改一次!),再把 .list 文件路径填入,直接点击最下方的 一键三连 即可自动完成所有格式化任务。
2.2 1B-微调训练
首先选择 1B-微调训练,其次根据自己设备情况修改 batch_size 和 总训练轮数,通常保持默认即可。若修改了训练轮数,则还需额外调整一下 保存频率 为训练轮数的因数,点击 开启SoVITS训练,耐心等待较长时间,可在终端中实时查看训练进度。
完成SoVITS训练后,以同样的方式调整GPT训练参数,点击 开启GPT训练 即可,且本训练速度较快。
2.3 1C-推理
进入 1C-推理界面,点击 刷新模型路径后,选择刚刚训练好的GPT模型和SoVITS模型,再勾选 是否开启TTS推理WebUI,稍等片刻后进入推理界面。
首先需要设置参考音频,直接拖入参考音频并填入参考音频的文本,选择参考音频的语种即可。 GPT-SoVITS 也提供 无参考文本模式(虚线框中勾选),但效果并不好,还是建议花几秒钟自己填上参考文本。参考文本的语速和情感将会影响需要合成的文本的语速和情感,因此也需要认真选择,而音色还是由选定的模型决定。
填入合成文本时,还需要选择合成的语种,其它参数可以默认,点击 合成语音 即可。若一次合成的文字过长,则 GPT-SoVITS 会出现吞字、重复、胡言乱语的情况,因此需要对文本进行切分。推理页面最下方提供切分工具,若还是觉得效果不好,可自行通过回车键进行切分,GPT-SoVITS会自动把每一段切分后的语音合并成一个完整的语言输出。
三、API调用GPT-SoVITS
b站教程地址:
- 首先打开 api.py 文件,在文件最上方写有运行api脚本时可以传入的参数。
"""
# api.py usage
` python api.py -dr "123.wav" -dt "一二三。" -dl "zh" `
## 执行参数:
`-s` - `SoVITS模型路径, 可在 config.py 中指定`
`-g` - `GPT模型路径, 可在 config.py 中指定`
调用请求缺少参考音频时使用
`-dr` - `默认参考音频路径`
`-dt` - `默认参考音频文本`
`-dl` - `默认参考音频语种, "中文","英文","日文","zh","en","ja"`
`-d` - `推理设备, "cuda","cpu"`
`-a` - `绑定地址, 默认"127.0.0.1"`
`-p` - `绑定端口, 默认9880, 可在 config.py 中指定`
`-fp` - `覆盖 config.py 使用全精度`
`-hp` - `覆盖 config.py 使用半精度`
`-sm` - `流式返回模式, 默认不启用, "close","c", "normal","n", "keepalive","k"`
·-mt` - `返回的音频编码格式, 流式默认ogg, 非流式默认wav, "wav", "ogg", "aac"`
·-cp` - `文本切分符号设定, 默认为空, 以",.,。"字符串的方式传入`
`-hb` - `cnhubert路径`
`-b` - `bert路径`
"""
- 在终端中运行 python api.py 或 runtime\python.exe api.py。可以在运行脚本时即传入执行参数,例如指定默认参考音频、默认参考文本等, 也可以直接运行,后序推理时再指定。
- 如图出现网址,即代表 api 接口已开启。随后再打开一个终端,输入 ipconfig,找到 无线局域网适配器 WLAN 项下的 IPv4地址。
- 用IPv4地址替换 api.py 脚本网址里的 0.0.0.0,则与你处于同一内网中的计算机都可以使用这个接口调用你电脑上的 GPT-SoVITS。例如此处:http://10.10.9.169:9880
- 若想查看 FastAPI 文档,可以在网址后加上 /docs
- post 与 get 的请求格式,详见 api.py 文档最上方的使用说明
"""
使用执行参数指定的参考音频:
GET:
`http://127.0.0.1:9880?text=先帝创业未半而中道崩殂,今天下三分,益州疲弊,此诚危急存亡之秋也。&text_language=zh`
POST:
```json
{
"text": "先帝创业未半而中道崩殂,今天下三分,益州疲弊,此诚危急存亡之秋也。",
"text_language": "zh"
}
```
使用执行参数指定的参考音频并设定分割符号:
GET:
`http://127.0.0.1:9880?text=先帝创业未半而中道崩殂,今天下三分,益州疲弊,此诚危急存亡之秋也。&text_language=zh&cut_punc=,。`
POST:
```json
{
"text": "先帝创业未半而中道崩殂,今天下三分,益州疲弊,此诚危急存亡之秋也。",
"text_language": "zh",
"cut_punc": ",。",
}
```
手动指定当次推理所使用的参考音频:
GET:
`http://127.0.0.1:9880?refer_wav_path=123.wav&prompt_text=一二三。&prompt_language=zh&text=先帝创业未半而中道崩殂,今天下三分,益州疲弊,此诚危急存亡之秋也。&text_language=zh`
POST:
```json
{
"refer_wav_path": "123.wav",
"prompt_text": "一二三。",
"prompt_language": "zh",
"text": "先帝创业未半而中道崩殂,今天下三分,益州疲弊,此诚危急存亡之秋也。",
"text_language": "zh"
}
```
RESP:
成功: 直接返回 wav 音频流, http code 200
失败: 返回包含错误信息的 json, http code 400
### 更换默认参考音频
endpoint: `/change_refer`
key与推理端一样
GET:
`http://127.0.0.1:9880/change_refer?refer_wav_path=123.wav&prompt_text=一二三。&prompt_language=zh`
POST:
```json
{
"refer_wav_path": "123.wav",
"prompt_text": "一二三。",
"prompt_language": "zh"
}
```
RESP:
成功: json, http code 200
失败: json, 400
"""
- 如果原生 api 接口不足以满足你的要求,可以参考其它改良版的 api 接口,例如:
GPT-SoVITS项目的API改良与使用_gpt-sovits api-CSDN博客https://blog.csdn.net/AAI666666/article/details/136554163
- 也欢迎大家查看本人的 api 改进代码,为大家增加了在使用过程中切换输出模型和语音生成情绪的功能: