From d2d43437a8e95343055088b0a32ad04b23119d18 Mon Sep 17 00:00:00 2001 From: RVC-Boss <129054828+RVC-Boss@users.noreply.github.com> Date: Thu, 18 Jan 2024 00:31:02 +0800 Subject: [PATCH] Add files via upload --- .../prepare_datasets/2-get-hubert-wav32k.py | 110 ++++++++---------- 1 file changed, 48 insertions(+), 62 deletions(-) diff --git a/GPT_SoVITS/prepare_datasets/2-get-hubert-wav32k.py b/GPT_SoVITS/prepare_datasets/2-get-hubert-wav32k.py index 25cb4a8..1a5de8c 100644 --- a/GPT_SoVITS/prepare_datasets/2-get-hubert-wav32k.py +++ b/GPT_SoVITS/prepare_datasets/2-get-hubert-wav32k.py @@ -1,23 +1,20 @@ # -*- coding: utf-8 -*- -import sys, os - -inp_text = os.environ.get("inp_text") -inp_wav_dir = os.environ.get("inp_wav_dir") -exp_name = os.environ.get("exp_name") -i_part = os.environ.get("i_part") -all_parts = os.environ.get("all_parts") -os.environ["CUDA_VISIBLE_DEVICES"] = os.environ.get("_CUDA_VISIBLE_DEVICES") +import sys,os +inp_text= os.environ.get("inp_text") +inp_wav_dir= os.environ.get("inp_wav_dir") +exp_name= os.environ.get("exp_name") +i_part= os.environ.get("i_part") +all_parts= os.environ.get("all_parts") +os.environ["CUDA_VISIBLE_DEVICES"]= os.environ.get("_CUDA_VISIBLE_DEVICES") from feature_extractor import cnhubert +opt_dir= os.environ.get("opt_dir") +cnhubert.cnhubert_base_path= os.environ.get("cnhubert_base_dir") +is_half=eval(os.environ.get("is_half","True")) -opt_dir = os.environ.get("opt_dir") -cnhubert.cnhubert_base_path = os.environ.get("cnhubert_base_dir") -is_half = eval(os.environ.get("is_half", "True")) - -import pdb, traceback, numpy as np, logging +import pdb,traceback,numpy as np,logging from scipy.io import wavfile -import librosa, torch - +import librosa,torch now_dir = os.getcwd() sys.path.append(now_dir) from my_utils import load_audio @@ -35,75 +32,64 @@ from my_utils import load_audio from time import time as ttime import shutil +def my_save(fea,path):#####fix issue: torch.save doesn't support chinese path + dir=os.path.dirname(path) + name=os.path.basename(path) + tmp_path="%s/%s%s.pth"%(dir,ttime(),i_part) + torch.save(fea,tmp_path) + shutil.move(tmp_path,"%s/%s"%(dir,name)) +hubert_dir="%s/4-cnhubert"%(opt_dir) +wav32dir="%s/5-wav32k"%(opt_dir) +os.makedirs(opt_dir,exist_ok=True) +os.makedirs(hubert_dir,exist_ok=True) +os.makedirs(wav32dir,exist_ok=True) -def my_save(fea, path): #####fix issue: torch.save doesn't support chinese path - dir = os.path.dirname(path) - name = os.path.basename(path) - tmp_path = "%s/%s%s.pth" % (dir, ttime(), i_part) - torch.save(fea, tmp_path) - shutil.move(tmp_path, "%s/%s" % (dir, name)) - - -hubert_dir = "%s/4-cnhubert" % (opt_dir) -wav32dir = "%s/5-wav32k" % (opt_dir) -os.makedirs(opt_dir, exist_ok=True) -os.makedirs(hubert_dir, exist_ok=True) -os.makedirs(wav32dir, exist_ok=True) - -maxx = 0.95 -alpha = 0.5 -device = "cuda:0" -model = cnhubert.get_model() -if is_half == True: - model = model.half().to(device) +maxx=0.95 +alpha=0.5 +device="cuda:0" +model=cnhubert.get_model() +if(is_half==True): + model=model.half().to(device) else: model = model.to(device) - - def name2go(wav_name): - hubert_path = "%s/%s.pt" % (hubert_dir, wav_name) - if os.path.exists(hubert_path): - return - wav_path = "%s/%s" % (inp_wav_dir, wav_name) + hubert_path="%s/%s.pt"%(hubert_dir,wav_name) + if(os.path.exists(hubert_path)):return + if(inp_wav_dir!=""): + wav_path="%s/%s"%(inp_wav_dir,wav_name) tmp_audio = load_audio(wav_path, 32000) tmp_max = np.abs(tmp_audio).max() if tmp_max > 2.2: print("%s-%s-%s-filtered" % (idx0, idx1, tmp_max)) return - tmp_audio32 = (tmp_audio / tmp_max * (maxx * alpha * 32768)) + ( - (1 - alpha) * 32768 - ) * tmp_audio - tmp_audio = librosa.resample(tmp_audio32, orig_sr=32000, target_sr=16000) + tmp_audio32 = (tmp_audio / tmp_max * (maxx * alpha*32768)) + ((1 - alpha)*32768) * tmp_audio + tmp_audio = librosa.resample( + tmp_audio32, orig_sr=32000, target_sr=16000 + ) tensor_wav16 = torch.from_numpy(tmp_audio) - if is_half == True: - tensor_wav16 = tensor_wav16.half().to(device) + if (is_half == True): + tensor_wav16=tensor_wav16.half().to(device) else: tensor_wav16 = tensor_wav16.to(device) - ssl = ( - model.model(tensor_wav16.unsqueeze(0))["last_hidden_state"] - .transpose(1, 2) - .cpu() - ) # torch.Size([1, 768, 215]) - if np.isnan(ssl.detach().numpy()).sum() != 0: - return + ssl=model.model(tensor_wav16.unsqueeze(0))["last_hidden_state"].transpose(1,2).cpu()#torch.Size([1, 768, 215]) + if np.isnan(ssl.detach().numpy()).sum()!= 0:return wavfile.write( - "%s/%s" % (wav32dir, wav_name), + "%s/%s"%(wav32dir,wav_name), 32000, tmp_audio32.astype("int16"), ) # torch.save(ssl,hubert_path ) - my_save(ssl, hubert_path) + my_save(ssl,hubert_path ) +with open(inp_text,"r",encoding="utf8")as f: + lines=f.read().strip("\n").split("\n") -with open(inp_text, "r", encoding="utf8") as f: - lines = f.read().strip("\n").split("\n") - -for line in lines[int(i_part) :: int(all_parts)]: +for line in lines[int(i_part)::int(all_parts)]: try: # wav_name,text=line.split("\t") wav_name, spk_name, language, text = line.split("|") - wav_name = os.path.basename(wav_name) + wav_name=os.path.basename(wav_name) name2go(wav_name) except: - print(line, traceback.format_exc()) + print(line,traceback.format_exc())