- Timestamp:
- Mar 5, 2006, 4:21:16 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:
- d8604ac
- Parents:
- 43938de
- Location:
- python
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
python/aubio/bench/node.py
r43938de r5d1c070 26 26 if maxdepth >= 0: maxstring = " -maxdepth %d " % maxdepth 27 27 else: maxstring = "" 28 cmd = '%s' * 5 % ('find ',datapath,maxstring,' -type ',filter)28 cmd = '%s' * 6 % ('find ',datapath,maxstring,' -type ',filter, "| sort -n") 29 29 return runcommand(cmd) 30 30 -
python/aubio/task/pitch.py
r43938de r5d1c070 61 61 elif floatpit: 62 62 try: 63 self.truth = aubio_miditofreq(float(floatpit))64 print "ground truth found in filename:", self.truth65 tasksil = tasksilence(self.input )63 self.truth = float(floatpit) 64 #print "ground truth found in filename:", self.truth 65 tasksil = tasksilence(self.input,params=self.params) 66 66 time,pitch =[],[] 67 67 while(tasksil.readsize==tasksil.params.hopsize): … … 84 84 for i in range(len(values)): 85 85 time.append(values[i][0]) 86 pitch.append( values[i][1])86 pitch.append(aubio_freqtomidi(values[i][1])) 87 87 return time,pitch 88 88 89 def eval(self,results):89 def oldeval(self,results): 90 90 def mmean(l): 91 91 return sum(l)/max(float(len(l)),1) … … 105 105 return self.truth, self.truth-med, self.truth-avg 106 106 107 def neweval(self,results):107 def eval(self,pitch,tol=0.9): 108 108 timet,pitcht = self.gettruth() 109 for i in timet: 110 print results[i] 111 return self.truth, self.truth-med, self.truth-avg 109 pitch = [aubio_freqtomidi(i) for i in pitch] 110 for i in range(len(pitch)): 111 if pitch[i] == "nan" or pitch[i] == -1: 112 pitch[i] = -1 113 time = [ i*self.params.step for i in range(len(pitch)) ] 114 assert len(timet) == len(time) 115 assert len(pitcht) == len(pitch) 116 osil, esil, opit, epit, echr = 0, 0, 0, 0, 0 117 for i in range(len(pitcht)): 118 if pitcht[i] == -1: # currently silent 119 osil += 1 # count a silence 120 if pitch[i] == -1. or pitch[i] == "nan": 121 esil += 1 # found a silence 122 else: 123 opit +=1 124 if abs(pitcht[i] - pitch[i]) < tol: 125 epit += 1 126 echr += 1 127 elif abs(pitcht[i] - pitch[i]) % 12. < tol: 128 echr += 1 129 #else: 130 # print timet[i], pitcht[i], time[i], pitch[i] 131 #print "origsilence", "foundsilence", "origpitch", "foundpitch", "orig pitchroma", "found pitchchroma" 132 #print 100.*esil/float(osil), 100.*epit/float(opit), 100.*echr/float(opit) 133 return osil, esil, opit, epit, echr 112 134 113 135 def plot(self,pitch,wplot,oplots,outplot=None): … … 115 137 import Gnuplot 116 138 117 self.eval(pitch)118 139 downtime = self.params.step*numarray.arange(len(pitch)) 119 oplots.append(Gnuplot.Data(downtime,pitch,with='lines ',140 oplots.append(Gnuplot.Data(downtime,pitch,with='linespoints', 120 141 title=self.params.pitchmode)) 121 142 122 143 123 def plotplot(self,wplot,oplots,outplot=None,multiplot = 1):144 def plotplot(self,wplot,oplots,outplot=None,multiplot = 0): 124 145 from aubio.gnuplot import gnuplot_init, audio_to_array, make_audio_plot 125 146 import re … … 132 153 timet,pitcht = self.gettruth() 133 154 if timet and pitcht: 155 pitcht = [aubio_miditofreq(i) for i in pitcht] 134 156 oplots = [Gnuplot.Data(timet,pitcht,with='lines', 135 157 title='ground truth')] + oplots -
python/test/bench/pitch/bench-pitch
r43938de r5d1c070 9 9 valuenames = ['mode'] 10 10 """ list of lists to store per file """ 11 valuelists = ['orig', 'mean', 'med'] 11 valuelists = ['truth', 'osil', 'esil', 'opit', 'epit', 'echr', 12 'Msil', 'Mpit', 'Mchr'] 12 13 """ list of values to print per dir """ 13 printnames = [ 'mode' ]14 printnames = [ 'mode', 'truth', 'Msil', 'Mpit', 'Mchr'] 14 15 15 16 """ per dir """ 16 formats = {'mode': "%12s" , 'thres': "%5.4s", 17 'dist': "%5.4s", 'prec': "%5.4s", 'recl': "%5.4s", 18 'Ttrue': "%5.4s", 'Tfp': "%5.4s", 'Tfn': "%5.4s", 19 'Tm': "%5.4s", 'Td': "%5.4s", 20 'aTtrue':"%5.4s", 'aTfp': "%5.4s", 'aTfn': "%5.4s", 21 'aTm': "%5.4s", 'aTd': "%5.4s", 22 'mean': "%5.40s", 'smean': "%5.40s", 23 'amean': "%5.40s", 'samean': "%5.40s"} 17 formats = {'mode': "%12s" , 18 'truth': "%s", 19 'osil': "%s", 'esil': "%s", 20 'opit': "%s", 'epit': "%s", 'echr': "%s", 21 'Msil': "%s", 'Mpit': "%s", 'Mchr': "%s"} 24 22 25 23 def dir_eval(self): 26 24 """ evaluate statistical data over the directory """ 27 25 v = self.v 28 29 26 v['mode'] = self.params.pitchmode 30 27 … … 32 29 filetask = self.task(input,params=self.params) 33 30 computed_data = filetask.compute_all() 34 orig,mean,med = filetask.eval(computed_data) 31 osil, esil, opit, epit, echr = filetask.eval(computed_data) 32 self.v['truth'].append(int(filetask.truth)) 33 assert opit > 0 35 34 36 self.v['orig'].append(orig) 37 self.v['mean'].append(mean) 38 self.v['med'].append(med) 35 self.v['osil'].append(osil) 36 self.v['esil'].append(esil) 37 self.v['opit'].append(opit) 38 self.v['epit'].append(epit) 39 self.v['echr'].append(echr) 40 41 self.v['Msil'].append(esil/float(osil)*100.) 42 self.v['Mpit'].append(epit/float(opit)*100.) 43 self.v['Mchr'].append(echr/float(opit)*100.) 39 44 #print results#, computed_data 40 45 #print input, results, results - float(input.split('.')[-2]) … … 42 47 def run_bench(self,modes=['schmitt']): 43 48 from os.path import basename 44 d = []45 49 self.modes = modes 46 50 self.pretty_titles() 51 d = [] 47 52 for mode in self.modes: 48 53 self.params.pitchmode = mode 49 54 self.dir_eval_print() 50 self.plotpitchtessiture(d, 51 self.v['orig'], 52 self.v['med'], 53 plottitle=self.v['mode'], 54 plotmode='points') 55 #d.append('beta = .25,orig(x) title \"-2 octave\"') 56 d.append('beta = .50,orig(x) title \"-1 octave\"') 57 d.append('beta = 1.0,orig(x) title \"original\"') 58 d.append('beta = 2.0,orig(x) title \"+1 octave\"') 59 title = basename(self.datadir) 55 truth = [i for i in range(min(self.v['truth']),max(self.v['truth'])+1)] 56 allOsil = [0 for i in range(min(self.v['truth']),max(self.v['truth'])+1)] 57 allEsil = [0 for i in range(min(self.v['truth']),max(self.v['truth'])+1)] 58 allOpit = [0 for i in range(min(self.v['truth']),max(self.v['truth'])+1)] 59 allEpit = [0 for i in range(min(self.v['truth']),max(self.v['truth'])+1)] 60 allEchr = [0 for i in range(min(self.v['truth']),max(self.v['truth'])+1)] 61 allMsil = [0 for i in range(min(self.v['truth']),max(self.v['truth'])+1)] 62 allMpit = [0 for i in range(min(self.v['truth']),max(self.v['truth'])+1)] 63 allMchr = [0 for i in range(min(self.v['truth']),max(self.v['truth'])+1)] 64 for i in range(len(self.v['truth'])): 65 allOsil[self.v['truth'][i]-min(self.v['truth'])] += self.v['osil'][i] 66 allEsil[self.v['truth'][i]-min(self.v['truth'])] += self.v['esil'][i] 67 allOpit[self.v['truth'][i]-min(self.v['truth'])] += self.v['opit'][i] 68 allEpit[self.v['truth'][i]-min(self.v['truth'])] += self.v['epit'][i] 69 allEchr[self.v['truth'][i]-min(self.v['truth'])] += self.v['echr'][i] 70 for i in range(len(truth)): 71 allMsil[i] = allEsil[i]/float(allOsil[i])*100. 72 allMpit[i] = allEpit[i]/float(allOpit[i])*100. 73 allMchr[i] = allEchr[i]/float(allOpit[i])*100. 74 75 plot = [] 76 self.plotpitchtessiture(plot, 77 truth, 78 allMpit, 79 plottitle="%s %s" % (self.v['mode'],self.params.bufsize), 80 plotmode='lines') 81 self.plotpitchtessiture(plot, 82 truth, 83 allMchr, 84 plottitle="%s %s" % (self.v['mode'],"%12"), 85 plotmode='lines') 86 """ 87 self.plotpitchtessiture(plot, 88 truth, 89 allMsil, 90 plottitle="%s %s" % (self.v['mode'],"sil"), 91 plotmode='lines') 92 """ 93 title = basename(self.datadir) 94 d.append(plot) 60 95 outplot = "_-_".join(('pitchtessiture',title)) 96 self.xmin = 20. #min(self.v['truth']) 97 self.xmax = 110. #max(self.v['truth']) 61 98 for ext in ('ps','png','svg',''): 62 99 self.plotplotpitchtessiture(d, 63 plottitle=title, 100 plottitle="".join(['Performance against MIDI Note number (', 101 title, 102 ", %s" % len(self.sndlist), " samples)"]), 64 103 outplot=outplot, 65 104 extension=ext) 105 #d.append('beta = .25,orig(x) title \"-2 octave\"') 106 #d.append('beta = .50,orig(x) title \"-1 octave\"') 107 #d.append('beta = 1.0,orig(x) title \"original\"') 108 #d.append('beta = 2.0,orig(x) title \"+1 octave\"') 66 109 67 110 """ … … 73 116 d.append(Gnuplot.Data(lx, ly, with=plotmode, title="%s" % (plottitle) )) 74 117 75 def plotplotpitchtessiture(self,d,plottitle='',outplot=0,extension='' ):118 def plotplotpitchtessiture(self,d,plottitle='',outplot=0,extension='',multiplot=1): 76 119 from aubio.gnuplot import gnuplot_create 77 120 g = gnuplot_create(outplot=outplot,extension=extension) 78 g.title(plottitle) 79 g('orig(x) = beta*x') 80 g.xlabel('original pitch (Hz)') 81 g.ylabel('detected pitch (Hz)') 82 g('set key left top') 83 g('set log xy') 84 g('set xrange [50:2000]') 85 g('set yrange [50:2000]') 86 g.plot(*d) 121 #g.title(plottitle) 122 #g('orig(x) = beta*x') 123 #g.xlabel('original pitch (Hz)') 124 #g.ylabel('detected pitch (Hz)') 125 #g('set key left top') 126 #g('set log xy') 127 #g('set xrange [50:2000]') 128 g('set yrange [0:100]') 129 #g.plot(*d) 130 if multiplot: 131 g('set multiplot') 132 for i in range(len(d)): 133 # plot onset detection functions 134 g('set size 1,%f' % ( 1.0/float(len(d)) ) ) 135 g('set origin 0,%f' % ( 1.0*float(len(d)-i-1)/float(len(d)) ) ) 136 # erase axis 137 g('set border 3') 138 g('set xtics nomirror') 139 g('set ytics nomirror') 140 g('set key left top') 141 g('set xrange [%f:%f]' % (self.xmin,self.xmax)) #(self.xmax - (self.xmax-self.xmin)*5./4.,self.xmax)) 142 #g.ylabel('%Correct detections') 143 if i == len(d)-1: 144 g.xlabel(plottitle) 145 g.plot(*d[i]) 146 g('unset title') 147 g('unset multiplot') 148 else: 149 g.plot(*d) 87 150 88 151 … … 94 157 for each in sys.argv[3:-1]: print each 95 158 modes = ['schmitt', 'yin', 'mcomb', 'fcomb'] 96 #modes = ['fcomb']159 modes = ['schmitt', 'yin', 'fcomb'] 97 160 98 161 params = taskparams() 99 params.bufsize = 4096 100 params.hopsize = params.bufsize/4 101 params.silence = -1000. 102 params.pitchsmooth = 50 162 params.bufsize = 2048 163 params.hopsize = params.bufsize/8 164 params.silence = -60. 165 params.pitchsmooth = 0 166 params.pitchmax = 20000 167 params.pitchmin = 20 103 168 benchpitch = benchpitch(datapath,params=params) 104 169 benchpitch.task = taskpitch
Note: See TracChangeset
for help on using the changeset viewer.