Changeset 4f4a8a4 for python


Ignore:
Timestamp:
Dec 19, 2005, 10:25:51 PM (19 years ago)
Author:
Paul Brossier <piem@altern.org>
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:
f2adb86
Parents:
7c9ad74
Message:

move to new nodes and tasks
move to new nodes and tasks

Location:
python
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • python/aubiocut

    r7c9ad74 r4f4a8a4  
    1616                          action="store", dest="filename",
    1717                          help="input sound file")
    18         parser.add_option("-m","--mode", action="callback",
    19                           callback=check_onset_mode, dest="mode", default=['dual'],
     18        parser.add_option("-m","--mode",
     19                          action="store", dest="mode", default=['dual'],
    2020                          help="onset detection mode [default=dual] \
    2121                          complexdomain|hfc|phase|specdiff|energy|kl|mkl|dual")
     
    8181
    8282filename   = options.filename
    83 samplerate = float(sndfile(filename).samplerate())
    84 hopsize    = int(options.hopsize)
    85 bufsize    = int(options.bufsize)
    86 step       = float(samplerate)/float(hopsize)
    87 threshold  = float(options.threshold)
    88 zerothres  = float(options.zerothres)
    89 silence    = float(options.silence)
    90 mintol     = float(options.mintol)*step
    91 mode       = options.mode
     83params = taskparams()
     84params.hopsize    = int(options.hopsize)
     85params.bufsize    = int(options.bufsize)
     86params.threshold  = float(options.threshold)
     87params.zerothres  = float(options.zerothres)
     88params.silence    = float(options.silence)
     89params.mintol     = float(options.mintol)
    9290# default take back system delay
    9391if options.delay: delay = float(options.delay)
    94 else:             delay = 3./step
     92else:             delay = 3./params.step
    9593
    9694if options.beat:
     
    9997elif options.silencecut:
    10098        onsets = getsilences(filename,hopsize=hopsize,silence=silence)
    101 elif options.plot: storefunc=True
    102 else:              storefunc=False
     99elif options.plot: params.storefunc=True
     100else:              params.storefunc=False
    103101
    104102lonsets, lofunc = [], []
    105 for i in range(len(mode)):
    106         onsets, ofunc = getonsets(filename,threshold,silence,
    107                 mode=mode[i],localmin=options.localmin,
    108                 derivate=options.derivate,
    109                 bufsize=bufsize,hopsize=hopsize,storefunc=True)
     103modes = options.mode.split(',')
     104for i in range(len(modes)):
     105
     106        params.onsetmode = modes[i]
     107        filetask = taskonset(filename,params=params)
     108        onsets = filetask.compute_all()
     109        ofunc = filetask.ofunc
     110        #onsets, ofunc = getonsets(filename,threshold,silence,
     111        #        mode=mode[i],localmin=options.localmin,
     112        #        derivate=options.derivate,
     113        #        bufsize=bufsize,hopsize=hopsize,storefunc=True)
    110114
    111115        # take back system delay
    112116        if delay != 0:
    113                 for i in range(len(onsets)):
    114                         onsets[i] -= delay*step
     117                for each in range(len(onsets)):
     118                        onsets[each] = onsets[each][0] - delay*params.step
    115119
    116120        # prune doubled
    117         if mintol > 0:
    118                 last = -2*mintol
     121        params.mintol *= params.step
     122        if params.mintol > 0:
     123                last = -2*params.mintol
    119124                newonsets = []
    120125                for new in onsets:
    121                         if (new - last > mintol):
     126                        if (new - last > params.mintol):
    122127                                newonsets.append(new)
    123128                        last = new
     
    127132        lofunc.append(ofunc)
    128133
    129 # print times in second
    130 if options.verbose:
    131         maxonset = 0
    132         for j in range(len(mode)):
    133                 for i in range(len(lonsets[j])):
    134                         print lonsets[j][i]/step
     134        # print times in second
     135        if options.verbose:
     136                print modes[i]
     137                maxonset = 0
     138                for i in range(len(onsets)):
     139                                print onsets[i]*params.step
    135140
    136 if options.plot:
    137         from aubio.gnuplot import plot_onsets
    138         plot_onsets(filename, lonsets, lofunc,
    139                 samplerate=samplerate, hopsize=hopsize, outplot=options.outplot)
     141        if options.plot:
     142                filetask.plot(onsets, ofunc)
     143                filetask.plotplot(outplot=options.outplot)
    140144
    141145if options.cut:
    142         cutfile(filename,onsets,zerothres=zerothres,bufsize=bufsize,hopsize=hopsize)
     146        a = taskcut(filename,onsets,params=params)
     147        a.compute_all()
  • python/bench-onset

    r7c9ad74 r4f4a8a4  
    11#! /usr/bin/python
    22
    3 from aubio.bench.config import *
    43from aubio.bench.node import *
    5 
    6 class onset_parameters:
    7         def __init__(self):
    8                 """ set default parameters """
    9                 self.silence = -70
    10                 self.derivate = False
    11                 self.localmin = False
    12                 self.bufsize = 512
    13                 self.hopsize = 256
    14                 self.samplerate = 44100
    15                 self.tol = 0.05
    16                 self.step = float(self.hopsize)/float(self.samplerate)
    17                 self.threshold = 0.1
    18                 self.mode = 'dual'
     4from aubio.tasks import *
    195
    206class benchonset(bench):
    217       
    22         def compute_results(self):
     8        def dir_eval(self):
    239                self.P = 100*float(self.expc-self.missed-self.merged)/(self.expc-self.missed-self.merged + self.bad+self.doubled)
    2410                self.R = 100*float(self.expc-self.missed-self.merged)/(self.expc-self.missed-self.merged + self.missed+self.merged)
     
    2612                self.F = 2* self.P*self.R / (self.P+self.R)
    2713
    28                 self.values = [self.params.mode,
     14                self.values = [self.params.onsetmode,
    2915                "%2.3f" % self.params.threshold,
    3016                self.orig,
     
    4329                "%2.3f" % self.F  ]
    4430
    45         def compute_onset(self,input,output):
    46                 from aubio.tasks import getonsets, get_onset_mode
    47                 from aubio.onsetcompare import onset_roc, onset_diffs
    48                 from aubio.txtfile import read_datafile
    49                 amode = 'roc'
    50                 vmode = 'verbose'
    51                 vmode = ''
    52                 lres, ofunc = getonsets(input,
    53                         self.params.threshold,
    54                         self.params.silence,
    55                         mode=get_onset_mode(self.params.mode),
    56                         localmin=self.params.localmin,
    57                         derivate=self.params.derivate,
    58                         bufsize=self.params.bufsize,
    59                         hopsize=self.params.hopsize,
    60                         storefunc=False)
     31        def file_exec(self,input,output):
     32                filetask = self.task(input,params=self.params)
     33                computed_data = filetask.compute_all()
     34                results = filetask.eval(computed_data)
     35                self.orig    += filetask.orig
     36                self.missed  += filetask.missed
     37                self.merged  += filetask.merged
     38                self.expc    += filetask.expc
     39                self.bad     += filetask.bad
     40                self.doubled += filetask.doubled
    6141
    62                 for i in range(len(lres)): lres[i] = lres[i]*self.params.step
    63                 ltru = read_datafile(input.replace('.wav','.txt'),depth=0)
    64                 if vmode=='verbose':
    65                         print "Running with mode %s" % self.params.mode,
    66                         print " and threshold %f" % self.params.threshold,
    67                         print " on file", input
    68                 #print ltru; print lres
    69                 if amode == 'localisation':
    70                         l = onset_diffs(ltru,lres,self.params.tol)
    71                         mean = 0
    72                         for i in l: mean += i
    73                         if len(l): print "%.3f" % (mean/len(l))
    74                         else: print "?0"
    75                 elif amode == 'roc':
    76                         orig, missed, merged, expc, bad, doubled = onset_roc(ltru,lres,self.params.tol)
    77                         self.orig    += orig
    78                         self.missed  += missed
    79                         self.merged  += merged
    80                         self.expc    += expc
    81                         self.bad     += bad
    82                         self.doubled += doubled
    83                 self.compute_results()
    84                        
    85         def compute_data(self):
    86                 self.orig, self.missed, self.merged, self.expc, \
    87                         self.bad, self.doubled = 0, 0, 0, 0, 0, 0
    88                 act_on_data(self.compute_onset,self.datadir,self.resdir, \
    89                         suffix='',filter='f -name \'*.wav\'')
    9042
    9143        def run_bench(self,modes=['dual'],thresholds=[0.5]):
     
    9547                self.pretty_print(self.titles)
    9648                for mode in self.modes:
    97                         self.params.mode = mode
     49                        self.params.onsetmode = mode
    9850                        for threshold in self.thresholds:
    9951                                self.params.threshold = threshold
    100                                 self.compute_data()
    101                                 self.compute_results()
     52                                self.dir_exec()
     53                                self.dir_eval()
    10254                                self.pretty_print(self.values)
    10355
     
    11062                        lesst = thresholds[0]
    11163                        topt = thresholds[1]
    112                         self.params.mode = mode
     64                        self.params.onsetmode = mode
    11365
    11466                        self.params.threshold = topt
    115                         self.compute_data()
     67                        self.dir_exec()
     68                        self.dir_eval()
    11669                        self.pretty_print(self.values)
    11770                        topF = self.F
    11871
    11972                        self.params.threshold = lesst
    120                         self.compute_data()
     73                        self.dir_exec()
     74                        self.dir_eval()
    12175                        self.pretty_print(self.values)
    12276                        lessF = self.F
     
    12478                        for i in range(steps):
    12579                                self.params.threshold = ( lesst + topt ) * .5
    126                                 self.compute_data()
     80                                self.dir_exec()
     81                                self.dir_eval()
    12782                                self.pretty_print(self.values)
    12883                                if self.F == 100.0 or self.F == topF:
     
    14499
    145100
    146 #modes = [ 'complex' ]
    147 modes = ['complex', 'energy', 'phase', 'specdiff', 'kl', 'mkl', 'dual']
    148 #thresholds = [1.5]
    149 thresholds = [ 0.01, 0.05, 0.1, 0.2, 0.3, 0.4, 0.5]
     101if __name__ == "__main__":
     102        import sys
     103        if len(sys.argv) > 1: datapath = sys.argv[1]
     104        else: print "ERR: a path is required"; sys.exit(1)
     105        modes = ['complex', 'energy', 'phase', 'specdiff', 'kl', 'mkl', 'dual']
     106        #modes = [ 'complex' ]
     107        thresholds = [ 0.01, 0.05, 0.1, 0.2, 0.3, 0.4, 0.5]
     108        #thresholds = [1.5]
    150109
    151 #datapath = "%s%s" % (DATADIR,'/onset/DB/*/')
    152 datapath = "%s%s" % (DATADIR,'/onset/DB/PercussivePhrases/RobertRich')
    153 respath = '/var/tmp/DB-testings'
     110        #datapath = "%s%s" % (DATADIR,'/onset/DB/*/')
     111        respath = '/var/tmp/DB-testings'
    154112
    155 benchonset = benchonset(datapath,respath,checkres=True,checkanno=True)
     113        benchonset = benchonset(datapath,respath,checkres=True,checkanno=True)
     114        benchonset.params = taskparams()
     115        benchonset.task = taskonset
    156116
    157 benchonset.params = onset_parameters()
     117        benchonset.titles = [ 'mode', 'thres', 'orig', 'expc', 'missd', 'mergd',
     118        'bad', 'doubl', 'corrt', 'GD', 'FP', 'GD-merged', 'FP-pruned',
     119        'prec', 'recl', 'dist' ]
     120        benchonset.formats = ["%12s" , "| %6s", "| %6s", "| %6s", "| %6s", "| %6s",
     121        "| %6s", "| %6s", "| %6s", "| %8s", "| %8s", "| %8s", "| %8s",
     122        "| %6s", "| %6s", "| %6s"]
    158123
    159 benchonset.titles = [ 'mode', 'thres', 'orig', 'expc', 'missd', 'mergd',
    160 'bad', 'doubl', 'corrt', 'GD', 'FP', 'GD-merged', 'FP-pruned',
    161 'prec', 'recl', 'dist' ]
    162 benchonset.formats = ["%12s" , "| %6s", "| %6s", "| %6s", "| %6s", "| %6s",
    163 "| %6s", "| %6s", "| %6s", "| %8s", "| %8s", "| %8s", "| %8s",
    164 "| %6s", "| %6s", "| %6s"]
    165 
    166 #benchonset.run_bench(modes=modes,thresholds=thresholds)
    167 benchonset.auto_learn(modes=modes)
    168 
    169 #        gatherdata
    170 #act_on_data(my_print,datapath,respath,suffix='.txt',filter='f -name \'*.wav\'')
    171 #        gatherthreshold
    172 #        gathermodes
    173 #        comparediffs
    174 #        gatherdiffs
    175 
    176 
     124        try:
     125                benchonset.auto_learn(modes=modes)
     126                #benchonset.run_bench(modes=modes)
     127        except KeyboardInterrupt:
     128                sys.exit(1)
  • python/bench-pitch

    r7c9ad74 r4f4a8a4  
    66class benchpitch(bench):
    77       
    8         def compute_file(self,input,output):
     8        def file_exec(self,input,output):
    99                filetask = self.task(input,params=self.params)
    1010                computed_data = filetask.compute_all()
     
    1313                truth = filetask.gettruth()
    1414                #print input, results, results - float(input.split('.')[-2])
    15                 self.pretty_print((self.params.mode, truth,
     15                self.pretty_print((self.params.pitchmode, truth,
    1616                        truth - results[0], results[0],
    1717                        truth - results[1], results[1]))
    1818                       
    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
    27 
    28         def run_bench(self,modes=['dual']):
     19        def run_bench(self,modes=['schmitt']):
    2920                self.modes = modes
    3021                self.pretty_print(self.titles)
    3122                for mode in self.modes:
    32                         self.params.mode = mode
    33                         self.compute_data()
    34                         #self.compute_results()
    35                         #self.pretty_print(self.results)
     23                        self.params.pitchmode = mode
     24                        self.dir_exec()
     25                        self.dir_eval()
     26                        self.dir_plot()
    3627
    3728if __name__ == "__main__":
     
    3930        if len(sys.argv) > 1: datapath = sys.argv[1]
    4031        else: print "error: a path is required"; sys.exit(1)
    41 
    42         modes = ['schmitt', 'yin', 'mcomb', 'fcomb']
     32        if len(sys.argv) > 2:
     33                for each in sys.argv[3:-1]: print each
     34        modes = ['yin', 'schmitt', 'mcomb', 'fcomb']
    4335
    4436        benchpitch = benchpitch(datapath)
    4537        benchpitch.params = taskparams()
    4638        benchpitch.task = taskpitch
     39
    4740
    4841        benchpitch.titles  = [ 'mode', 'thres', 'avg', 'avgdist' ]
Note: See TracChangeset for help on using the changeset viewer.