File size: 4,226 Bytes
1e4a2ab |
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 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
import os
import sys
import shutil
from random import shuffle
sys.path.append(os.getcwd())
from main.app.core.ui import configs, config
from main.inference.extracting.embedding import create_mute_file
def mute_file(embedders_mode, embedders_model, mute_base_path, rvc_version):
if embedders_mode == "spin":
mute_file = "mute_spin.npy"
else:
mute_file = {
"contentvec_base": "mute.npy",
"hubert_base": "mute.npy",
"vietnamese_hubert_base": "mute_vietnamese.npy",
"japanese_hubert_base": "mute_japanese.npy",
"korean_hubert_base": "mute_korean.npy",
"chinese_hubert_base": "mute_chinese.npy",
"portuguese_hubert_base": "mute_portuguese.npy"
}.get(embedders_model, None)
if mute_file is None:
create_mute_file(rvc_version, embedders_model, embedders_mode, config.is_half)
mute_file = f"mute_{embedders_model.replace('_hubert_base', '')}.npy"
return os.path.join(mute_base_path, f"{rvc_version}_extracted", mute_file)
def generate_config(rvc_version, sample_rate, model_path):
config_save_path = os.path.join(model_path, "config.json")
if not os.path.exists(config_save_path): shutil.copy(os.path.join("main", "configs", rvc_version, f"{sample_rate}.json"), config_save_path)
def generate_filelist(pitch_guidance, model_path, rvc_version, sample_rate, embedders_mode = "fairseq", embedder_model = "contentvec_base", rms_extract = False):
gt_wavs_dir, feature_dir = os.path.join(model_path, "sliced_audios"), os.path.join(model_path, f"{rvc_version}_extracted")
f0_dir, f0nsf_dir, energy_dir = None, None, None
if pitch_guidance: f0_dir, f0nsf_dir = os.path.join(model_path, "f0"), os.path.join(model_path, "f0_voiced")
if rms_extract: energy_dir = os.path.join(model_path, "energy")
gt_wavs_files, feature_files = set(name.split(".")[0] for name in os.listdir(gt_wavs_dir)), set(name.split(".")[0] for name in os.listdir(feature_dir))
names = gt_wavs_files & feature_files
if pitch_guidance: names = names & set(name.split(".")[0] for name in os.listdir(f0_dir)) & set(name.split(".")[0] for name in os.listdir(f0nsf_dir))
if rms_extract: names = names & set(name.split(".")[0] for name in os.listdir(energy_dir))
options = []
mute_base_path = os.path.join(configs["logs_path"], "mute")
for name in names:
option = {
True: {
True: f"{gt_wavs_dir}/{name}.wav|{feature_dir}/{name}.npy|{f0_dir}/{name}.wav.npy|{f0nsf_dir}/{name}.wav.npy|{energy_dir}/{name}.wav.npy|0",
False: f"{gt_wavs_dir}/{name}.wav|{feature_dir}/{name}.npy|{f0_dir}/{name}.wav.npy|{f0nsf_dir}/{name}.wav.npy|0"
},
False: {
True: f"{gt_wavs_dir}/{name}.wav|{feature_dir}/{name}.npy|{energy_dir}/{name}.wav.npy|0",
False: f"{gt_wavs_dir}/{name}.wav|{feature_dir}/{name}.npy|0"
}
}[pitch_guidance][rms_extract]
options.append(option)
mute_audio_path, mute_feature_path = os.path.join(mute_base_path, "sliced_audios", f"mute{sample_rate}.wav"), mute_file(embedders_mode, embedder_model, mute_base_path, rvc_version)
for _ in range(2):
option = {
True: {
True: f"{mute_audio_path}|{mute_feature_path}|{os.path.join(mute_base_path, 'f0', 'mute.wav.npy')}|{os.path.join(mute_base_path, 'f0_voiced', 'mute.wav.npy')}|{os.path.join(mute_base_path, 'energy', 'mute.wav.npy')}|0",
False: f"{mute_audio_path}|{mute_feature_path}|{os.path.join(mute_base_path, 'f0', 'mute.wav.npy')}|{os.path.join(mute_base_path, 'f0_voiced', 'mute.wav.npy')}|0"
},
False: {
True: f"{mute_audio_path}|{mute_feature_path}|{os.path.join(mute_base_path, 'energy', 'mute.wav.npy')}|0",
False: f"{mute_audio_path}|{mute_feature_path}|0"
}
}[pitch_guidance][rms_extract]
options.append(option)
shuffle(options)
with open(os.path.join(model_path, "filelist.txt"), "w") as f:
f.write("\n".join(options)) |