-
Notifications
You must be signed in to change notification settings - Fork 923
/
svc_inference_batch.py
43 lines (38 loc) · 1.88 KB
/
svc_inference_batch.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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")