Mercurial > hg > vampy
diff Example VamPy plugins/obsolete/PySpectralCentroid.py @ 37:27bab3a16c9a vampy2final
new branch Vampy2final
author | fazekasgy |
---|---|
date | Mon, 05 Oct 2009 11:28:00 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Example VamPy plugins/obsolete/PySpectralCentroid.py Mon Oct 05 11:28:00 2009 +0000 @@ -0,0 +1,132 @@ +'''PySpectralCentroid.py - Example plugin demonstrates +how to write a C style plugin using VamPy. + +Obsolete warning: this plugin will no longer be supported +since the legacy interface should pass a list of complex +numbers for frequency domain plugins and a list of floats +for time domin plugins. + +''' + +from numpy import * + +class PySpectralCentroid: + + def __init__(self,inputSampleRate): + self.m_imputSampleRate = 0.0 + self.m_stepSize = 0 + self.m_blockSize = 0 + self.m_channels = 0 + self.previousSample = 0.0 + self.m_inputSampleRate = inputSampleRate + self.threshold = 0.00 + + def initialise(self,channels,stepSize,blockSize): + self.m_channels = channels + self.m_stepSize = stepSize + self.m_blockSize = blockSize + return True + + def getMaker(self): + return 'Vampy Example Plugins' + + def getName(self): + return 'Spectral Centroid (legacy process interface)' + + def getIdentifier(self): + return 'vampy-sc2' + + def getMaxChannelCount(self): + return 1 + + def getInputDomain(self): + return 'FrequencyDomain' + + def getOutputDescriptors(self): + + output0={ + 'identifier':'vampy-sf1', + 'name':'Spectral Centroid', + 'description':'Spectral Centroid (Brightness)', + 'unit':' ', + 'hasFixedBinCount':True, + 'binCount':1, + 'hasKnownExtents':False, + 'isQuantized':True, + 'quantizeStep':1.0, + 'sampleType':'OneSamplePerStep' + } + + return [output0] + + def getParameterDescriptors(self): + paramlist1={ + 'identifier':'threshold', + 'name':'Noise threshold: ', + 'description':'Return null or delete this function if not needed.', + 'unit':'v', + 'minValue':0.0, + 'maxValue':0.5, + 'defaultValue':0.05, + 'isQuantized':False + } + return [paramlist1] + + def setParameter(self,paramid,newval): + if paramid == 'threshold' : + self.threshold = newval + return + + def getParameter(self,paramid): + if paramid == 'threshold' : + return self.threshold + else: + return 0.0 + + def process(self,inbuf,timestamp): + + inArray = array(inbuf[0]) + crossing = False + prev = self.previousSample + count = 0.0 + numLin = 0.0 + denom = 0.0 + centroid = 0.0 + + # re = array(inbuf[2:len(inArray):2]) + # im = array(inbuf[3:len(inArray):2]) + + output0=[] + output1=[] + + # pw = 0 + # for i in xrange(1,len(inbuf[0])) : + # pw = pw + abs(inbuf[0][i]) + + if sum(abs(inArray)) > self.threshold : + for i in range(1,(len(inArray)/2)) : + # for i in range(1,len(inbuf[0])) : + + re = inArray[i*2] + im = inArray[i*2+1] + # re = inbuf[0][i].real + # im = inbuf[0][i].imag + freq = i * self.m_inputSampleRate / self.m_blockSize + power = sqrt (re*re + im*im) / (self.m_blockSize/2) + denom = denom + power + numLin = numLin + freq * power + + if denom != 0 : + centroid = numLin / denom + + else : + centroid = 0.0 + + feature0={ + 'hasTimestamp':False, + 'values':[centroid], #strictly must be a list + 'label':str(centroid) + } + output0.append(feature0) + + return [output0]