@@ -37,16 +37,25 @@ class VC:
|
||||
self.config = Config()
|
||||
|
||||
def get_vc(self, sid: str | Path, *to_return_protect: int):
|
||||
logger.info("Get sid: " + os.path.basename(sid))
|
||||
logger.info("Get sid: " + os.path.basename(sid) if hasattr(sid, "name") or isinstance(sid, str) else "ERROR")
|
||||
|
||||
return_protect = [
|
||||
to_return_protect[0] if self.if_f0 != 0 and to_return_protect else 0.5,
|
||||
to_return_protect[1] if self.if_f0 != 0 and to_return_protect else 0.33,
|
||||
]
|
||||
|
||||
person = sid if os.path.exists(sid) else f'{os.getenv("weight_root")}/{sid}'
|
||||
logger.info(f"Loading: {person}")
|
||||
if hasattr(sid, "name"):
|
||||
sid = sid.name
|
||||
elif not isinstance(sid, str):
|
||||
raise RuntimeError(f"pathlib.Path or str expected for sid. Got {type(sid)}")
|
||||
|
||||
weight_root = os.getenv("weight_root")
|
||||
person = sid if os.path.exists(sid) else f'{weight_root if weight_root is not None else "."}/{sid}'
|
||||
logger.info(f"Loading: {person}")
|
||||
|
||||
if not os.path.exists(person) or person.endswith("/"):
|
||||
raise FileNotFoundError(f"model file not found (path: {person}).")
|
||||
|
||||
self.cpt = torch.load(person, weights_only=False, map_location="cpu")
|
||||
self.tgt_sr = self.cpt["config"][-1]
|
||||
self.cpt["config"][-3] = self.cpt["weight"]["emb_g.weight"].shape[0] # n_spk
|
||||
@@ -66,7 +75,7 @@ class VC:
|
||||
|
||||
del self.net_g.enc_q
|
||||
|
||||
if sid == "" or []:
|
||||
if len(sid) == 0:
|
||||
logger.info("Clean model cache")
|
||||
del (self.hubert_model, self.tgt_sr, self.net_g)
|
||||
(self.net_g) = self.n_spk = index = None
|
||||
@@ -88,19 +97,53 @@ class VC:
|
||||
def vc_inference(
|
||||
self,
|
||||
sid: int,
|
||||
input_audio_path: Path,
|
||||
input_audio_path: Path | str,
|
||||
f0_up_key: int = 0,
|
||||
f0_method: str = "rmvpe",
|
||||
f0_file: Path | None = None,
|
||||
index_file: Path | None = None,
|
||||
f0_file: Path | str | None = None,
|
||||
index_file: Path | str | None = None,
|
||||
index_rate: float = 0.75,
|
||||
filter_radius: int = 3,
|
||||
resample_sr: int = 0,
|
||||
rms_mix_rate: float = 0.25,
|
||||
protect: float = 0.33,
|
||||
hubert_path: str | None = None,
|
||||
hubert_path: str | Path | None = None,
|
||||
):
|
||||
hubert_path = os.getenv("hubert_path") if not hubert_path else hubert_path
|
||||
if hubert_path is None:
|
||||
hubert_path = os.getenv("hubert_path")
|
||||
elif hasattr(hubert_path, "name"):
|
||||
hubert_path = hubert_path.name
|
||||
elif not isinstance(hubert_path, str):
|
||||
raise RuntimeError(f"pathlib.Path, str, or None expected for hubert_path. Got {type(hubert_path)}")
|
||||
|
||||
if hubert_path is None or not os.path.exists(hubert_path):
|
||||
raise FileNotFoundError("hubert_path not found.")
|
||||
|
||||
if hasattr(input_audio_path, "name"):
|
||||
input_audio_path = input_audio_path.name
|
||||
elif not isinstance(input_audio_path, str):
|
||||
raise RuntimeError(f"pathlib.Path or str expected for input_audio_path. Got {type(input_audio_path)}")
|
||||
|
||||
if not os.path.exists(input_audio_path):
|
||||
raise FileNotFoundError("input_audio_path not found.")
|
||||
|
||||
if isinstance(f0_file, str):
|
||||
f0_file = Path(f0_file)
|
||||
elif not isinstance(f0_file, Path) and f0_file is not None:
|
||||
raise RuntimeError(f"pathlib.Path, str, or None expected for f0_file. Got {type(f0_file)}")
|
||||
|
||||
if hasattr(f0_file, "name") and not os.path.exists(f0_file.name):
|
||||
logger.warning("f0_file not found. Will use None instead.")
|
||||
f0_file = None
|
||||
|
||||
if hasattr(index_file, "name"):
|
||||
index_file = index_file.name
|
||||
elif not isinstance(index_file, str) and index_file is not None:
|
||||
raise RuntimeError(f"pathlib.Path, str, or None expected for index_file. Got {type(index_file)}")
|
||||
|
||||
if index_file is not None and not os.path.exists(index_file):
|
||||
logger.warning("index_file not found. Will use None instead.")
|
||||
index_file = None
|
||||
|
||||
try:
|
||||
audio = load_audio(input_audio_path, 16000)
|
||||
@@ -145,28 +188,31 @@ class VC:
|
||||
def vc_multi(
|
||||
self,
|
||||
sid: int,
|
||||
paths: list,
|
||||
opt_root: Path,
|
||||
paths: list[Path | str],
|
||||
opt_root: Path | str,
|
||||
f0_up_key: int = 0,
|
||||
f0_method: str = "rmvpe",
|
||||
f0_file: Path | None = None,
|
||||
index_file: Path | None = None,
|
||||
f0_file: Path | str | None = None,
|
||||
index_file: Path | str | None = None,
|
||||
index_rate: float = 0.75,
|
||||
filter_radius: int = 3,
|
||||
resample_sr: int = 0,
|
||||
rms_mix_rate: float = 0.25,
|
||||
protect: float = 0.33,
|
||||
output_format: str = "wav",
|
||||
hubert_path: str | None = None,
|
||||
hubert_path: str | Path | None = None,
|
||||
):
|
||||
if hasattr(opt_root, "name"):
|
||||
opt_root = opt_root.name
|
||||
|
||||
try:
|
||||
os.makedirs(opt_root, exist_ok=True)
|
||||
paths = [path.name for path in paths]
|
||||
paths = [path.name if hasattr(path, "name") else path for path in paths]
|
||||
infos = []
|
||||
for path in paths:
|
||||
tgt_sr, audio_opt, _, info = self.vc_inference(
|
||||
sid,
|
||||
Path(path),
|
||||
path,
|
||||
f0_up_key,
|
||||
f0_method,
|
||||
f0_file,
|
||||
|
||||
Reference in New Issue
Block a user