RVC-GUI / main /inference /extracting /preparing_files.py
AnhP's picture
Upload 170 files
1e4a2ab verified
raw
history blame
4.23 kB
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))