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' :