-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathtrain_index.py
67 lines (51 loc) · 1.93 KB
/
train_index.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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import argparse
import concurrent.futures
import os
import pickle
import utils
sovits_config_path = "/home/alexander/Projekte/so-vits-svc/logs/22k_cfm/config.json"
hps = utils.get_hparams_from_file(sovits_config_path, True)
speaker_dict = {v: k for k, v in hps.spk.items()}
def process_speaker_data(item):
k, v = item
print(f"now, index {k} feature...")
index = utils.train_index(v)
return k, index
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument(
"-c",
"--config",
type=str,
default="./configs/config.json",
help="JSON file for configuration",
)
parser.add_argument(
"--output_dir", type=str, default="logs/22k", help="path to output dir"
)
args = parser.parse_args()
hps = utils.get_hparams_from_file(args.config)
spk_dic = hps.spk
spk_dic_inv = {v: k for k, v in spk_dic.items()}
result = {}
files_per_speaker = {}
with open(
"/home/alexander/Projekte/so-vits-svc/filelists/gametts_train.txt", "r"
) as rf:
for line in rf:
wav_path, speaker_id = line.strip().split("|")
speaker_name = speaker_dict[int(speaker_id)]
if (
any([x in speaker_name for x in ["male", "KCD"]])
and "WoW" not in speaker_name
and "child" not in speaker_name
and "SVM" not in speaker_name
):
if speaker_id not in files_per_speaker:
files_per_speaker[speaker_id] = []
soft_path = wav_path.replace(".wav", ".soft.pt")
files_per_speaker[speaker_id].append(soft_path)
with concurrent.futures.ProcessPoolExecutor(max_workers=6) as executor:
result = dict(executor.map(process_speaker_data, files_per_speaker.items()))
with open(os.path.join(args.output_dir, "feature_and_index.pkl"), "wb") as f:
pickle.dump(result, f)