|
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)) |