History

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

Paul Brossier committed 20 years ago

Commit 4f4a8a41 parent 7c9ad743 files · +103 −153Browse files

Showing the changes to python (3 of 3 files). Show all

Unified · Split

3 files
  1. python/aubiocut +40 −35
  2. python/bench-onset +52 −100
  3. python/bench-pitch +11 −18
python/aubiocut+40−35
@@ -15,8 +15,8 @@ def parse_args(): · 14 unmodified lines
1515 parser.add_option("-i","--input",
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")
2222 parser.add_option("-B","--bufsize",
@@ -80,45 +80,50 @@ def parse_args(): · 57 unmodified lines
8080 options, args = parse_args()
8181
8282 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)
9290 # default take back system delay
9391 if options.delay: delay = float(options.delay)
94−else: delay = 3./step
92+else: delay = 3./params.step
9593
9694 if options.beat:
9795 #onsets = getbeats(filename,threshold,silence,mode=options.mode)
9896 exit("not implemented yet")
9997 elif options.silencecut:
10098 onsets = getsilences(filename,hopsize=hopsize,silence=silence)
101−elif options.plot: storefunc=True
102−else: storefunc=False
99+elif options.plot: params.storefunc=True
100+else: params.storefunc=False
103101
104102 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)
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
124129 onsets = newonsets
@@ -126,17 +131,17 @@ for i in range(len(mode)): · 1 unmodified line
126131 lonsets.append(onsets)
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
141145 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+52−100
@@ -1,31 +1,17 @@
11 #! /usr/bin/python
22
3−from aubio.bench.config import *
43 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 *
195
206 class 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)
2511 if self.R < 0: self.R = 0
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,
3117 self.expc,
@@ -42,51 +28,17 @@ class benchonset(bench): · 10 unmodified lines
4228 "%2.3f" % self.R,
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)
61−
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\'')
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
41+
9042
9143 def run_bench(self,modes=['dual'],thresholds=[0.5]):
9244 self.modes = modes
@@ -94,11 +46,11 @@ class benchonset(bench): · 1 unmodified line
9446
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
10456 def auto_learn(self,modes=['dual'],thresholds=[0.1,1.5]):
@@ -109,21 +61,24 @@ class benchonset(bench): · 4 unmodified lines
10961 steps = 10
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
12377
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:
12984 print "assuming we converged, stopping"
@@ -143,34 +98,31 @@ class benchonset(bench): · 13 unmodified lines
14398 lesst /= 2.
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]
150−
151−#datapath = "%s%s" % (DATADIR,'/onset/DB/*/')
152−datapath = "%s%s" % (DATADIR,'/onset/DB/PercussivePhrases/RobertRich')
153−respath = '/var/tmp/DB-testings'
154−
155−benchonset = benchonset(datapath,respath,checkres=True,checkanno=True)
156−
157−benchonset.params = onset_parameters()
158−
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−
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]
109+
110+ #datapath = "%s%s" % (DATADIR,'/onset/DB/*/')
111+ respath = '/var/tmp/DB-testings'
112+
113+ benchonset = benchonset(datapath,respath,checkres=True,checkanno=True)
114+ benchonset.params = taskparams()
115+ benchonset.task = taskonset
116+
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"]
123+
124+ try:
125+ benchonset.auto_learn(modes=modes)
126+ #benchonset.run_bench(modes=modes)
127+ except KeyboardInterrupt:
128+ sys.exit(1)
python/bench-pitch+11−18
@@ -5,46 +5,39 @@ from aubio.tasks import * · 4 unmodified lines
55
66 class 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()
1111 results = filetask.eval(computed_data)
1212 self.results.append(results)
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
3728 if __name__ == "__main__":
3829 import sys
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
4739
40+
4841 benchpitch.titles = [ 'mode', 'thres', 'avg', 'avgdist' ]
4942 benchpitch.formats = ["%12s" , "| %6s", "| %6s", "| %6s", "| %6s", "| %6s" ]
5043 try:

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t