From b41538fa6175f47f6d6b975daafb6d4ab979174b Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Tue, 10 Oct 2023 01:07:51 -0400 Subject: [PATCH] support DIO --- .../rvc-v2-brandon/vc_infer_pipeline.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/voice_conversion/rvc-v2-brandon/vc_infer_pipeline.py b/voice_conversion/rvc-v2-brandon/vc_infer_pipeline.py index 1e943d3..b337cc4 100644 --- a/voice_conversion/rvc-v2-brandon/vc_infer_pipeline.py +++ b/voice_conversion/rvc-v2-brandon/vc_infer_pipeline.py @@ -27,6 +27,18 @@ def cache_harvest_f0(input_audio_path, fs, f0max, f0min, frame_period): f0 = pyworld.stonemask(audio, f0, t, fs) return f0 +@lru_cache +def cache_dio_f0(input_audio_path, fs, f0max, f0min, frame_period): + audio = input_audio_path2wav[input_audio_path] + f0, t = pyworld.dio( + audio, + fs=fs, + f0_ceil=f0max, + f0_floor=f0min, + frame_period=frame_period, + ) + f0 = pyworld.stonemask(audio, f0, t, fs) + return f0 def change_rms(data1, sr1, data2, sr2, rate): # 1是输入音频,2是输出音频,rate是2的占比 # print(data1.max(),data2.max()) @@ -107,6 +119,11 @@ class VC(object): f0 = cache_harvest_f0(input_audio_path, self.sr, f0_max, f0_min, 10) if filter_radius > 2: f0 = signal.medfilt(f0, 3) + elif f0_method == "dio": + input_audio_path2wav[input_audio_path] = x.astype(np.double) + f0 = cache_dio_f0(input_audio_path, self.sr, f0_max, f0_min, 10) + if filter_radius > 2: + f0 = signal.medfilt(f0, 3) elif f0_method == "crepe": model = "full" # Pick a batch size that doesn't cause memory errors on your gpu