Mercurial > hg > vampy
comparison Example VamPy plugins/PyMFCC.py @ 68:44d56a3d16b7
Various fixes to the example plugins
author | Chris Cannam |
---|---|
date | Mon, 17 Nov 2014 11:44:15 +0000 |
parents | 146d14ab15e7 |
children | f5b8646494d2 |
comparison
equal
deleted
inserted
replaced
67:146d14ab15e7 | 68:44d56a3d16b7 |
---|---|
37 maxHz: higher bound of warping (default = Nyquist frequency) | 37 maxHz: higher bound of warping (default = Nyquist frequency) |
38 ''' | 38 ''' |
39 self.sampleRate = sampleRate | 39 self.sampleRate = sampleRate |
40 self.NqHz = sampleRate / 2.0 | 40 self.NqHz = sampleRate / 2.0 |
41 self.minHz = minHz | 41 self.minHz = minHz |
42 if maxHz is None : maxHz = self.NqHz | 42 if maxHz is None : maxHz = 11025 |
43 self.maxHz = maxHz | 43 self.maxHz = maxHz |
44 self.inputSize = inputSize | 44 self.inputSize = inputSize |
45 self.numBands = numBands | 45 self.numBands = numBands |
46 self.valid = False | 46 self.valid = False |
47 self.updated = False | 47 self.updated = False |
48 | |
49 def reset(self): | |
50 # reset any initial conditions | |
51 self.updated = False | |
52 return None | |
48 | 53 |
49 def update(self): | 54 def update(self): |
50 # make sure this will run only once | 55 # make sure this will run only once |
51 # if called from a vamp process | 56 # if called from a vamp process |
52 if self.updated: return self.valid | 57 if self.updated: return self.valid |
53 self.updated = True | 58 self.updated = True |
54 self.valid = False | 59 self.valid = False |
55 # print 'Updating parameters and recalculating filters: ' | 60 # print 'Updating parameters and recalculating filters: ' |
56 # print 'Nyquist: ',self.NqHz | 61 # print 'Nyquist: ',self.NqHz |
57 | 62 maxHz = self.maxHz |
58 if self.maxHz > self.NqHz : | 63 if maxHz > self.NqHz : maxHz = self.NqHz |
59 raise Exception('Maximum frequency must be smaller than the Nyquist frequency') | 64 minHz = self.minHz |
60 | 65 if minHz > self.NqHz : minHz = self.NqHz |
61 self.maxMel = 1000*log(1+self.maxHz/700.0)/log(1+1000.0/700.0) | 66 self.maxMel = 1000*log(1+maxHz/700.0)/log(1+1000.0/700.0) |
62 self.minMel = 1000*log(1+self.minHz/700.0)/log(1+1000.0/700.0) | 67 self.minMel = 1000*log(1+minHz/700.0)/log(1+1000.0/700.0) |
63 # print 'minHz:%s\nmaxHz:%s\nminMel:%s\nmaxMel:%s\n' \ | 68 # print 'minHz:%s\nmaxHz:%s\nminMel:%s\nmaxMel:%s\n' \ |
64 # %(self.minHz,self.maxHz,self.minMel,self.maxMel) | 69 # %(self.minHz,self.maxHz,self.minMel,self.maxMel) |
65 self.filterMatrix = self.getFilterMatrix(self.inputSize,self.numBands) | 70 self.filterMatrix = self.getFilterMatrix(self.inputSize,self.numBands) |
66 self.DCTMatrix = self.getDCTMatrix(self.numBands) | 71 self.DCTMatrix = self.getDCTMatrix(self.numBands) |
67 self.filterIter = self.filterMatrix.__iter__() | 72 self.filterIter = self.filterMatrix.__iter__() |
68 self.valid = True | 73 self.valid = True |
69 return self.valid | 74 return self.valid |
112 '''Compute DCT of input matrix.''' | 117 '''Compute DCT of input matrix.''' |
113 return numpy.dot(self.DCTMatrix,data_matrix) | 118 return numpy.dot(self.DCTMatrix,data_matrix) |
114 | 119 |
115 def getMFCCs(self,warpedSpectrum,cn=True): | 120 def getMFCCs(self,warpedSpectrum,cn=True): |
116 '''Compute MFCC coefficients from Mel warped magnitude spectrum.''' | 121 '''Compute MFCC coefficients from Mel warped magnitude spectrum.''' |
117 mfccs=self.dct(numpy.log(warpedSpectrum)) | 122 eps = 1e-8 |
118 if cn is False : mfccs[0] = 0.0 | 123 mfccs=self.dct(numpy.log(warpedSpectrum + eps)) |
119 return mfccs | 124 if cn is False : mfccs[0] = 0.0 |
125 return mfccs | |
120 | 126 |
121 | 127 |
122 class PyMFCC(melScaling): | 128 class PyMFCC(melScaling): |
123 | 129 |
124 def __init__(self,inputSampleRate): | 130 def __init__(self,inputSampleRate): |
270 | 276 |
271 | 277 |
272 def setParameter(self,paramid,newval): | 278 def setParameter(self,paramid,newval): |
273 self.valid = False | 279 self.valid = False |
274 if paramid == 'minHz' : | 280 if paramid == 'minHz' : |
275 if newval < self.maxHz and newval < self.NqHz : | 281 self.minHz = float(newval) |
276 self.minHz = float(newval) | |
277 if paramid == 'maxHz' : | 282 if paramid == 'maxHz' : |
278 if newval < self.NqHz and newval > self.minHz+1000 : | 283 self.maxHz = float(newval) |
279 self.maxHz = float(newval) | |
280 else : | |
281 self.maxHz = self.NqHz | |
282 if paramid == 'cnull' : | 284 if paramid == 'cnull' : |
283 self.cnull = int(not int(newval)) | 285 self.cnull = int(not int(newval)) |
284 if paramid == 'melbands' : | 286 if paramid == 'melbands' : |
285 self.numBands = int(newval) | 287 self.numBands = int(newval) |
286 if paramid == 'two_ch' : | 288 if paramid == 'two_ch' : |