Spaces:
Runtime error
Runtime error
| import os | |
| import pickle | |
| import numpy as np | |
| import scipy.fftpack | |
| import soundfile as sf | |
| from utils import pySTFT | |
| from scipy import signal | |
| from librosa.filters import mel | |
| from utils import butter_highpass | |
| import torch | |
| import torch.nn.functional as F | |
| from model_sea import Generator as Model | |
| from hparams_sea import hparams | |
| mel_basis = mel(16000, 1024, fmin=90, fmax=7600, n_mels=80).T | |
| min_level = np.exp(-100 / 20 * np.log(10)) | |
| b, a = butter_highpass(30, 16000, order=5) | |
| mfcc_mean, mfcc_std, dctmx = pickle.load(open('assets/mfcc_stats.pkl', 'rb')) | |
| spk2emb = pickle.load(open('assets/spk2emb_82.pkl', 'rb')) | |
| rootDir = "assets/vctk16-train-wav" | |
| targetDir_sp = 'assets/vctk16-train-sp-mel' | |
| targetDir_cep = 'assets/vctk16-train-cep-mel' | |
| targetDir_cd = 'assets/vctk16-train-teacher' | |
| device = 'cuda:0' | |
| G = Model(hparams).eval().to(device) | |
| g_checkpoint = torch.load('assets/sea.ckpt', map_location=lambda storage, loc: storage) | |
| G.load_state_dict(g_checkpoint['model'], strict=True) | |
| metadata = [] | |
| dirName, subdirList, _ = next(os.walk(rootDir)) | |
| for subdir in sorted(subdirList): | |
| print(subdir) | |
| if not os.path.exists(os.path.join(targetDir_sp, subdir)): | |
| os.makedirs(os.path.join(targetDir_sp, subdir)) | |
| if not os.path.exists(os.path.join(targetDir_cep, subdir)): | |
| os.makedirs(os.path.join(targetDir_cep, subdir)) | |
| if not os.path.exists(os.path.join(targetDir_cd, subdir)): | |
| os.makedirs(os.path.join(targetDir_cd, subdir)) | |
| submeta = [] | |
| submeta.append(subdir) | |
| submeta.append(spk2emb[subdir]) | |
| _,_, fileList = next(os.walk(os.path.join(dirName,subdir))) | |
| for fileName in sorted(fileList): | |
| x, fs = sf.read(os.path.join(dirName,subdir,fileName)) | |
| if x.shape[0] % 256 == 0: | |
| x = np.concatenate((x, np.array([1e-06])), axis=0) | |
| y = signal.filtfilt(b, a, x) | |
| D = pySTFT(y * 0.96).T | |
| D_mel = np.dot(D, mel_basis) | |
| D_db = 20 * np.log10(np.maximum(min_level, D_mel)) | |
| # mel sp | |
| S = (D_db + 80) / 100 | |
| # mel cep | |
| cc_tmp = S.dot(dctmx) | |
| cc_norm = (cc_tmp - mfcc_mean) / mfcc_std | |
| S = np.clip(S, 0, 1) | |
| # teacher code | |
| cc_torch = torch.from_numpy(cc_norm[:,0:20].astype(np.float32)).unsqueeze(0).to(device) | |
| with torch.no_grad(): | |
| codes = G.encode(cc_torch, torch.ones_like(cc_torch[:,:,0])).squeeze(0) | |
| np.save(os.path.join(targetDir_cd, subdir, fileName[:-4]), | |
| codes.cpu().numpy(), allow_pickle=False) | |
| np.save(os.path.join(targetDir_sp, subdir, fileName[:-4]), | |
| S.astype(np.float32), allow_pickle=False) | |
| np.save(os.path.join(targetDir_cep, subdir, fileName[:-4]), | |
| cc_norm.astype(np.float32), allow_pickle=False) | |
| submeta.append(subdir+'/'+fileName[:-4]+'.npy') | |
| metadata.append(submeta) | |
| with open('./assets/train_vctk.meta', 'wb') as handle: | |
| pickle.dump(metadata, handle) |