Changeset 0029638
- Timestamp:
- Dec 16, 2005, 8:34:52 AM (19 years ago)
- Branches:
- feature/autosink, feature/cnn, feature/cnn_org, feature/constantq, feature/crepe, feature/crepe_org, feature/pitchshift, feature/pydocstrings, feature/timestretch, fix/ffmpeg5, master, pitchshift, sampler, timestretch, yinfft+
- Children:
- b7eb9a5
- Parents:
- 50791b3
- Location:
- python
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
python/aubio/tasks.py
r50791b3 r0029638 1 1 from aubioclass import * 2 from bench.node import bench 2 3 3 4 def get_onset_mode(nvalue): … … 24 25 sys.exit(1) 25 26 27 def get_pitch_mode(nvalue): 28 """ utility function to convert a string to aubio_pitchdetection_type """ 29 if nvalue == 'mcomb' : 30 return aubio_pitch_mcomb 31 elif nvalue == 'yin' : 32 return aubio_pitch_yin 33 elif nvalue == 'fcomb' : 34 return aubio_pitch_fcomb 35 elif nvalue == 'schmitt': 36 return aubio_pitch_schmitt 37 else: 38 import sys 39 print "error: unknown pitch detection function selected" 40 sys.exit(1) 41 26 42 def check_onset_mode(option, opt, value, parser): 27 43 """ wrapper function to convert a list of modes to … … 38 54 val = [] 39 55 for nvalue in nvalues: 40 if nvalue == 'mcomb' : 41 val.append(aubio_pitch_mcomb) 42 elif nvalue == 'yin' : 43 val.append(aubio_pitch_yin) 44 elif nvalue == 'fcomb' : 45 val.append(aubio_pitch_fcomb) 46 elif nvalue == 'schmitt': 47 val.append(aubio_pitch_schmitt) 48 else: 49 import sys 50 print "error: unknown pitch detection function selected" 51 sys.exit(1) 56 val.append(get_pitch_mode(nvalue)) 52 57 setattr(parser.values, option.dest, val) 53 58 … … 167 172 return mylist 168 173 174 169 175 def getpitch(filein,mode=aubio_pitch_mcomb,bufsize=1024,hopsize=512,omode=aubio_pitchm_freq, 170 176 samplerate=44100.,silence=-70): … … 189 195 return mylist 190 196 197 198 class taskparams: 199 """ default parameters for task classes """ 200 def __init__(self,input=None,output=None): 201 self.silence = -70 202 self.derivate = False 203 self.localmin = False 204 self.bufsize = 512 205 self.hopsize = 256 206 self.samplerate = 44100 207 self.tol = 0.05 208 self.step = float(self.hopsize)/float(self.samplerate) 209 self.threshold = 0.1 210 self.mode = 'yin' 211 self.omode = aubio_pitchm_freq 212 213 class task(taskparams): 214 def __init__(self,input,output=None,params=None): 215 """ open the input file and initialize default argument """ 216 if params == None: self.params = taskparams() 217 else: self.params = params 218 self.input = input 219 self.filei = sndfile(self.input) 220 self.srate = self.filei.samplerate() 221 self.channels = self.filei.channels() 222 self.output = output 223 def compute_step(self): 224 pass 225 def compute_all(self): 226 """ Compute data """ 227 mylist = [] 228 while(self.readsize==self.params.hopsize): 229 mylist.append(self()) 230 return mylist 231 232 def eval(self,results): 233 """ Eval data """ 234 pass 235 236 def plot(self): 237 """ Plot data """ 238 pass 239 240 class taskpitch(task): 241 #def __init__(self,input,output): 242 # pass 243 # task.__init__(self,input) 244 # #taskparams.__init__(self) 245 def __init__(self,input,params=None): 246 task.__init__(self,input,params=params) 247 self.myvec = fvec(self.params.hopsize,self.channels) 248 self.frameread = 0 249 self.readsize = self.params.hopsize 250 self.pitchdet = pitchdetection(mode=get_pitch_mode(self.params.mode), 251 bufsize=self.params.bufsize, 252 hopsize=self.params.hopsize, 253 channels=self.channels, 254 samplerate=self.srate, 255 omode=self.params.omode) 256 257 def __call__(self): 258 self.readsize = self.filei.read(self.params.hopsize,self.myvec) 259 freq = self.pitchdet(self.myvec) 260 #print "%.3f %.2f" % (now,freq) 261 self.frameread += 1 262 if (aubio_silence_detection(self.myvec(),self.params.silence)!=1): 263 return freq 264 else: 265 return -1. 266 267 def gettruth(self): 268 return float(self.input.split('.')[-2]) 269 270 271 def eval(self,results): 272 from median import short_find 273 self.truth = self.gettruth() 274 num = 0 275 sum = 0 276 res = [] 277 for i in results: 278 if i == -1: pass 279 else: 280 res.append(i) 281 sum += i 282 num += 1 283 avg = aubio_freqtomidi(sum / float(num)) 284 avgdist = self.truth - avg 285 med = aubio_freqtomidi(short_find(res,len(res)/2)) 286 meddist = self.truth - med 287 return avgdist, meddist 288 289 def plot(self): 290 from aubio.gnuplot import plot_pitch 291 plot_pitch(self.input, 292 pitch, 293 samplerate=samplerate, 294 hopsize=self.params.hopsize, 295 outplot=options.outplot) 296 297 298 -
python/bench-pitch
r50791b3 r0029638 1 1 #! /usr/bin/python 2 2 3 #from conf.aubio_benchrc import *4 from aubio.bench.config import *5 3 from aubio.bench.node import * 6 import os 4 from aubio.tasks import * 7 5 8 datapath = "%s%s" % (DATADIR,'/pitch/isolated/piano/011pfnof') 9 respath = '/var/tmp/isolated/testing' 6 class benchpitch(bench): 7 8 def compute_file(self,input,output): 9 filetask = self.task(input,params=self.params) 10 computed_data = filetask.compute_all() 11 results = filetask.eval(computed_data) 12 self.results.append(results) 13 truth = filetask.gettruth() 14 #print input, results, results - float(input.split('.')[-2]) 15 self.pretty_print((self.params.mode, truth, 16 truth - results[0], results[0], 17 truth - results[1], results[1])) 18 19 def compute_data(self): 20 self.orig, self.missed, self.merged, self.expc, \ 21 self.bad, self.doubled = 0, 0, 0, 0, 0, 0 22 act_on_data(self.compute_file,self.datadir, \ 23 suffix='',filter='f -name \'*.wav\'') 24 25 def compute_results(self,truth): 26 for i in self.results: print i 10 27 11 MODES = 'yin', 'mcomb', 'fcomb', 'schmitt' 28 def run_bench(self,modes=['dual']): 29 self.modes = modes 30 self.pretty_print(self.titles) 31 for mode in self.modes: 32 self.params.mode = mode 33 self.compute_data() 34 #self.compute_results() 35 #self.pretty_print(self.results) 12 36 13 # prepareresultpath 14 act_on_results(mkdir,datapath,respath,filter='d') 37 if __name__ == "__main__": 38 import sys 39 if len(sys.argv) > 1: datapath = sys.argv[1] 40 else: print "error: a path is required"; sys.exit(1) 15 41 16 def compute_data(input,output): 17 aubiocmd = "%s%s %s%s" % \ 18 ("LD_LIBRARY_PATH=",LD_LIBRARY_PATH,AUBIOHOME,"/python/aubiopitch") 19 for m in MODES: 20 cmd = "%s --input \"%s\" --mode %s --verbose --units midi > \"%s--%s.txt\"" \ 21 % (aubiocmd,input,m,output,m) 22 runcommand(cmd,debug=0) 42 modes = ['schmitt', 'yin', 'mcomb', 'fcomb'] 23 43 44 benchpitch = benchpitch(datapath) 45 benchpitch.params = taskparams() 46 benchpitch.task = taskpitch 24 47 25 # computedata 26 act_on_data(compute_data,datapath,respath,suffix='',filter='f -name \'*.wav\'') 48 benchpitch.titles = [ 'mode', 'thres', 'avg', 'avgdist' ] 49 benchpitch.formats = ["%12s" , "| %6s", "| %6s", "| %6s", "| %6s", "| %6s" ] 50 try: 51 benchpitch.run_bench(modes=modes) 52 except KeyboardInterrupt: 53 print "Interrupted by user" 54 sys.exit(1) 27 55 28 # gatherdata 29 #act_on_data(my_print,datapath,respath,suffix='.txt',filter='f -name \'*.wav\'') 30 # gatherthreshold 31 # gathermodes 32 # comparediffs 33 # gatherdiffs 34 56 sys.exit(0)
Note: See TracChangeset
for help on using the changeset viewer.