File size: 8,994 Bytes
4e9cd67
 
 
 
 
 
 
 
 
 
 
514d664
 
4e9cd67
 
b4312dd
4e9cd67
b4312dd
4e9cd67
 
 
 
 
 
 
 
 
 
 
 
b4312dd
4e9cd67
b4312dd
4e9cd67
 
 
 
8c5e44c
ce01427
 
b4312dd
ce01427
 
 
 
 
 
 
 
 
 
 
 
d5cdc03
ce01427
 
 
 
 
 
 
4e7b252
4e9cd67
 
8c5e44c
b4312dd
ce01427
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8c5e44c
ce01427
 
 
 
4e9cd67
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
import io

import gradio as gr
import librosa
import numpy as np
import soundfile
import torch
from inference.infer_tool import Svc
import logging
logging.getLogger('numba').setLevel(logging.WARNING)

model_name = "logs/48k/G_1M111000_sing.pth"
config_name = "configs/config.json"

svc_model = Svc(model_name, config_name)
def vc_fn(input_audio, vc_transform):
    if input_audio is None:
        return None
    sampling_rate, audio = input_audio
    # print(audio.shape,sampling_rate)
    duration = audio.shape[0] / sampling_rate
    audio = (audio / np.iinfo(audio.dtype).max).astype(np.float32)
    if len(audio.shape) > 1:
        audio = librosa.to_mono(audio.transpose(1, 0))
    if sampling_rate != 16000:
        audio = librosa.resample(audio, orig_sr=sampling_rate, target_sr=16000)
    print(audio.shape)
    out_wav_path = io.BytesIO()
    soundfile.write(out_wav_path, audio, 16000, format="wav")
    out_wav_path.seek(0)
    out_audio, out_sr = svc_model.infer("suiji", vc_transform, out_wav_path)
    _audio = out_audio.cpu().numpy()
    return (48000, _audio)

