update bench-pitch-isolated
authorPaul Brossier <piem@altern.org>
Thu, 20 Apr 2006 12:51:40 +0000 (12:51 +0000)
committerPaul Brossier <piem@altern.org>
Thu, 20 Apr 2006 12:51:40 +0000 (12:51 +0000)
update bench-pitch-isolated

python/test/bench/pitch/bench-pitch [deleted file]
python/test/bench/pitch/bench-pitch-isolated [new file with mode: 0755]

diff --git a/python/test/bench/pitch/bench-pitch b/python/test/bench/pitch/bench-pitch
deleted file mode 100755 (executable)
index fadce94..0000000
+++ /dev/null
@@ -1,191 +0,0 @@
-#! /usr/bin/python
-
-from aubio.bench.node import *
-from aubio.task import *
-
-class benchpitch(bench):
-       
-       """ list of values to store per file """
-       valuenames = ['mode']
-       """ list of lists to store per file """
-       valuelists = ['truth', 'osil', 'esil', 'opit', 'epit', 'echr', 
-               'Msil', 'Mpit', 'Mchr',
-              'TotalPit', 'TotalPit', 'TotalChr' ]
-       """ list of values to print per dir """
-       printnames = [ 'mode', 'MinPit', 'MaxPit', 'TotalSil', 'TotalPit', 'TotalChr']
-
-       """ per dir """
-       formats = {'mode': "%12s" , 
-               'truth': "%s",
-               'osil': "%s", 'esil': "%s", 
-               'opit': "%s", 'epit': "%s", 'echr': "%s",
-               'TotalPit': "%s", 'TotalSil': "%s", 'TotalChr': "%s",
-               'MinPit': "%s", 'MaxPit': "%s",
-               'Msil': "%s", 'Mpit': "%s", 'Mchr': "%s"}
-
-       def dir_eval(self):
-               """ evaluate statistical data over the directory """
-               v = self.v
-               v['mode']      = self.params.pitchmode
-
-       def file_exec(self,input,output):
-               filetask = self.task(input,params=self.params)
-               computed_data = filetask.compute_all()
-               osil, esil, opit, epit, echr = filetask.eval(computed_data,tol=0.5)
-               self.v['truth'].append(int(filetask.truth))
-               assert opit > 0
-               
-               self.v['osil'].append(osil)
-               self.v['esil'].append(esil)
-               self.v['opit'].append(opit)
-               self.v['epit'].append(epit)
-               self.v['echr'].append(echr)
-
-               self.v['Msil'].append(esil/float(osil)*100.)
-               self.v['Mpit'].append(epit/float(opit)*100.)
-               self.v['Mchr'].append(echr/float(opit)*100.)
-               #print results#, computed_data
-               #print input, results, results - float(input.split('.')[-2])
-                       
-       def run_bench(self,modes=['schmitt']):
-               from os.path import basename
-               self.modes = modes
-               self.pretty_titles()
-               d = []
-               for mode in self.modes:
-                       self.params.pitchmode = mode
-                       self.dir_exec()
-                       self.dir_eval()
-                       truth   = [i for i in range(min(self.v['truth']),max(self.v['truth'])+1)]
-                       allOsil = [0 for i in range(min(self.v['truth']),max(self.v['truth'])+1)]
-                       allEsil = [0 for i in range(min(self.v['truth']),max(self.v['truth'])+1)]
-                       allOpit = [0 for i in range(min(self.v['truth']),max(self.v['truth'])+1)]
-                       allEpit = [0 for i in range(min(self.v['truth']),max(self.v['truth'])+1)]
-                       allEchr = [0 for i in range(min(self.v['truth']),max(self.v['truth'])+1)]
-                       allMsil = [0 for i in range(min(self.v['truth']),max(self.v['truth'])+1)]
-                       allMpit = [0 for i in range(min(self.v['truth']),max(self.v['truth'])+1)]
-                       allMchr = [0 for i in range(min(self.v['truth']),max(self.v['truth'])+1)]
-                       for i in range(len(self.v['truth'])):
-                               allOsil[self.v['truth'][i]-min(self.v['truth'])] += self.v['osil'][i]
-                               allEsil[self.v['truth'][i]-min(self.v['truth'])] += self.v['esil'][i]
-                               allOpit[self.v['truth'][i]-min(self.v['truth'])] += self.v['opit'][i]
-                               allEpit[self.v['truth'][i]-min(self.v['truth'])] += self.v['epit'][i]
-                               allEchr[self.v['truth'][i]-min(self.v['truth'])] += self.v['echr'][i]
-                       for i in range(len(truth)):
-                               allOsil[i] = max(1,allOsil[i])
-                               allOpit[i] = max(1,allOpit[i])
-                               allMsil[i] = allEsil[i]/float(allOsil[i])*100.
-                               allMpit[i] = allEpit[i]/float(allOpit[i])*100.
-                               allMchr[i] = allEchr[i]/float(allOpit[i])*100.
-                       self.v['TotalSil'] = sum(allMsil)/len(truth)
-                       self.v['TotalPit'] = sum(allMpit)/len(truth)
-                       self.v['TotalChr'] = sum(allMchr)/len(truth)
-                       self.v['MinPit'] = min(truth) 
-                       self.v['MaxPit'] = max(truth) 
-                       self.pretty_print()
-
-                       plot = []
-                       self.plotpitchtessiture(plot,
-                               truth, 
-                               allMpit,
-                               plottitle="%s %s" % (self.v['mode'],self.params.bufsize),
-                               plotmode='lines')
-                       self.plotpitchtessiture(plot,
-                               truth, 
-                               allMchr,
-                               plottitle="%s %s" % (self.v['mode'],"%12"),
-                               plotmode='lines')
-                       """
-                       self.plotpitchtessiture(plot,
-                               truth, 
-                               allMsil,
-                               plottitle="%s %s" % (self.v['mode'],"sil"),
-                               plotmode='lines')
-                       """
-                       title = basename(self.datadir)
-                       d.append(plot)
-               outplot = "_-_".join(('pitchtessiture',title))
-               self.xmin = 20. #min(self.v['truth'])
-               self.xmax = 110. #max(self.v['truth'])
-               for ext in ('ps','png','svg',''):
-                       self.plotplotpitchtessiture(d,
-                               plottitle="".join(['Performance against MIDI Note number (',
-                                       title,
-                                       ", %s" % len(self.sndlist), " samples)"]),
-                               outplot=outplot,
-                               extension=ext)
-               #d.append('beta = .25,orig(x) title \"-2 octave\"')
-               #d.append('beta = .50,orig(x) title \"-1 octave\"')
-               #d.append('beta = 1.0,orig(x) title \"original\"')
-               #d.append('beta = 2.0,orig(x) title \"+1 octave\"')
-
-       """
-       Plot functions 
-       """
-
-       def plotpitchtessiture(self,d,lx,ly,plottitle="",plotmode='linespoints'):
-               import Gnuplot, Gnuplot.funcutils
-               d.append(Gnuplot.Data(lx, ly, with=plotmode, title="%s" % (plottitle) ))
-
-       def plotplotpitchtessiture(self,d,plottitle='',outplot=0,extension='',multiplot=1):
-               from aubio.gnuplot import gnuplot_create
-               g = gnuplot_create(outplot=outplot,extension=extension) 
-               #g.title(plottitle)
-               #g('orig(x) = beta*x')
-               #g.xlabel('original pitch (Hz)')
-               #g.ylabel('detected pitch (Hz)')
-               #g('set key left top')
-               #g('set log xy')
-               #g('set xrange [50:2000]')
-               g('set yrange [0:100]')
-               #g.plot(*d)
-               if multiplot:
-                       g('set multiplot')
-                       for i in range(len(d)):
-                               # plot onset detection functions
-                               g('set size   1,%f' % ( 1.0/float(len(d)) ) )
-                               g('set origin 0,%f' % ( 1.0*float(len(d)-i-1)/float(len(d)) ) )
-                               # erase axis
-                               g('set border 3')
-                               g('set xtics nomirror')
-                               g('set ytics nomirror')
-                               g('set key left top')
-                               g('set xrange [%f:%f]' % (self.xmin,self.xmax)) #(self.xmax - (self.xmax-self.xmin)*5./4.,self.xmax))
-                               #g.ylabel('%Correct detections')
-                               if i == len(d)-1:
-                                       g.xlabel(plottitle)
-                               g.plot(*d[i])
-                               g('unset title')
-                       g('unset multiplot')
-               else:
-                       g.plot(*d)
-
-
-if __name__ == "__main__":
-       import sys
-       if len(sys.argv) > 1: datapath = sys.argv[1]
-       else: print "error: a path is required"; sys.exit(1)
-       if len(sys.argv) > 2:
-               for each in sys.argv[3:-1]: print each
-       modes = ['schmitt', 'yin', 'yinfft', 'mcomb', 'fcomb']
-
-       params = taskparams()
-       params.bufsize = 2048 #4096 
-       params.hopsize = 256
-       params.silence = -70.
-       params.pitchsmooth = 0 
-       params.pitchmax = 20000
-       params.pitchmin = 20
-       params.pitchyinfft = 0.95
-       benchpitch = benchpitch(datapath,params=params)
-       benchpitch.task = taskpitch
-
-       #benchpitch.titles  = [ 'mode', 'thres', 'avg', 'avgdist' ]
-       #benchpitch.formats = ["%12s" , "| %6s", "| %6s", "| %6s", "| %6s", "| %6s" ]
-       try:
-               benchpitch.run_bench(modes=modes)
-       except KeyboardInterrupt:
-               print "Interrupted by user"
-               sys.exit(1)
-
-       sys.exit(0)
diff --git a/python/test/bench/pitch/bench-pitch-isolated b/python/test/bench/pitch/bench-pitch-isolated
new file mode 100755 (executable)
index 0000000..a8ea613
--- /dev/null
@@ -0,0 +1,190 @@
+#! /usr/bin/python
+
+from aubio.bench.node import *
+from aubio.task import *
+
+class benchpitch(bench):
+       
+       """ list of values to store per file """
+       valuenames = ['mode']
+       """ list of lists to store per file """
+       valuelists = ['truth', 'osil', 'esil', 'opit', 'epit', 'echr', 
+               'Msil', 'Mpit', 'Mchr',
+              'TotalPit', 'TotalPit', 'TotalChr' ]
+       """ list of values to print per dir """
+       printnames = [ 'mode', 'MinPit', 'MaxPit', 'TotalSil', 'TotalPit', 'TotalChr']
+
+       """ per dir """
+       formats = {'mode': "%12s" , 
+               'truth': "%s",
+               'osil': "%s", 'esil': "%s", 
+               'opit': "%s", 'epit': "%s", 'echr': "%s",
+               'TotalPit': "%s", 'TotalSil': "%s", 'TotalChr': "%s",
+               'MinPit': "%s", 'MaxPit': "%s",
+               'Msil': "%s", 'Mpit': "%s", 'Mchr': "%s"}
+
+       def dir_eval(self):
+               """ evaluate statistical data over the directory """
+               v = self.v
+               v['mode']      = self.params.pitchmode
+
+       def file_exec(self,input,output):
+               filetask = self.task(input,params=self.params)
+               computed_data = filetask.compute_all()
+               osil, esil, opit, epit, echr = filetask.eval(computed_data,tol=0.5)
+               self.v['truth'].append(int(filetask.truth))
+               assert opit > 0
+               
+               self.v['osil'].append(osil)
+               self.v['esil'].append(esil)
+               self.v['opit'].append(opit)
+               self.v['epit'].append(epit)
+               self.v['echr'].append(echr)
+
+               self.v['Msil'].append(esil/float(osil)*100.)
+               self.v['Mpit'].append(epit/float(opit)*100.)
+               self.v['Mchr'].append(echr/float(opit)*100.)
+               #print results#, computed_data
+               #print input, results, results - float(input.split('.')[-2])
+                       
+       def run_bench(self,modes=['schmitt'],multiplot=0):
+               from os.path import basename
+               self.modes = modes
+               self.pretty_titles()
+               d = []
+               for mode in self.modes:
+                       self.params.pitchmode = mode
+                       self.dir_exec()
+                       self.dir_eval()
+                       truth   = [i for i in range(min(self.v['truth']),max(self.v['truth'])+1)]
+                       allOsil = [0 for i in range(min(self.v['truth']),max(self.v['truth'])+1)]
+                       allEsil = [0 for i in range(min(self.v['truth']),max(self.v['truth'])+1)]
+                       allOpit = [0 for i in range(min(self.v['truth']),max(self.v['truth'])+1)]
+                       allEpit = [0 for i in range(min(self.v['truth']),max(self.v['truth'])+1)]
+                       allEchr = [0 for i in range(min(self.v['truth']),max(self.v['truth'])+1)]
+                       allMsil = [0 for i in range(min(self.v['truth']),max(self.v['truth'])+1)]
+                       allMpit = [0 for i in range(min(self.v['truth']),max(self.v['truth'])+1)]
+                       allMchr = [0 for i in range(min(self.v['truth']),max(self.v['truth'])+1)]
+                       for i in range(len(self.v['truth'])):
+                               allOsil[self.v['truth'][i]-min(self.v['truth'])] += self.v['osil'][i]
+                               allEsil[self.v['truth'][i]-min(self.v['truth'])] += self.v['esil'][i]
+                               allOpit[self.v['truth'][i]-min(self.v['truth'])] += self.v['opit'][i]
+                               allEpit[self.v['truth'][i]-min(self.v['truth'])] += self.v['epit'][i]
+                               allEchr[self.v['truth'][i]-min(self.v['truth'])] += self.v['echr'][i]
+                       for i in range(len(truth)):
+                               allOsil[i] = max(1,allOsil[i])
+                               allOpit[i] = max(1,allOpit[i])
+                               allMsil[i] = allEsil[i]/float(allOsil[i])*100.
+                               allMpit[i] = allEpit[i]/float(allOpit[i])*100.
+                               allMchr[i] = allEchr[i]/float(allOpit[i])*100.
+                       self.v['TotalSil'] = sum(allMsil)/len(truth)
+                       self.v['TotalPit'] = sum(allMpit)/len(truth)
+                       self.v['TotalChr'] = sum(allMchr)/len(truth)
+                       self.v['MinPit'] = min(truth) 
+                       self.v['MaxPit'] = max(truth) 
+                       self.pretty_print()
+
+                       plot = []
+                       self.plotpitchtessiture(plot,
+                               truth, 
+                               allMpit,
+                               plottitle="%s %s" % (self.v['mode'],self.params.bufsize),
+                               plotmode='lines')
+                       """
+                       self.plotpitchtessiture(plot,
+                               truth, 
+                               allMchr,
+                               plottitle="%s %s" % (self.v['mode'],"%12"),
+                               plotmode='lines')
+                       self.plotpitchtessiture(plot,
+                               truth, 
+                               allMsil,
+                               plottitle="%s %s" % (self.v['mode'],"sil"),
+                               plotmode='lines')
+                       """
+                       title = basename(self.datadir)
+                       if multiplot:
+                               d.append(plot)
+                       else:
+                               d += plot
+               outplot = "_-_".join(('pitchtessiture',title))
+               self.xmin = min(self.v['truth']) #20.
+               self.xmax = max(self.v['truth'])
+               for ext in ('ps','png','svg'): #,''):
+                       self.plotplotpitchtessiture(d,
+                               plottitle="".join(['Performance against MIDI Note number (',
+                                       title,
+                                       ", %s" % len(self.sndlist), " samples)"]),
+                               outplot=outplot,
+                               extension=ext,multiplot=multiplot)
+               #d.append('beta = .25,orig(x) title \"-2 octave\"')
+               #d.append('beta = .50,orig(x) title \"-1 octave\"')
+               #d.append('beta = 1.0,orig(x) title \"original\"')
+               #d.append('beta = 2.0,orig(x) title \"+1 octave\"')
+
+       """
+       Plot functions 
+       """
+
+       def plotpitchtessiture(self,d,lx,ly,plottitle="",plotmode='linespoints'):
+               import Gnuplot, Gnuplot.funcutils
+               d.append(Gnuplot.Data(lx, ly, with=plotmode, title="%s" % (plottitle) ))
+
+       def plotplotpitchtessiture(self,d,plottitle='',outplot=0,extension='',multiplot=1):
+               from aubio.gnuplot import gnuplot_create
+               g = gnuplot_create(outplot=outplot,extension=extension) 
+               #g.title(plottitle)
+               #g('orig(x) = beta*x')
+               g.title(plottitle)
+               g('set yrange [50:100]')
+               # erase axis
+               g('set xrange [%f:%f]' % (self.xmin,self.xmax)) #(self.xmax - (self.xmax-self.xmin)*5./4.,self.xmax))
+               #g.plot(*d)
+               g('set border 3')
+               g('set xtics nomirror')
+               g('set ytics nomirror')
+               g('set key bottom')
+               if multiplot:
+                       g('set multiplot')
+                       for i in range(len(d)):
+                               # plot onset detection functions
+                               g('set size   1,%f' % ( 1.0/float(len(d)) ) )
+                               g('set origin 0,%f' % ( 1.0*float(len(d)-i-1)/float(len(d)) ) )
+                               #g.ylabel('%Correct detections')
+                               g('set xrange [%f:%f]' % (self.xmin,self.xmax)) #(self.xmax - (self.xmax-self.xmin)*5./4.,self.xmax))
+                               g.plot(*d[i])
+                               g('unset title')
+                       g('unset multiplot')
+               else:
+                       g.plot(*d)
+
+
+if __name__ == "__main__":
+       import sys
+       if len(sys.argv) > 1: datapath = sys.argv[1]
+       else: print "error: a path is required"; sys.exit(1)
+       if len(sys.argv) > 2:
+               for each in sys.argv[3:-1]: print each
+       modes = ['schmitt', 'yin', 'yinfft', 'mcomb', 'fcomb']
+       #modes = ['mcomb']
+
+       params = taskparams()
+       params.bufsize = 2048 # 4096 
+       params.hopsize = 256
+       params.silence = -60.
+       params.pitchsmooth = 0 
+       params.pitchmax = 20000
+       params.pitchmin = 20
+       params.pitchyinfft = 0.95
+       benchpitch = benchpitch(datapath,params=params)
+       benchpitch.task = taskpitch
+
+       #benchpitch.titles  = [ 'mode', 'thres', 'avg', 'avgdist' ]
+       #benchpitch.formats = ["%12s" , "| %6s", "| %6s", "| %6s", "| %6s", "| %6s" ]
+       try:
+               benchpitch.run_bench(modes=modes)
+       except KeyboardInterrupt:
+               print "Interrupted by user"
+               sys.exit(1)
+
+       sys.exit(0)