def load_and_encode_data(codebook,pSize=4,keyInv=True, downBeatInv=False,bars=1,partialbar=1,offset=0): """ Load a dataset, and encode it with codebook Return dists, avg_dists """ assert(codebook.shape[1] == pSize * 12) import VQutils # get data featsNorm = get_data_maxener(pSize=pSize,keyInv=keyInv, downBeatInv=downBeatInv,bars=bars, partialbar=partialbar,offset=offset) # encode best_code_per_p, dists, avg_dists = VQutils.find_best_code_per_pattern(featsNorm,codebook,scale=False) return dists, avg_dists
def encode_one_song(filename,codebook,pSize=8,keyInv=True, downBeatInv=False,bars=2): """ returns: song, encoding, song as MAT, encoding as MAT matrices are 'derolled' """ import feats_utils as FU import numpy as np import data_iterator import VQutils # create data iterator data_iter = data_iterator.DataIterator() data_iter.setMatfiles([filename]) # set matfiles if bars > 0: data_iter.useBars( bars ) # a pattern spans 'bars' bars else: data_iter.useBars(0) # important to set it to zero! data_iter.setFeatsize( pSize ) # a pattern is a num. of beats data_iter.stopAfterOnePass(True) # load data featsNorm = [FU.normalize_pattern_maxenergy(p,pSize,keyInv,downBeatInv,retRoll=True) for p in data_iter] keyroll = np.array([x[1] for x in featsNorm]) dbroll = np.array([x[2] for x in featsNorm]) featsNorm = [x[0].flatten() for x in featsNorm] if len(featsNorm) == 0: # empty song return [],[],[],[],[] featsNorm = np.array(featsNorm) res = [np.sum(r) > 0 for r in featsNorm] res2 = np.where(res) featsNorm = featsNorm[res2] keyroll = keyroll[res2] dbroll = dbroll[res2] assert(dbroll.shape[0] == keyroll.shape[0]) assert(dbroll.shape[0] == featsNorm.shape[0]) # find code per pattern best_code_per_p, dists, avg_dists = VQutils.find_best_code_per_pattern(featsNorm,codebook) best_code_per_p = np.asarray([int(x) for x in best_code_per_p]) assert best_code_per_p.shape[0] > 0,'empty song, we should have caught that' encoding = codebook[best_code_per_p] # transform into 2 matrices, with derolling!!!!!!!!! assert(featsNorm.shape[0] == encoding.shape[0]) #featsNormMAT = np.concatenate([x.reshape(12,pSize) for x in featsNorm],axis=1) featsNormMAT = np.concatenate([np.roll(np.roll(featsNorm[x].reshape(12,pSize),-keyroll[x],axis=0),-dbroll[x],axis=1) for x in range(featsNorm.shape[0])],axis=1) #encodingMAT = np.concatenate([x.reshape(12,pSize) for x in encoding],axis=1) encodingMAT = np.concatenate([np.roll(np.roll(encoding[x].reshape(12,pSize),-keyroll[x],axis=0),-dbroll[x],axis=1) for x in range(featsNorm.shape[0])],axis=1) # return return best_code_per_p,featsNorm,encoding,featsNormMAT,encodingMAT
def load_and_encode_data(codebook, pSize=4, keyInv=True, downBeatInv=False, bars=1, partialbar=1, offset=0): """ Load a dataset, and encode it with codebook Return dists, avg_dists """ assert (codebook.shape[1] == pSize * 12) import VQutils # get data featsNorm = get_data_maxener(pSize=pSize, keyInv=keyInv, downBeatInv=downBeatInv, bars=bars, partialbar=partialbar, offset=offset) # encode best_code_per_p, dists, avg_dists = VQutils.find_best_code_per_pattern( featsNorm, codebook, scale=False) return dists, avg_dists
def encode_one_song(filename, codebook, pSize=8, keyInv=True, downBeatInv=False, bars=2): """ returns: song, encoding, song as MAT, encoding as MAT matrices are 'derolled' """ import feats_utils as FU import numpy as np import data_iterator import VQutils # create data iterator data_iter = data_iterator.DataIterator() data_iter.setMatfiles([filename]) # set matfiles if bars > 0: data_iter.useBars(bars) # a pattern spans 'bars' bars else: data_iter.useBars(0) # important to set it to zero! data_iter.setFeatsize(pSize) # a pattern is a num. of beats data_iter.stopAfterOnePass(True) # load data featsNorm = [ FU.normalize_pattern_maxenergy(p, pSize, keyInv, downBeatInv, retRoll=True) for p in data_iter ] keyroll = np.array([x[1] for x in featsNorm]) dbroll = np.array([x[2] for x in featsNorm]) featsNorm = [x[0].flatten() for x in featsNorm] if len(featsNorm) == 0: # empty song return [], [], [], [], [] featsNorm = np.array(featsNorm) res = [np.sum(r) > 0 for r in featsNorm] res2 = np.where(res) featsNorm = featsNorm[res2] keyroll = keyroll[res2] dbroll = dbroll[res2] assert (dbroll.shape[0] == keyroll.shape[0]) assert (dbroll.shape[0] == featsNorm.shape[0]) # find code per pattern best_code_per_p, dists, avg_dists = VQutils.find_best_code_per_pattern( featsNorm, codebook) best_code_per_p = np.asarray([int(x) for x in best_code_per_p]) assert best_code_per_p.shape[ 0] > 0, 'empty song, we should have caught that' encoding = codebook[best_code_per_p] # transform into 2 matrices, with derolling!!!!!!!!! assert (featsNorm.shape[0] == encoding.shape[0]) #featsNormMAT = np.concatenate([x.reshape(12,pSize) for x in featsNorm],axis=1) featsNormMAT = np.concatenate([ np.roll(np.roll(featsNorm[x].reshape(12, pSize), -keyroll[x], axis=0), -dbroll[x], axis=1) for x in range(featsNorm.shape[0]) ], axis=1) #encodingMAT = np.concatenate([x.reshape(12,pSize) for x in encoding],axis=1) encodingMAT = np.concatenate([ np.roll(np.roll(encoding[x].reshape(12, pSize), -keyroll[x], axis=0), -dbroll[x], axis=1) for x in range(featsNorm.shape[0]) ], axis=1) # return return best_code_per_p, featsNorm, encoding, featsNormMAT, encodingMAT