app = gr.Blocks()
with app:
    with gr.Tabs():
        with gr.TabItem("歌声音色转换"):
            gr.Markdown(value="""
                # 强烈建议☝️先看一遍使用说明

                ## 这是 sovits 3.0 48kHz AI岁己歌声音色转换的在线demo

                ### 目前模型训练状态:1000000steps底模 + 111000steps

                ### 推理出来有概率会给吸气音上电,需要后期小修一下,大概可能也许是因为炼太久糊了

                ### 仓库内模型所用于训练的数据:

                | G_1000000.pth | G_1M111000_sing.pth(现任) | G_1M100000_sing.pth(待产) | G_1M100000_sing1.pth(待产) |
                | :----: | :----: | :----: | :----: |
                | 12月录播(除电台)、出道至今22条歌投、10条歌切、圣诞音声(27.5小时) | G_1000000.pth作为底模_2022年所有唱歌投稿、唱歌切片、圣诞音声(3.9小时) | G_1000000.pth作为底模_(使用效果更好的UVR5模型去除BGM)出道至今所有唱歌投稿、唱歌切片、圣诞音声 | 先用1月录播(除电台)训练一个底模,再用出道至今所有唱歌投稿、唱歌切片、圣诞音声进行训练 |

                ### 仓库内G.pth、D.pth都有,欢迎作为底模用于进一步训练,如果要训练自己的数据请访问:[项目Github仓库](https://github.com/innnky/so-vits-svc/tree/main)、[教程《svc相关》](https://www.yuque.com/jiuwei-nui3d/qng6eg)(想进里面那个群求助的话建议先把QQ资料性别改成女然后头像该换的换)

                ### 建议参考上方“使用说明”下的教程,在本地使用 inference_main.py 处理,我都写成这样了再小白应该都能搞定(不怕麻烦的话)

                ### 本地推理可调用GPU(NVIDIA),3060Ti 8G可推理一条20(建议) - 30s的音频,过长音频可分割后批量处理,就算用CPU推理也比 Hugging Face 快不少

                ### 有空可能会折腾一下导出onnx,抛弃这堆较为臃肿的Python依赖
            """)
            vc_input3 = gr.Audio(label="输入音频(长度请控制在30s左右,过长可能会爆内存)")
            vc_transform = gr.Number(label="变调(整数,可以正负,半音数量,升高八度就是12)", value=0)
            vc_submit = gr.Button("转换", variant="primary")
            vc_output2 = gr.Audio(label="输出音频(最右侧三个点可以下载)")
        vc_submit.click(vc_fn, [vc_input3, vc_transform], [vc_output2])
        with gr.TabItem("亿点点使用说明➕保姆级本地部署教程"):
            gr.Markdown(value="""
                # 强烈建议👇先看一遍使用说明

                ### 输入的音频一定要是纯净的干音,不要把歌曲直接扔进来

                ### 混响和和声也不能有,UVR分离出人声之后需要注意一下

                ### 对陈述语气没多大作用,实在没干音库的话,你可以自己唱然后升十几个调慢慢试效果

                ### 数据集几乎全是杂谈的G_1000000.pth:长音不稳,音域不宽,选曲限制较大,可以多试试变调,没什么必要去用

                ### 现任的G_1M111000_sing.pth:有概率会给吸气音上电,需要后期小修一下

                # 在本地部署并使用 inference_main.py 处理的保姆级教程:

                ### 0. 创建一个存放文件的目录,例如 D:\\SUI\\

                ### 1. 安装所需的软件

                1. [miniconda-Python3.8](https://docs.conda.io/en/latest/miniconda.html#windows-installers)(未测试其他Python版本)[点这里可以直接下载](https://repo.anaconda.com/miniconda/Miniconda3-py38_22.11.1-1-Windows-x86_64.exe),Just Me 与 All Users 都行,其余可无脑下一步

                2. [git](https://git-scm.com/download/win)(建议使用便携版)[点这里可以直接下载(便携版v2.39.0.2)](https://github.com/git-for-windows/git/releases/download/v2.39.0.windows.2/PortableGit-2.39.0.2-64-bit.7z.exe),路径填 D:\\SUI\\git\\

                ### 2. 在开始菜单中运行 Anaconda Powershell Prompt 并配置环境(除了工作目录,复制粘贴回车即可)

                ```
                # 切换工作目录
                cd D:\\SUI\\
                # 拉取仓库
                .\\git\\bin\\git lfs clone https://huggingface.co/spaces/Miuzarte/SUI-svc-3.0
                # 切换工作目录至仓库内
                cd D:\\SUI\\SUI-svc-3.0\\
                # 创建并激活环境(如果conda报SSL相关错误请关闭科学上网)
                conda create -n sovits python=3.8 -y
                conda activate sovits

                # 更换国内清华源
                conda config --set show_channel_urls yes
                conda config --remove-key channels
                conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/ 
                conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/menpo/ 
                conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/ 
                conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/ 
                conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/ 
                conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ 
                conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ 
                pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
                ```
                ```
                # CPU(x86)推理要安装的依赖:(如果pip报SSL相关错误请关闭科学上网)
                pip install -r requirements_cpu.txt
                ```
                ```
                # GPU(NVIDIA)推理要安装的依赖:(如果pip报SSL相关错误请关闭科学上网)
                pip install -r requirements_gpu.txt
                pip install https://download.pytorch.org/whl/cu113/torch-1.12.1%2Bcu113-cp38-cp38-win_amd64.whl
                pip install https://download.pytorch.org/whl/cu113/torchvision-0.13.1%2Bcu113-cp38-cp38-win_amd64.whl
                pip install https://download.pytorch.org/whl/cu113/torchaudio-0.12.1%2Bcu113-cp38-cp38-win_amd64.whl
                ```
                至此环境配置完成,关闭该终端窗口(方便我写下一步)

                ### 3. 歌声音色转换

                1. 运行 Anaconda Powershell Prompt 切换工作目录并激活环境

                ```
                cd D:\\SUI\\SUI-svc-3.0\\
                conda activate sovits
                ```

                2. 如果想要像本demo一样用网页的GUI处理,这条之后的可以跳过了

                ```
                python app.py
                # 运行完成后日志会输出应用所在的端口,默认7860(不排除该端口被占用后程序选择了其他端口),则浏览器访问 127.0.0.1:7860
                ```

                3. 在 SUI-svc-3.0\\raw\\ 文件夹中放入需要转换的音频(wav格式),8G显存的情况下建议每条音频的长度控制在20(建议) - 30s(不包括无声部分),过长会爆显存导致处理时间超级加倍甚至直接报错

                4. 编辑 SUI-svc-3.0\\inference_main.py 的第23行(可参考第24行注释的格式),以及26行的变调,修改完保存时注意编码应为 UTF-8

                5. 在终端中运行 inference_main.py 开始推理,音频将输出至 SUI-svc-3.0\\results\\ 文件夹

                ```
                python inference_main.py
                ```
            """)
    app.launch()