mirror of
https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI.git
synced 2025-02-01 03:02:54 +08:00
55 lines
1.7 KiB
Python
55 lines
1.7 KiB
Python
import os
|
|
|
|
import numpy as np
|
|
import ffmpeg
|
|
from fairseq import checkpoint_utils
|
|
|
|
|
|
def get_index_path_from_model(sid):
|
|
return next(
|
|
(
|
|
f
|
|
for f in [
|
|
os.path.join(root, name)
|
|
for root, dirs, files in os.walk(os.getenv("index_root"), topdown=False)
|
|
for name in files
|
|
if name.endswith(".index") and "trained" not in name
|
|
]
|
|
if sid.split(".")[0] in f
|
|
),
|
|
"",
|
|
)
|
|
|
|
|
|
def load_hubert(config):
|
|
models, _, _ = checkpoint_utils.load_model_ensemble_and_task(
|
|
["assets/hubert/hubert_base.pt"],
|
|
suffix="",
|
|
)
|
|
hubert_model = models[0]
|
|
hubert_model = hubert_model.to(config.device)
|
|
if config.is_half:
|
|
hubert_model = hubert_model.half()
|
|
else:
|
|
hubert_model = hubert_model.float()
|
|
return hubert_model.eval()
|
|
|
|
|
|
def load_audio(file, sr):
|
|
try:
|
|
# https://github.com/openai/whisper/blob/main/whisper/audio.py#L26
|
|
# This launches a subprocess to decode audio while down-mixing and resampling as necessary.
|
|
# Requires the ffmpeg CLI and `ffmpeg-python` package to be installed.
|
|
file = (
|
|
file.strip(" ").strip('"').strip("\n").strip('"').strip(" ")
|
|
) # 防止小白拷路径头尾带了空格和"和回车
|
|
out, _ = (
|
|
ffmpeg.input(file, threads=0)
|
|
.output("-", format="f32le", acodec="pcm_f32le", ac=1, ar=sr)
|
|
.run(cmd=["ffmpeg", "-nostdin"], capture_stdout=True, capture_stderr=True)
|
|
)
|
|
except Exception as e:
|
|
raise RuntimeError(f"Failed to load audio: {e}")
|
|
|
|
return np.frombuffer(out, np.float32).flatten()
|