Maria@1
|
1 # -*- coding: utf-8 -*-
|
Maria@1
|
2 """
|
Maria@1
|
3 Created on Thu Feb 11 19:51:24 2016
|
Maria@1
|
4
|
Maria@1
|
5 @author: mariapanteli
|
Maria@1
|
6 """
|
Maria@1
|
7 """ Extract scale transform and pitch bihistogram descriptors"""
|
Maria@1
|
8
|
Maria@1
|
9 import os
|
Maria@1
|
10 import numpy
|
Maria@1
|
11 import pandas
|
Maria@1
|
12 import sys
|
Maria@1
|
13 sys.path.append('util')
|
Maria@1
|
14 import pitch_bihist as pbh
|
Maria@1
|
15 import scale_transform as stf
|
Maria@1
|
16
|
Maria@1
|
17
|
Maria@1
|
18 def extract_pitch_bihist(filenames):
|
Maria@1
|
19 """ compute pitch bihistogram feature for each audio file in filenames
|
Maria@1
|
20 """
|
Maria@1
|
21 melf = []
|
Maria@1
|
22 for filename in filenames:
|
Maria@1
|
23 print filename
|
Maria@1
|
24 pb = pbh.PitchBihist()
|
Maria@1
|
25 pbihist = pb.get_pitchbihist(filename=filename)
|
Maria@1
|
26 average_frame = numpy.nanmean(pbihist.T, axis=0, keepdims=True)
|
Maria@1
|
27 melf.append(average_frame)
|
Maria@1
|
28 melf = numpy.concatenate(melf)
|
Maria@1
|
29 return melf
|
Maria@1
|
30
|
Maria@1
|
31
|
Maria@1
|
32 def extract_scale_transform(filenames):
|
Maria@1
|
33 """ compute scale transform feature for each audio file in filenames
|
Maria@1
|
34 """
|
Maria@1
|
35 rhyf = []
|
Maria@7
|
36 for filename in filenames:
|
Maria@1
|
37 print filename
|
Maria@1
|
38 st = stf.ScaleTransform()
|
Maria@1
|
39 stransf = st.get_scale_transform(filename=filename)
|
Maria@1
|
40 average_frame = numpy.nanmean(stransf.T, axis=0, keepdims=True)
|
Maria@1
|
41 rhyf.append(average_frame)
|
Maria@1
|
42 rhyf = numpy.concatenate(rhyf)
|
Maria@1
|
43 return rhyf
|
Maria@1
|
44
|
Maria@1
|
45
|
Maria@1
|
46 if __name__ == '__main__':
|
Maria@1
|
47 # Load metadata to get audio filenames
|
Maria@1
|
48 df = pandas.read_csv(os.path.join('data','Metadata.csv'))
|
Maria@1
|
49 filenames = df["filename"].get_values()
|
Maria@1
|
50
|
Maria@1
|
51 # Specify audio directory and append to audio filenames
|
Maria@1
|
52 filenames_mel = [os.path.join('audio','melodies', ff) for ff in filenames]
|
Maria@1
|
53 filenames_rhy = [os.path.join('audio','rhythms', ff) for ff in filenames]
|
Maria@1
|
54
|
Maria@1
|
55 pitch_bihist = extract_pitch_bihist(filenames_mel)
|
Maria@1
|
56 scale_transform = extract_scale_transform(filenames_rhy)
|
Maria@1
|
57
|
Maria@1
|
58 # Save .csv where rows = n_files, columns = n_features
|
Maria@1
|
59 write_file = False
|
Maria@1
|
60 if write_file:
|
Maria@1
|
61 numpy.savetxt(os.path.join('data', 'PB.csv'), pitch_bihist, delimiter=',', fmt='%10.12f')
|
Maria@1
|
62 numpy.savetxt(os.path.join('data', 'ST.csv'), scale_transform, delimiter=',', fmt='%10.12f')
|