Spaces:
Runtime error
Runtime error
| import numpy as np | |
| import torch | |
| from torch.utils.data import Dataset | |
| import json | |
| import random | |
| from pathlib import Path | |
| import os | |
| class CPCDataset_sameSeq(Dataset): | |
| def __init__(self, root, n_sample_frames, mode): | |
| self.root = Path(root) | |
| self.n_sample_frames = n_sample_frames | |
| self.speakers = sorted(os.listdir(root/f'{mode}/mels')) | |
| with open(self.root / f"{mode}.json") as file: | |
| metadata = json.load(file) | |
| self.metadata = [] | |
| for mel_len, mel_out_path, lf0_out_path in metadata: | |
| # if mel_len > n_sample_frames: # only select wavs having frames>=140 | |
| mel_out_path = Path(mel_out_path) | |
| lf0_out_path = Path(lf0_out_path) | |
| speaker = mel_out_path.parent.stem | |
| self.metadata.append([speaker, mel_out_path, lf0_out_path]) | |
| print('n_sample_frames:', n_sample_frames, 'metadata:', len(self.metadata)) | |
| random.shuffle(self.metadata) | |
| def __len__(self): | |
| return len(self.metadata) | |
| def __getitem__(self, index): | |
| speaker, mel_path, lf0_path = self.metadata[index] | |
| mel_path = self.root.parent / mel_path | |
| lf0_path = self.root.parent / lf0_path | |
| mel = np.load(mel_path).T | |
| lf0 = np.load(lf0_path) | |
| melt = mel | |
| lf0t = lf0 | |
| while mel.shape[-1] < self.n_sample_frames: | |
| mel = np.concatenate([mel, melt], -1) | |
| lf0 = np.concatenate([lf0, lf0t], 0) | |
| zero_idxs = np.where(lf0 == 0.0)[0] | |
| nonzero_idxs = np.where(lf0 != 0.0)[0] | |
| if len(nonzero_idxs) > 0 : | |
| mean = np.mean(lf0[nonzero_idxs]) | |
| std = np.std(lf0[nonzero_idxs]) | |
| if std == 0: | |
| lf0 -= mean | |
| lf0[zero_idxs] = 0.0 | |
| else: | |
| lf0 = (lf0 - mean) / (std + 1e-8) | |
| lf0[zero_idxs] = 0.0 | |
| pos = random.randint(0, mel.shape[-1] - self.n_sample_frames) | |
| mel = mel[:, pos:pos + self.n_sample_frames] | |
| lf0 = lf0[pos:pos + self.n_sample_frames] | |
| return torch.from_numpy(mel), torch.from_numpy(lf0), self.speakers.index(speaker) | |