In [1]:
%load_ext autoreload
%autoreload 2
In [5]:
import os, itertools, functools, librosa, csv, glob, pickle
import vmo.VMO.utility as utl
import vmo.analysis as van
import numpy as np
import matplotlib.pyplot as plt
import librosa
In [4]:
file_path = '../JKUPDD-Aug2013/groundTruth/'
song_list = ['bachBWV889Fg', 'beethovenOp2No1Mvt3', 'chopinOp24No4', 'gibbonsSilverSwan1612', 'mozartK282Mvt2']
bpm_list = [84, 192, 138, 54, 120]
brange = [[1,110],[-1,555],[-1, 556],[1, 80],[-1,526]]
pattern_list = ['barlowAndMorgensternRevised', 'bruhn','schoenberg','sectionalRepetitions','tomCollins']
def get_occurence(f_path, pattern_list):
f = itertools.chain.from_iterable([[_f+'/'+c+'/occurrences/csv/' for c in os.listdir(f_path+_f+'/') if not c.startswith('.')]
for _f in os.listdir(f_path) if (not _f.startswith('.') and _f in pattern_list)])
f = list(f)
occur = [[_c for _c in os.listdir(f_path+'/'+_f) if not _c.startswith('.')] for _f in f[:]]
out = []
for c,s in zip(occur, f):
occ_list = []
for _c in c:
csv_file = open(f_path+s+_c,'r')
cs = list(csv.reader(csv_file))
region = [float(cs[0][0]),float(cs[-1][0])]
occ_list.append(region)
out.append(occ_list)
return out
audio_list = [{'audio':[file_path+song+'/polyphonic/audio/'+a for a in os.listdir(file_path+song+'/polyphonic/audio/') if a.endswith('wav')][0],
'info':(song, bpm, beat_range),
'pattern':get_occurence(file_path+song+'/polyphonic/repeatedPatterns/', pattern_list)}
for song, bpm, beat_range in zip(song_list, bpm_list, brange)]
In [8]:
fft_size = 8192
hop_size = 128
sr = 11025
feature_dict = {}
for piece in audio_list:
print 'Process '+piece['info'][0]
c_vec = []
b_list = []
y, sr = librosa.load(piece['audio'], sr = sr)
C = librosa.feature.chroma_cqt(y=y, sr=sr, hop_length=hop_size)
tempo, beats = librosa.beat.beat_track(y=y, sr=sr, hop_length=hop_size)
c_vec.append(C)
b_list.append(beats)
performance_path = '../performances/'
p_path = performance_path+piece['info'][0]+'/'
perform_list = [f for f in os.listdir(p_path) if f.endswith('mp3')]
for i,p in enumerate(perform_list):
print ' '+p
p = p_path+p
y, sr = librosa.load(p, sr = sr)
C = librosa.feature.chroma_cqt(y=y, sr=sr, hop_length=hop_size)
tempo, beats = librosa.beat.beat_track(y=y, sr=sr, hop_length=hop_size)
c_vec.append(C)
b_list.append(beats)
piece_dict = {'chroma':c_vec, 'beats':b_list}
feature_dict[piece['info'][0]] = piece_dict
In [9]:
print feature_dict.keys()
In [10]:
f = open('motif_feature_03132017','w')
pickle.dump(feature_dict, f)
f.close()
In [ ]: