|
''' |
|
|
|
item: one piece of data |
|
item_name: data id |
|
wavfn: wave file path |
|
txt: lyrics |
|
ph: phoneme |
|
tgfn: text grid file path (unused) |
|
spk: dataset name |
|
wdb: word boundary |
|
ph_durs: phoneme durations |
|
midi: pitch as midi notes |
|
midi_dur: midi duration |
|
is_slur: keep singing upon note changes |
|
''' |
|
|
|
|
|
from copy import deepcopy |
|
|
|
import logging |
|
|
|
from preprocessing.process_pipeline import File2Batch |
|
from utils.hparams import hparams |
|
from preprocessing.base_binarizer import BaseBinarizer |
|
|
|
SVCSINGING_ITEM_ATTRIBUTES = ['wav_fn', 'spk_id'] |
|
class SVCBinarizer(BaseBinarizer): |
|
def __init__(self, item_attributes=SVCSINGING_ITEM_ATTRIBUTES): |
|
super().__init__(item_attributes) |
|
print('spkers: ', set(item['spk_id'] for item in self.items.values())) |
|
self.item_names = sorted(list(self.items.keys())) |
|
self._train_item_names, self._test_item_names = self.split_train_test_set(self.item_names) |
|
|
|
|
|
def split_train_test_set(self, item_names): |
|
item_names = deepcopy(item_names) |
|
if hparams['choose_test_manually']: |
|
test_item_names = [x for x in item_names if any([x.startswith(ts) for ts in hparams['test_prefixes']])] |
|
else: |
|
test_item_names = item_names[-5:] |
|
train_item_names = [x for x in item_names if x not in set(test_item_names)] |
|
logging.info("train {}".format(len(train_item_names))) |
|
logging.info("test {}".format(len(test_item_names))) |
|
return train_item_names, test_item_names |
|
|
|
@property |
|
def train_item_names(self): |
|
return self._train_item_names |
|
|
|
@property |
|
def valid_item_names(self): |
|
return self._test_item_names |
|
|
|
@property |
|
def test_item_names(self): |
|
return self._test_item_names |
|
|
|
def load_meta_data(self): |
|
self.items = File2Batch.file2temporary_dict() |
|
|
|
def _phone_encoder(self): |
|
from preprocessing.hubertinfer import Hubertencoder |
|
return Hubertencoder(hparams['hubert_path']) |