SoundSimilarity.py 文件源码

python
阅读 18 收藏 0 点赞 0 评论 0

项目:apicultor 作者: sonidosmutantes 项目源码 文件源码
def bpm_cluster_files(files_dir, descriptor, euclidean_labels, files):
    """                                                                                     
    locate bpm 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+'/tempo/'+str(c)):
            os.makedirs(files_dir+'/tempo/'+str(c))
            os.makedirs(files_dir+'/tempo/'+str(c)+'/remix')
        for t in groups[c]:
            for s in list(os.walk(files_dir+'/tempo', topdown=False))[-1][-1]:
                 if str(t[0]).split('.json')[0] == s.split('tempo.ogg')[0]:
                     shutil.copy(files_dir+'/tempo/'+s, files_dir+'/tempo/'+str(c)+'/'+s)     
                     print str().join((str(t))) 
        try:
            simil_audio = [MonoLoader(filename=files_dir+'/tempo/'+str(c)+f)() for f in list(os.walk(files_dir+'/tempo/'+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, h
            p = librosa.istft(p)                                                
            MonoWriter(filename=files_dir+'/tempo/'+str(c)+'/remix/'+'similarity_mix_bpm.ogg', format = 'ogg', sampleRate = 44100)(p)  
            del p
        except Exception, e:
            print logger.exception(e)
            continue

# save mfcc clusters files in mfcc clusters directory
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号