e@0
|
1 # -*- coding: utf-8 -*-
|
e@0
|
2 """
|
e@0
|
3 Created on Fri Apr 17 10:32:20 2015
|
e@0
|
4
|
e@0
|
5 @author: Emmanouil Chourdakis
|
e@0
|
6 """
|
e@0
|
7
|
e@0
|
8 import essentia
|
e@0
|
9 from essentia import Pool
|
e@0
|
10 from essentia.standard import *
|
e@0
|
11 from sys import argv
|
e@0
|
12 import csv
|
e@0
|
13
|
e@0
|
14 # reqyures matplotlib
|
e@0
|
15 from pylab import *
|
e@0
|
16
|
e@0
|
17 #requires numpy
|
e@0
|
18 from numpy import *
|
e@0
|
19
|
e@0
|
20 #requires scikit-learn
|
e@0
|
21 from sklearn.metrics import pairwise_distances
|
e@0
|
22
|
e@0
|
23 if __name__=="__main__":
|
e@0
|
24 if len(argv) < 3:
|
e@0
|
25 print("Please provide an input filename and a parameter value.")
|
e@0
|
26 else:
|
e@0
|
27
|
e@0
|
28 d = {}
|
e@0
|
29 v = {}
|
e@0
|
30
|
e@0
|
31 fname = argv[1]
|
e@0
|
32 csvfname = argv[2]
|
e@0
|
33 csvfile = open(csvfname)
|
e@0
|
34 reader = csv.reader(csvfile)
|
e@0
|
35
|
e@0
|
36 row = reader.next()
|
e@0
|
37 print row
|
e@0
|
38
|
e@0
|
39 for i in range(0, len(row)):
|
e@0
|
40 v[i] = i
|
e@0
|
41 d[i] = row[i]
|
e@0
|
42
|
e@0
|
43 for row in reader:
|
e@0
|
44 print row
|
e@0
|
45
|
e@0
|
46 print("Demo with `%s\'" % fname)
|
e@0
|
47
|
e@0
|
48 # Sampling Rate
|
e@0
|
49 SR = 16000.0
|
e@0
|
50
|
e@0
|
51 # Sampling Frequency
|
e@0
|
52 T = 1.0/SR
|
e@0
|
53
|
e@0
|
54 # FrameSize
|
e@0
|
55 tframeSize = 23 #ms
|
e@0
|
56 frameSize = int(ceil(tframeSize*SR/1000)) if mod(ceil(tframeSize*SR/1000),2) == 0 \
|
e@0
|
57 else int(floor(tframeSize*SR/1000))
|
e@0
|
58
|
e@0
|
59 # HopSize
|
e@0
|
60 hopSize = frameSize/2
|
e@0
|
61
|
e@0
|
62 # Load Audio
|
e@0
|
63 audio = MonoLoader(filename = fname)()
|
e@0
|
64
|
e@0
|
65 #Window Frames
|
e@0
|
66 w = Windowing(size = frameSize, type = 'hamming')
|
e@0
|
67
|
e@0
|
68 # Spectrum
|
e@0
|
69 spec = Spectrum()
|
e@0
|
70
|
e@0
|
71 # Pool to append mean and variance
|
e@0
|
72 pool = Pool()
|
e@0
|
73 globalPool = Pool()
|
e@0
|
74
|
e@0
|
75 # Spectral Contrast
|
e@0
|
76 sc = SpectralContrast(frameSize = frameSize, highFrequencyBound = 8000, sampleRate = SR)
|
e@0
|
77
|
e@0
|
78 # MFCCs
|
e@0
|
79 mfccs = MFCC(highFrequencyBound = 8000, sampleRate = SR)
|
e@0
|
80
|
e@0
|
81 # Onset Detection
|
e@0
|
82 onsetdetection = OnsetDetectionGlobal(frameSize = frameSize, hopSize = hopSize, sampleRate = SR)(audio)
|
e@0
|
83 onsets = Onsets()(essentia.array([onsetdetection]), [1])
|
e@0
|
84
|
e@0
|
85 for o in range(0, len(onsets)-1):
|
e@0
|
86 IOI = audio[onsets[o]*SR:onsets[o+1]*SR]
|
e@0
|
87
|
e@0
|
88 if len(IOI) == 0:
|
e@0
|
89 break;
|
e@0
|
90
|
e@0
|
91 for frame in FrameGenerator(IOI, frameSize, hopSize):
|
e@0
|
92 framespectrum = spec(w(frame))
|
e@0
|
93 framecontrast = sc(framespectrum)
|
e@0
|
94 mfcc_coeffs = mfccs(framespectrum)[1]
|
e@0
|
95
|
e@0
|
96 pool.add('lowlevel.mfcc.coeffs', mfcc_coeffs);
|
e@0
|
97 pool.add('lowlevel.spectrum.magnitude', framespectrum)
|
e@0
|
98 pool.add('lowlevel.contrast.contrast', framecontrast[0])
|
e@0
|
99 pool.add('lowlevel.contrast.valleys', framecontrast[1])
|
e@0
|
100
|
e@0
|
101
|
e@0
|
102
|
e@0
|
103 spectrumfull = pool['lowlevel.spectrum.magnitude']
|
e@0
|
104 spectralcontrast = pool['lowlevel.contrast.contrast']
|
e@0
|
105 spectralvalleys = pool['lowlevel.contrast.valleys']
|
e@0
|
106
|
e@0
|
107 spectralfeature = concatenate((spectralcontrast,spectralvalleys),1)
|
e@0
|
108 mfccfeature = pool['lowlevel.mfcc.coeffs']
|
e@0
|
109
|
e@0
|
110 globalPool.add('spectralcontrast', mean(spectralfeature, 0))
|
e@0
|
111 globalPool.add('mfccs', mean(mfccfeature, 0))
|
e@0
|
112
|
e@0
|
113 pool.clear()
|
e@0
|
114
|
e@0
|
115
|
e@0
|
116
|
e@0
|
117
|
e@0
|
118 #simmfcc = pairwise_distances(globalPool['mfccs'], metric='cosine')
|
e@0
|
119 # simmfcc = pairwise_distances(globalPool['spectralcontrast'], metric='cosine')
|
e@0
|
120
|
e@0
|
121 #plot(simmfcc[0,:])
|
e@0
|
122 #figure()
|
e@0
|
123
|
e@0
|
124 spectralcontrastmean = globalPool['spectralcontrast']
|
e@0
|
125
|
e@0
|
126 imshow(spectralcontrastmean.T, aspect='auto', interpolation='none')
|
e@0
|
127 output = YamlOutput(filename = "%s.yaml" % fname.partition('/')[2].partition('.')[0])(globalPool)
|
e@0
|
128 |