Mercurial > hg > vampy
diff Example VamPy plugins/PyZeroCrossing.py @ 0:e20e214bdfb5
Added VAMP-Python binding project vampy
author | fazekasgy |
---|---|
date | Tue, 11 Mar 2008 19:47:34 +0000 |
parents | |
children | dc88002ce687 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Example VamPy plugins/PyZeroCrossing.py Tue Mar 11 19:47:34 2008 +0000 @@ -0,0 +1,145 @@ +'''PyZeroCrossing.py - Example plugin designed to demonstrate''' +'''how to call a python class using the VamPy VAMP plugin''' + +#from time import * +#import sys + +class PyZeroCrossing: + + def __init__(self): + self.m_imputSampleRate = 44100 + self.m_stepSize = 0 + self.m_blockSize = 0 + self.m_channels = 0 + self.previousSample = 0.0 + self.threshold = 0.05 + + def initialise(self,channels,stepSize,blockSize,inputSampleRate): + self.m_channels = channels + self.m_stepSize = stepSize + self.m_blockSize = blockSize + self.m_inputSampleRate = inputSampleRate + return True + + def getMaker(self): + return 'VamPy Example Plugins' + + def getName(self): + return 'Zero Crossing (VamPy)' + + def getIdentifier(self): + return 'python-zc' + + def getMaxChannelCount(self): + return 1 + + def getInputDomain(self): + return 'TimeDomain' + + def getOutputDescriptors(self): + + #python dictionary + output0={ + 'identifier':'vampy-counts', + 'name':'Number of Zero Crossings', + 'description':'Number of zero crossings per audio frame', + 'unit':' ', + 'hasFixedBinCount':True, + 'binCount':1, + #'binNames':['1 Hz',1.5,'2 Hz',3,'4 Hz'], + 'hasKnownExtents':False, + #'minValue':0.0, + #'maxValue':0.0, + 'isQuantized':True, + 'quantizeStep':1.0, + 'sampleType':'OneSamplePerStep' + #'sampleRate':48000.0 + } + + output1={ + 'identifier':'vampy-crossings', + 'name':'Zero Crossing Locations', + 'description':'The locations of zero crossing points', + 'unit':'discrete', + 'hasFixedBinCount':True, + 'binCount':0, + 'sampleType':'VariableSampleRate' + #'sampleRate':48000.0 + } + + #return a list of dictionaries + return [output0,output1] + + 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): + crossing = False + prev = self.previousSample + count = 0.0; + + #we have two outputs defined thus we have to declare + #them as empty dictionaries in our output list + #in order to be able to return variable rate outputs + output0=[] + output1=[] + + if abs(sum(inbuf)) > self.threshold : + for x in range(len(inbuf)-1) : + + crossing = False + sample = inbuf[x] + if sample <= 0.0 : + if prev > 0.0 : crossing = True + else : + if sample > 0.0 : + if prev <= 0.0 : crossing = True + + if crossing == True : + count = count + 1 + feature1={ + 'hasTimestamp':True, #bool + #for now return sample position and convert to RealTime in C code + 'timeStamp':x + #'values':[count] + #'label':label + } + output1.append(feature1) + + prev = sample + self.previousSample = prev + else : + count = 0.0 + self.previousSample = inbuf[len(inbuf)-2] + + feature0={ + 'hasTimestamp':False, + 'values':[count], #strictly must be a list + 'label':str(count) + } + output0.append(feature0) + + #return a LIST of list of dictionaries + return [output0,output1] + \ No newline at end of file