def contrast_cluster_files(files_dir, descriptor, euclidean_labels, files):
"""
locate contrast files according to clusters in clusters directories
:param files_dir: directory where sounds are located
:param descriptor: descriptor used for similarity
:param euclidean_labels: groups of clusters
:param files: the .json files (use get_files)
"""
groups = [[] for i in xrange(len(np.unique(euclidean_labels)))]
for i, x in enumerate(euclidean_labels):
groups[x].append([files[0][i], x])
for c in xrange(len(groups)):
if not os.path.exists(files_dir+'/valleys/'+str(c)):
os.makedirs(files_dir+'/valleys/'+str(c))
os.makedirs(files_dir+'/valleys/'+str(c)+'/remix')
for t in groups[c]:
for s in list(os.walk(files_dir+'/valleys', topdown=False))[-1][-1]:
if str(t[0]).split('.')[0] == s.split('valleys.ogg')[0]:
shutil.copy(files_dir+'/valleys/'+s, files_dir+'/valleys/'+str(c)+'/'+s)
print t
try:
simil_audio = [MonoLoader(filename=files_dir+'/valleys/'+str(c)+f)() for f in list(os.walk(files_dir+'/valleys/'+str(c), topdown = False))[-1][-1]]
audio0 = scratch_music(choice(simil_audio))
audio1 = scratch_music(choice(simil_audio))
del simil_audio
audio_N = min([len(i) for i in [audio0, audio1]])
audio_samples = [i[:audio_N]/i.max() for i in [audio0, audio1]]
simil_x = np.array(audio_samples).sum(axis=0)
del audio_samples
simil_x = 0.5*simil_x/simil_x.max()
h, p = librosa.decompose.hpss(librosa.core.stft(simil_x))
del simil_x, p
h = librosa.istft(h)
MonoWriter(filename=files_dir+'/valleys/'+str(c)+'/remix/'+'similarity_mix_valleys.ogg', format = 'ogg', sampleRate = 44100)(h)
del h
except Exception, e:
print e
continue
# save centroid cluster files in centroid cluster directory
评论列表
文章目录