Spaces:
Running
Running
import sys,os | |
sys.path.append(os.path.dirname(os.path.abspath(__file__))) | |
import tqdm | |
import torch | |
import argparse | |
from whisper.inference import load_model, pred_ppg | |
# How to use | |
# python svc_inference_batch.py --config configs/base.yaml --model vits_pretrain/sovits5.0.pth --wave test_waves/ --spk configs/singers/singer0047.npy | |
out_path = "./_svc_out" | |
os.makedirs(out_path, exist_ok=True) | |
if __name__ == '__main__': | |
parser = argparse.ArgumentParser() | |
parser.add_argument('--config', type=str, required=True, | |
help="yaml file for config.") | |
parser.add_argument('--model', type=str, required=True, | |
help="path of model for evaluation") | |
parser.add_argument('--wave', type=str, required=True, | |
help="Path of raw audio.") | |
parser.add_argument('--spk', type=str, required=True, | |
help="Path of speaker.") | |
parser.add_argument('--shift', type=int, default=0, | |
help="Pitch shift key.") | |
args = parser.parse_args() | |
wave_path = args.wave | |
assert os.path.isdir(wave_path), f"{wave_path} is not folder" | |
waves = [file for file in os.listdir(wave_path) if file.endswith(".wav")] | |
for file in waves: | |
print(file) | |
device = torch.device("cuda" if torch.cuda.is_available() else "cpu") | |
whisper = load_model(os.path.join("whisper_pretrain", "large-v2.pt"), device=device) | |
for file in tqdm.tqdm(waves, desc="whisper"): | |
pred_ppg(whisper, f"{wave_path}/{file}", f"{out_path}/{file}.ppg.npy", device=device) | |
del whisper | |
for file in tqdm.tqdm(waves, desc="svc"): | |
os.system( | |
f"python svc_inference.py --config {args.config} --model {args.model} --wave {wave_path}/{file} --ppg {out_path}/{file}.ppg.npy --spk {args.spk} --shift {args.shift}") | |
os.system(f"mv svc_out.wav {out_path}/{file}") | |
os.system(f"rm {out_path}/{file}.ppg.npy") | |