From 0c75454ddf9e076ec68f5950f622ab1bf0e656f9 Mon Sep 17 00:00:00 2001 From: yxlllc <33565655+yxlllc@users.noreply.github.com> Date: Fri, 1 Sep 2023 10:16:49 +0800 Subject: [PATCH] Parameter hot update (#1148) --- gui_v1.py | 44 +++++++++++++++++++++++++++++++++------ tools/rvc_for_realtime.py | 13 +++++++++++- 2 files changed, 50 insertions(+), 7 deletions(-) diff --git a/gui_v1.py b/gui_v1.py index db3a943..569d67f 100644 --- a/gui_v1.py +++ b/gui_v1.py @@ -195,6 +195,7 @@ if __name__ == "__main__": resolution=1, orientation="h", default_value=data.get("threhold", ""), + enable_events=True, ), ], [ @@ -205,6 +206,7 @@ if __name__ == "__main__": resolution=1, orientation="h", default_value=data.get("pitch", ""), + enable_events=True, ), ], [ @@ -215,6 +217,7 @@ if __name__ == "__main__": resolution=0.01, orientation="h", default_value=data.get("index_rate", ""), + enable_events=True, ), ], [ @@ -224,24 +227,28 @@ if __name__ == "__main__": "f0method", key="pm", default=data.get("pm", "") == True, + enable_events=True, ), sg.Radio( "harvest", "f0method", key="harvest", default=data.get("harvest", "") == True, + enable_events=True, ), sg.Radio( "crepe", "f0method", key="crepe", default=data.get("crepe", "") == True, + enable_events=True, ), sg.Radio( "rmvpe", "f0method", key="rmvpe", default=data.get("rmvpe", "") == True, + enable_events=True, ), ], ], @@ -257,6 +264,7 @@ if __name__ == "__main__": resolution=0.03, orientation="h", default_value=data.get("block_time", ""), + enable_events=True, ), ], [ @@ -269,6 +277,7 @@ if __name__ == "__main__": default_value=data.get( "n_cpu", min(self.config.n_cpu, n_cpu) ), + enable_events=True, ), ], [ @@ -279,6 +288,7 @@ if __name__ == "__main__": resolution=0.01, orientation="h", default_value=data.get("crossfade_length", ""), + enable_events=True, ), ], [ @@ -289,11 +299,12 @@ if __name__ == "__main__": resolution=0.01, orientation="h", default_value=data.get("extra_time", ""), + enable_events=True, ), ], [ - sg.Checkbox(i18n("输入降噪"), key="I_noise_reduce"), - sg.Checkbox(i18n("输出降噪"), key="O_noise_reduce"), + sg.Checkbox(i18n("输入降噪"), key="I_noise_reduce", enable_events=True), + sg.Checkbox(i18n("输出降噪"), key="O_noise_reduce", enable_events=True), ], ], title=i18n("性能设置"), @@ -306,7 +317,7 @@ if __name__ == "__main__": sg.Text("0", key="infer_time"), ], ] - self.window = sg.Window("RVC - GUI", layout=layout) + self.window = sg.Window("RVC - GUI", layout=layout, finalize=True) self.event_handler() def event_handler(self): @@ -364,7 +375,28 @@ if __name__ == "__main__": json.dump(settings, j) if event == "stop_vc" and self.flag_vc == True: self.flag_vc = False - + + # Parameter hot update + if event == 'threhold': + self.config.threhold = values["threhold"] + elif event == "pitch": + self.config.pitch = values["pitch"] + if hasattr(self, "rvc"): + self.rvc.change_key(values["pitch"]) + elif event == "index_rate": + self.config.index_rate = values["index_rate"] + if hasattr(self, "rvc"): + self.rvc.change_index_rate(values["index_rate"]) + elif event in ["pm", "harvest", "crepe", "rmvpe"]: + self.config.f0method = event + elif event == 'I_noise_reduce': + self.config.I_noise_reduce = values["I_noise_reduce"] + elif event == 'O_noise_reduce': + self.config.O_noise_reduce = values["O_noise_reduce"] + elif event != "start_vc" and self.flag_vc == True: + # Other parameters do not support hot update + self.flag_vc = False + def set_values(self, values): if len(values["pth_path"].strip()) == 0: sg.popup(i18n("请选择pth文件")) @@ -470,9 +502,9 @@ if __name__ == "__main__": self.sola_buffer: torch.Tensor = torch.zeros( self.crossfade_frame, device=device, dtype=torch.float32 ) - self.fade_in_window: torch.Tensor = torch.linspace( + self.fade_in_window: torch.Tensor = torch.sin(0.5 * np.pi * torch.linspace( 0.0, 1.0, steps=self.crossfade_frame, device=device, dtype=torch.float32 - ) + )) ** 2 self.fade_out_window: torch.Tensor = 1 - self.fade_in_window self.resampler = tat.Resample( orig_freq=self.config.samplerate, new_freq=16000, dtype=torch.float32 diff --git a/tools/rvc_for_realtime.py b/tools/rvc_for_realtime.py index 396b384..a4a3a7b 100644 --- a/tools/rvc_for_realtime.py +++ b/tools/rvc_for_realtime.py @@ -68,6 +68,7 @@ class RVC: self.index = faiss.read_index(index_path) self.big_npy = self.index.reconstruct_n(0, self.index.ntotal) print("index search enabled") + self.index_path = index_path self.index_rate = index_rate models, _, _ = fairseq.checkpoint_utils.load_model_ensemble_and_task( ["assets/hubert/hubert_base.pt"], @@ -111,7 +112,17 @@ class RVC: self.is_half = config.is_half except: print(traceback.format_exc()) - + + def change_key(self, new_key): + self.f0_up_key = new_key + + def change_index_rate(self, new_index_rate): + if new_index_rate != 0 and self.index_rate == 0: + self.index = faiss.read_index(self.index_path) + self.big_npy = self.index.reconstruct_n(0, self.index.ntotal) + print("index search enabled") + self.index_rate = new_index_rate + def get_f0_post(self, f0): f0_min = self.f0_min f0_max = self.f0_max