mirror of
https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI.git
synced 2025-01-01 12:35:04 +08:00
add fcpe for realtime
This commit is contained in:
parent
ff093ad88f
commit
e7e9d5934d
@ -62,7 +62,6 @@ class RVC:
|
|||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
if config.dml == True:
|
if config.dml == True:
|
||||||
|
|
||||||
def forward_dml(ctx, x, scale):
|
def forward_dml(ctx, x, scale):
|
||||||
ctx.scale = scale
|
ctx.scale = scale
|
||||||
res = x.clone().detach()
|
res = x.clone().detach()
|
||||||
@ -183,6 +182,8 @@ class RVC:
|
|||||||
|
|
||||||
if last_rvc is not None and hasattr(last_rvc, "model_rmvpe"):
|
if last_rvc is not None and hasattr(last_rvc, "model_rmvpe"):
|
||||||
self.model_rmvpe = last_rvc.model_rmvpe
|
self.model_rmvpe = last_rvc.model_rmvpe
|
||||||
|
if last_rvc is not None and hasattr(last_rvc, "model_fcpe"):
|
||||||
|
self.model_fcpe = last_rvc.model_fcpe
|
||||||
except:
|
except:
|
||||||
printt(traceback.format_exc())
|
printt(traceback.format_exc())
|
||||||
|
|
||||||
@ -217,6 +218,8 @@ class RVC:
|
|||||||
return self.get_f0_crepe(x, f0_up_key)
|
return self.get_f0_crepe(x, f0_up_key)
|
||||||
if method == "rmvpe":
|
if method == "rmvpe":
|
||||||
return self.get_f0_rmvpe(x, f0_up_key)
|
return self.get_f0_rmvpe(x, f0_up_key)
|
||||||
|
if method == "fcpe":
|
||||||
|
return self.get_f0_fcpe(x, f0_up_key)
|
||||||
if method == "pm":
|
if method == "pm":
|
||||||
p_len = x.shape[0] // 160 + 1
|
p_len = x.shape[0] // 160 + 1
|
||||||
f0_min = 65
|
f0_min = 65
|
||||||
@ -322,6 +325,20 @@ class RVC:
|
|||||||
f0 *= pow(2, f0_up_key / 12)
|
f0 *= pow(2, f0_up_key / 12)
|
||||||
return self.get_f0_post(f0)
|
return self.get_f0_post(f0)
|
||||||
|
|
||||||
|
def get_f0_fcpe(self, x, f0_up_key):
|
||||||
|
if hasattr(self, "model_fcpe") == False:
|
||||||
|
from torchfcpe import spawn_bundled_infer_model
|
||||||
|
printt("Loading fcpe model")
|
||||||
|
self.model_fcpe = spawn_bundled_infer_model(self.device)
|
||||||
|
f0 = self.model_fcpe.infer(
|
||||||
|
torch.from_numpy(x).to(self.device).unsqueeze(0).float(),
|
||||||
|
sr=16000,
|
||||||
|
decoder_mode='local_argmax',
|
||||||
|
threshold=0.006,
|
||||||
|
).squeeze().cpu().numpy()
|
||||||
|
f0 *= pow(2, f0_up_key / 12)
|
||||||
|
return self.get_f0_post(f0)
|
||||||
|
|
||||||
def infer(
|
def infer(
|
||||||
self,
|
self,
|
||||||
feats: torch.Tensor,
|
feats: torch.Tensor,
|
||||||
|
Loading…
Reference in New Issue
Block a user