- Timestamp:
- Dec 19, 2005, 10:25:51 PM (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:
- f2adb86
- Parents:
- 7c9ad74
- Location:
- python
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
python/aubiocut
r7c9ad74 r4f4a8a4 16 16 action="store", dest="filename", 17 17 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'], 20 20 help="onset detection mode [default=dual] \ 21 21 complexdomain|hfc|phase|specdiff|energy|kl|mkl|dual") … … 81 81 82 82 filename = 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 83 params = taskparams() 84 params.hopsize = int(options.hopsize) 85 params.bufsize = int(options.bufsize) 86 params.threshold = float(options.threshold) 87 params.zerothres = float(options.zerothres) 88 params.silence = float(options.silence) 89 params.mintol = float(options.mintol) 92 90 # default take back system delay 93 91 if options.delay: delay = float(options.delay) 94 else: delay = 3./ step92 else: delay = 3./params.step 95 93 96 94 if options.beat: … … 99 97 elif options.silencecut: 100 98 onsets = getsilences(filename,hopsize=hopsize,silence=silence) 101 elif options.plot: storefunc=True102 else: storefunc=False99 elif options.plot: params.storefunc=True 100 else: params.storefunc=False 103 101 104 102 lonsets, 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) 103 modes = options.mode.split(',') 104 for 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) 110 114 111 115 # take back system delay 112 116 if delay != 0: 113 for iin range(len(onsets)):114 onsets[i] -= delay*step117 for each in range(len(onsets)): 118 onsets[each] = onsets[each][0] - delay*params.step 115 119 116 120 # 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 119 124 newonsets = [] 120 125 for new in onsets: 121 if (new - last > mintol):126 if (new - last > params.mintol): 122 127 newonsets.append(new) 123 128 last = new … … 127 132 lofunc.append(ofunc) 128 133 129 # print times in second130 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]/step134 # 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 135 140 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) 140 144 141 145 if 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 1 1 #! /usr/bin/python 2 2 3 from aubio.bench.config import *4 3 from 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' 4 from aubio.tasks import * 19 5 20 6 class benchonset(bench): 21 7 22 def compute_results(self):8 def dir_eval(self): 23 9 self.P = 100*float(self.expc-self.missed-self.merged)/(self.expc-self.missed-self.merged + self.bad+self.doubled) 24 10 self.R = 100*float(self.expc-self.missed-self.merged)/(self.expc-self.missed-self.merged + self.missed+self.merged) … … 26 12 self.F = 2* self.P*self.R / (self.P+self.R) 27 13 28 self.values = [self.params. mode,14 self.values = [self.params.onsetmode, 29 15 "%2.3f" % self.params.threshold, 30 16 self.orig, … … 43 29 "%2.3f" % self.F ] 44 30 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 61 41 62 for i in range(len(lres)): lres[i] = lres[i]*self.params.step63 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", input68 #print ltru; print lres69 if amode == 'localisation':70 l = onset_diffs(ltru,lres,self.params.tol)71 mean = 072 for i in l: mean += i73 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 += orig78 self.missed += missed79 self.merged += merged80 self.expc += expc81 self.bad += bad82 self.doubled += doubled83 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, 088 act_on_data(self.compute_onset,self.datadir,self.resdir, \89 suffix='',filter='f -name \'*.wav\'')90 42 91 43 def run_bench(self,modes=['dual'],thresholds=[0.5]): … … 95 47 self.pretty_print(self.titles) 96 48 for mode in self.modes: 97 self.params. mode = mode49 self.params.onsetmode = mode 98 50 for threshold in self.thresholds: 99 51 self.params.threshold = threshold 100 self. compute_data()101 self. compute_results()52 self.dir_exec() 53 self.dir_eval() 102 54 self.pretty_print(self.values) 103 55 … … 110 62 lesst = thresholds[0] 111 63 topt = thresholds[1] 112 self.params. mode = mode64 self.params.onsetmode = mode 113 65 114 66 self.params.threshold = topt 115 self.compute_data() 67 self.dir_exec() 68 self.dir_eval() 116 69 self.pretty_print(self.values) 117 70 topF = self.F 118 71 119 72 self.params.threshold = lesst 120 self.compute_data() 73 self.dir_exec() 74 self.dir_eval() 121 75 self.pretty_print(self.values) 122 76 lessF = self.F … … 124 78 for i in range(steps): 125 79 self.params.threshold = ( lesst + topt ) * .5 126 self.compute_data() 80 self.dir_exec() 81 self.dir_eval() 127 82 self.pretty_print(self.values) 128 83 if self.F == 100.0 or self.F == topF: … … 144 99 145 100 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] 101 if __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] 150 109 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' 154 112 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 156 116 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"] 158 123 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 6 6 class benchpitch(bench): 7 7 8 def compute_file(self,input,output):8 def file_exec(self,input,output): 9 9 filetask = self.task(input,params=self.params) 10 10 computed_data = filetask.compute_all() … … 13 13 truth = filetask.gettruth() 14 14 #print input, results, results - float(input.split('.')[-2]) 15 self.pretty_print((self.params. mode, truth,15 self.pretty_print((self.params.pitchmode, truth, 16 16 truth - results[0], results[0], 17 17 truth - results[1], results[1])) 18 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 27 28 def run_bench(self,modes=['dual']): 19 def run_bench(self,modes=['schmitt']): 29 20 self.modes = modes 30 21 self.pretty_print(self.titles) 31 22 for mode in self.modes: 32 self.params. mode = mode33 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() 36 27 37 28 if __name__ == "__main__": … … 39 30 if len(sys.argv) > 1: datapath = sys.argv[1] 40 31 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'] 43 35 44 36 benchpitch = benchpitch(datapath) 45 37 benchpitch.params = taskparams() 46 38 benchpitch.task = taskpitch 39 47 40 48 41 benchpitch.titles = [ 'mode', 'thres', 'avg', 'avgdist' ]
Note: See TracChangeset
for help on using the changeset viewer.