bug fixes (#53)

* bug fixes

* bug fixes
This commit is contained in:
Alcoft
2025-07-27 02:51:36 +00:00
committed by GitHub
parent 2c847fbe6d
commit 6490dcb5d4

View File

@@ -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,