source: python/test/bench/pitch/bench-pitch @ 897b455

feature/autosinkfeature/cnnfeature/cnn_orgfeature/constantqfeature/crepefeature/crepe_orgfeature/pitchshiftfeature/pydocstringsfeature/timestretchfix/ffmpeg5pitchshiftsamplertimestretchyinfft+
Last change on this file since 897b455 was ee7b9da, checked in by Paul Brossier <piem@altern.org>, 19 years ago

new bench-pitch
new bench-pitch

  • Property mode set to 100755
File size: 3.1 KB
Line 
1#! /usr/bin/python
2
3from aubio.bench.node import *
4from aubio.tasks import *
5
6class benchpitch(bench):
7       
8        """ list of values to store per file """
9        valuenames = ['mode']
10        """ list of lists to store per file """
11        valuelists = ['orig', 'mean', 'med']
12        """ list of values to print per dir """
13        printnames = [ 'mode']
14
15        """ 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"}
24
25        def dir_eval(self):
26                """ evaluate statistical data over the directory """
27                v = self.v
28
29                v['mode']      = self.params.pitchmode
30
31        def file_exec(self,input,output):
32                filetask = self.task(input,params=self.params)
33                computed_data = filetask.compute_all()
34                orig,mean,med = filetask.eval(computed_data)
35               
36                self.v['orig'].append(orig)
37                self.v['mean'].append(mean)
38                self.v['med'].append(med)
39                #print results#, computed_data
40                #print input, results, results - float(input.split('.')[-2])
41                       
42        def run_bench(self,modes=['schmitt']):
43                from os.path import basename
44                d = []
45                self.modes = modes
46                self.pretty_titles()
47                for mode in self.modes:
48                        self.params.pitchmode = mode
49                        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)
60                outplot = "_-_".join(('pitchtessiture',title))
61                for ext in ('ps','png','svg',''):
62                        self.plotplotpitchtessiture(d,
63                                plottitle=title,
64                                outplot=outplot,
65                                extension=ext)
66
67        """
68        Plot functions
69        """
70
71        def plotpitchtessiture(self,d,lx,ly,plottitle="",plotmode='linespoints'):
72                import Gnuplot, Gnuplot.funcutils
73                d.append(Gnuplot.Data(lx, ly, with=plotmode, title="%s" % (plottitle) ))
74
75        def plotplotpitchtessiture(self,d,plottitle='',outplot=0,extension=''):
76                from aubio.gnuplot import gnuplot_create
77                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 log xy')
83                g.plot(*d)
84
85
86if __name__ == "__main__":
87        import sys
88        if len(sys.argv) > 1: datapath = sys.argv[1]
89        else: print "error: a path is required"; sys.exit(1)
90        if len(sys.argv) > 2:
91                for each in sys.argv[3:-1]: print each
92        modes = ['schmitt', 'yin', 'mcomb', 'fcomb']
93        #modes = ['fcomb']
94
95        params = taskparams()
96        params.bufsize = 2048
97        params.hopsize = params.bufsize/2
98        benchpitch = benchpitch(datapath,params=params)
99        benchpitch.task = taskpitch
100
101        #benchpitch.titles  = [ 'mode', 'thres', 'avg', 'avgdist' ]
102        #benchpitch.formats = ["%12s" , "| %6s", "| %6s", "| %6s", "| %6s", "| %6s" ]
103        try:
104                benchpitch.run_bench(modes=modes)
105        except KeyboardInterrupt:
106                print "Interrupted by user"
107                sys.exit(1)
108
109        sys.exit(0)
Note: See TracBrowser for help on using the repository browser.