wonkitty/apple_oh
0
1import logging2import os3 4# os.system("wget -P cvec/ https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/hubert_base.pt")5import gradio as gr6from dotenv import load_dotenv7 8from configs.config import Config9from i18n import I18nAuto10from infer.modules.vc.pipeline import Pipeline11VC = Pipeline12 13logging.getLogger("numba").setLevel(logging.WARNING)14logging.getLogger("markdown_it").setLevel(logging.WARNING)15logging.getLogger("urllib3").setLevel(logging.WARNING)16logging.getLogger("matplotlib").setLevel(logging.WARNING)17logger = logging.getLogger(__name__)18 19i18n = I18nAuto()20#(i18n)21 22load_dotenv()23config = Config()24vc = VC(config)25 26weight_root = os.getenv("weight_root")27weight_uvr5_root = os.getenv("weight_uvr5_root")28index_root = os.getenv("index_root")29names = []30hubert_model = None31for name in os.listdir(weight_root):32 if name.endswith(".pth"):33 names.append(name)34index_paths = []35for root, dirs, files in os.walk(index_root, topdown=False):36 for name in files:37 if name.endswith(".index") and "trained" not in name:38 index_paths.append("%s/%s" % (root, name))39 40 41app = gr.Blocks()42with app:43 with gr.Tabs():44 with gr.TabItem("在线demo"):45 gr.Markdown(46 value="""47 RVC 在线demo48 """49 )50 sid = gr.Dropdown(label=i18n("推理音色"), choices=sorted(names))51 with gr.Column():52 spk_item = gr.Slider(53 minimum=0,54 maximum=2333,55 step=1,56 label=i18n("请选择说话人id"),57 value=0,58 visible=False,59 interactive=True,60 )61 sid.change(fn=vc.get_vc, inputs=[sid], outputs=[spk_item])62 gr.Markdown(63 value=i18n("男转女推荐+12key, 女转男推荐-12key, 如果音域爆炸导致音色失真也可以自己调整到合适音域. ")64 )65 vc_input3 = gr.Audio(label="上传音频(长度小于90秒)")66 vc_transform0 = gr.Number(label=i18n("变调(整数, 半音数量, 升八度12降八度-12)"), value=0)67 f0method0 = gr.Radio(68 label=i18n("选择音高提取算法,输入歌声可用pm提速,harvest低音好但巨慢无比,crepe效果好但吃GPU"),69 choices=["pm", "harvest", "crepe", "rmvpe"],70 value="pm",71 interactive=True,72 )73 filter_radius0 = gr.Slider(74 minimum=0,75 maximum=7,76 label=i18n(">=3则使用对harvest音高识别的结果使用中值滤波,数值为滤波半径,使用可以削弱哑音"),77 value=3,78 step=1,79 interactive=True,80 )81 with gr.Column():82 file_index1 = gr.Textbox(83 label=i18n("特征检索库文件路径,为空则使用下拉的选择结果"),84 value="",85 interactive=False,86 visible=False,87 )88 file_index2 = gr.Dropdown(89 label=i18n("自动检测index路径,下拉式选择(dropdown)"),90 choices=sorted(index_paths),91 interactive=True,92 )93 index_rate1 = gr.Slider(94 minimum=0,95 maximum=1,96 label=i18n("检索特征占比"),97 value=0.88,98 interactive=True,99 )100 resample_sr0 = gr.Slider(101 minimum=0,102 maximum=48000,103 label=i18n("后处理重采样至最终采样率,0为不进行重采样"),104 value=0,105 step=1,106 interactive=True,107 )108 rms_mix_rate0 = gr.Slider(109 minimum=0,110 maximum=1,111 label=i18n("输入源音量包络替换输出音量包络融合比例,越靠近1越使用输出包络"),112 value=1,113 interactive=True,114 )115 protect0 = gr.Slider(116 minimum=0,117 maximum=0.5,118 label=i18n("保护清辅音和呼吸声,防止电音撕裂等artifact,拉满0.5不开启,调低加大保护力度但可能降低索引效果"),119 value=0.33,120 step=0.01,121 interactive=True,122 )123 f0_file = gr.File(label=i18n("F0曲线文件, 可选, 一行一个音高, 代替默认F0及升降调"))124 but0 = gr.Button(i18n("转换"), variant="primary")125 vc_output1 = gr.Textbox(label=i18n("输出信息"))126 vc_output2 = gr.Audio(label=i18n("输出音频(右下角三个点,点了可以下载)"))127 but0.click(128 vc.vc_single,129 [130 spk_item,131 vc_input3,132 vc_transform0,133 f0_file,134 f0method0,135 file_index1,136 file_index2,137 # file_big_npy1,138 index_rate1,139 filter_radius0,140 resample_sr0,141 rms_mix_rate0,142 protect0,143 ],144 [vc_output1, vc_output2],145 )146 147 148app.launch()149 