Maria@1: # -*- coding: utf-8 -*- Maria@1: """ Maria@1: Created on Thu Feb 11 19:51:24 2016 Maria@1: Maria@1: @author: mariapanteli Maria@1: """ Maria@1: """ Extract scale transform and pitch bihistogram descriptors""" Maria@1: Maria@1: import os Maria@1: import numpy Maria@1: import pandas Maria@1: import sys Maria@1: sys.path.append('util') Maria@1: import pitch_bihist as pbh Maria@1: import scale_transform as stf Maria@1: Maria@1: Maria@1: def extract_pitch_bihist(filenames): Maria@1: """ compute pitch bihistogram feature for each audio file in filenames Maria@1: """ Maria@1: melf = [] Maria@1: for filename in filenames: Maria@1: print filename Maria@1: pb = pbh.PitchBihist() Maria@1: pbihist = pb.get_pitchbihist(filename=filename) Maria@1: average_frame = numpy.nanmean(pbihist.T, axis=0, keepdims=True) Maria@1: melf.append(average_frame) Maria@1: melf = numpy.concatenate(melf) Maria@1: return melf Maria@1: Maria@1: Maria@1: def extract_scale_transform(filenames): Maria@1: """ compute scale transform feature for each audio file in filenames Maria@1: """ Maria@1: rhyf = [] Maria@7: for filename in filenames: Maria@1: print filename Maria@1: st = stf.ScaleTransform() Maria@1: stransf = st.get_scale_transform(filename=filename) Maria@1: average_frame = numpy.nanmean(stransf.T, axis=0, keepdims=True) Maria@1: rhyf.append(average_frame) Maria@1: rhyf = numpy.concatenate(rhyf) Maria@1: return rhyf Maria@1: Maria@1: Maria@1: if __name__ == '__main__': Maria@1: # Load metadata to get audio filenames Maria@1: df = pandas.read_csv(os.path.join('data','Metadata.csv')) Maria@1: filenames = df["filename"].get_values() Maria@1: Maria@1: # Specify audio directory and append to audio filenames Maria@1: filenames_mel = [os.path.join('audio','melodies', ff) for ff in filenames] Maria@1: filenames_rhy = [os.path.join('audio','rhythms', ff) for ff in filenames] Maria@1: Maria@1: pitch_bihist = extract_pitch_bihist(filenames_mel) Maria@1: scale_transform = extract_scale_transform(filenames_rhy) Maria@1: Maria@1: # Save .csv where rows = n_files, columns = n_features Maria@1: write_file = False Maria@1: if write_file: Maria@1: numpy.savetxt(os.path.join('data', 'PB.csv'), pitch_bihist, delimiter=',', fmt='%10.12f') Maria@1: numpy.savetxt(os.path.join('data', 'ST.csv'), scale_transform, delimiter=',', fmt='%10.12f')