Bootstrap

声音的克隆: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)1 min voice data can also be used to train a good TTS model! (few shot voice cloning) - RVC-Boss/GPT-SoVITSicon-default.png?t=N7T8https://github.com/RVC-Boss/GPT-SoVITS

下载必要的使用的包 

 

注意:GPT-SoVITS支持的语言:中英日

二、制作数据集:

音频文件可以B站下载视频,用剪影分离音频,对音频进行单独保存

B站视频下载地址:

https://bilibili.iiilab.com/

1、webUI使用:

2、URV5去噪

开启UVR5-WebUI

拖入音频并转换

分割完生成两段音频,背景噪音和人声音频 

3、切分音频段:

 开启语音切割

切割结束后,生成音频文件

4、对语音内容识别生成文本:

 5、语音文本校对标注

 如果音频文件不正确,需要开启打标webUI进行人工纠正,

校队好,点击submit text提交

三、模型训练:

注意:在模型训练的过程需要关闭其他占用显存过高的软件,以免造成内存溢出问题

 

调整训练的轮次,我这里设置的是25轮

开启SoVITS训练

开启GPT训练 

四、webUI使用:

五、接口api的使用:

调用api.py

修改api.bat:打开api.bat文件,编辑里面的内容

双击启动,api.bat

复制http://127.0.0.1:9880/docs到浏览器打开

报错:

定位是ffmpeg的问题

进行解决

将host修改成0.0.0.0

问题:由于一句话太长,会出现播音错误的情况,需要对文本进行切词

修改api。py代码增加该改变模型的选项

http://127.0.0.1:9880?refer_wav_path=D:\GPT-SoVITS\beta\GPT-SoVITS-beta0217\output\slicer_opt\vocal_zhouxingchivp5mul5l.WAV_10.wav_0000163520_0000261120.wav&prompt_text=杀人这种事,我整天都有这种想法的。&prompt_language=中文&text=你好&text_language=中文

四、API改良:

源码:GitHub - jianchang512/gptsovits-api: 适用于 GPT-SoVITS 的api调用接口

 GPT-SoVITS项目的API改良与使用_gpt-sovits api-CSDN博客

api2.py和官方原版api.py 一样都不支持动态模型切换,也不建议这样做,因为动态启动加载模型很慢,而且在失败时也不方便处理。

解决方法是: 一个模型起一个api服务器,绑定不同的端口,在启动 api2.py 时,指定当前服务所要使用的模型和绑定的端口。

比如起2个服务,一个使用默认模型,绑定 9880 端口,一个绑定自己训练的模型,绑定 9881 端口,命令如下

默认模型 9880 端口: http://127.0.0.1:9880

.\runtime\python api2.py -dr "5.wav" -dt "今天好开心" -dl zh

自己训练的模型: http://127.0.0.1:9881

.\runtime\python api2.py -p 9881 -s "SoVITS_weights/mymode-e200.pth" -g "GPT_weights/mymode-e200.ckpt" -dr "wavs/10.wav" -dt "御弟哥哥,为什么甘愿守孤灯" -dl zh

 五、调用接口API

# -*- coding: gbk -*-
import requests


def download_audio(url, save_path):
    # 发起GET请求
    response = requests.get(url)

    # 检查响应状态码
    if response.status_code == 200:
        # 打开文件并写入音频内容
        with open(save_path, 'wb') as f:
            f.write(response.content)
        print("音频下载完成!")
    else:
        print("下载失败,状态码:", response.status_code)


# 示例音频文件的URL
audio_url = r'http://127.0.0.1:9880?refer_wav_path=D:\GPT-SoVITS\beta\GPT-SoVITS-beta0217\output\slicer_opt\vocal_zhouxingchivp5mul5l.WAV_10.wav_0000163520_0000261120.wav&prompt_text=杀人这种事,我整天都有这种想法的。&prompt_language=中文&text=你好&text_language=中文'

# 保存音频文件的路径和名称
save_path = 'audio.wav'

# 调用下载函数
download_audio(audio_url, save_path)

;