History

move python/tests to tests/python, examples/tests to tests/src, add .bzrignore

Paul Brossier committed 19 years ago

Commit de2a8af1 parent 97525e442 files · +68 −37Browse files

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

Unified · Split

14 files
  1. python/test/aubiomodule.py +0 −14
  2. python/test/bench/onset/Makefile.am +0 −44
  3. python/test/bench/onset/bench-delay +0 −62
  4. python/test/bench/onset/bench-onset +0 −68
  5. python/test/bench/onset/bench-window +0 −59
  6. python/test/bench/pitch/Makefile.am +0 −59
  7. python/test/bench/pitch/bench-pitch-isolated +0 −198
  8. python/test/bench/pitch/bench-pitch-plot-isolated +0 −63
  9. python/test/bench/tempo/demo-tempo +0 −313
  10. python/test/bench/tempo/demo-tempo-acf +0 −157
  11. python/test/cvec.py +0 −51
  12. python/test/fvec.py +0 −36
  13. python/test/list_missing_tests +0 −30
  14. python/test/run_all_tests +0 −15
python/test/aubiomodule.py+0−14
@@ -1,14 +0,0 @@
1import unittest
2
3class aubiomodule_test_case(unittest.TestCase):
4
5 def test_aubio(self):
6 """ try importing aubio module """
7 import aubio
8
9 def test_aubiowrapper(self):
10 """ try importing aubio.aubiowrapper module """
11 from aubio import aubiowrapper
12
13if __name__ == '__main__':
14 unittest.main()
python/test/bench/onset/Makefile.am+0−44
@@ -1,44 +0,0 @@
1export BASEDIR=../../../..
2export PYTHONPATH=$(BASEDIR)/python
3export LD_LIBRARY_PATH=$(BASEDIR)/src/.libs:$(BASEDIR)/ext/.libs
4
5DETAILSOURCE = \
6 /var/tmp/Onset-Mirex2005/poly_pitched \
7 /var/tmp/Onset-Mirex2005/solo_bars_and_bells \
8 /var/tmp/Onset-Mirex2005/solo_brass \
9 /var/tmp/Onset-Mirex2005/solo_drums \
10 /var/tmp/Onset-Mirex2005/solo_plucked_strings \
11 /var/tmp/Onset-Mirex2005/solo_singing_voice \
12 /var/tmp/Onset-Mirex2005/solo_sustained_strings \
13 /var/tmp/Onset-Mirex2005/solo_winds \
14 /var/tmp/Onset-Mirex2005/complex
15
16SOURCE = /var/tmp/Onset-Mirex2005
17
18TESTSOURCE = \
19 /var/tmp/Onset-Mirex2005/solo_bars_and_bells \
20 /var/tmp/Onset-Mirex2005/solo_winds \
21 /archives/samples/DB/PercussivePhrases/CM18/Samba_Audio
22
23test-aubiocut: $(patsubst %, %.aubiocut, $(TESTSOURCE))
24test-aubiodelay: $(patsubst %, %.aubiodelay, $(TESTSOURCE))
25test-aubiowindow: $(patsubst %, %.aubiowindow, $(TESTSOURCE))
26
27final-aubiocut: $(patsubst %, %.aubiocut, $(DETAILSOURCE) $(SOURCE))
28final-aubiodelay: $(patsubst %, %.aubiodelay, $(SOURCE))
29final-aubiowindow: $(patsubst %, %.aubiowindow, $(SOURCE))
30
31%.aubiocut: %
32 rm -f `basename $@`
33 ./bench-onset $< | tee `basename $@`
34 -diff `basename $@`.ref `basename $@`
35
36%.aubiodelay: %
37 rm -f `basename $@`
38 ./bench-delay $< | tee `basename $@`
39 -diff `basename $@`.ref `basename $@`
40
41%.aubiowindow: %
42 rm -f `basename $@`
43 ./bench-window $< | tee `basename $@`
44 -diff `basename $@`.ref `basename $@`
python/test/bench/onset/bench-delay+0−62
@@ -1,62 +0,0 @@
1#! /usr/bin/python
2
3from aubio.bench.onset import benchonset
4from aubio.task.onset import taskonset
5from aubio.task.params import taskparams
6
7class mybenchonset(benchonset):
8
9 def run_bench(self,modes=['dual'],thresholds=[0.5]):
10 from os.path import dirname,basename
11 self.thresholds = thresholds
12 self.pretty_titles()
13
14 for mode in modes:
15 d = []
16 self.params.onsetmode = mode
17 self.params.localmin = True
18 self.params.delay = 1.
19 self.params.threshold = thresholds[0]
20 #
21 self.params.localmin = False
22 self.params.delay = 0.
23 self.dir_eval_print()
24 self.plotdiffs(d,plottitle="Causal")
25 #
26 self.params.localmin = True
27 self.params.delay = 0.
28 self.dir_eval_print()
29 self.plotdiffs(d,plottitle="Local min")
30
31 self.params.localmin = False
32 self.params.delay = 6.
33 self.dir_eval_print()
34 self.plotdiffs(d,plottitle="Fixed delay")
35
36 #self.plotplotdiffs(d)
37 outplot = "_-_".join(("delay",mode,basename(self.datadir) ))
38 for ext in ("png","svg","ps"):
39 self.plotplotdiffs(d,outplot=outplot,extension=ext)
40
41if __name__ == "__main__":
42 import sys
43 if len(sys.argv) > 1: datapath = sys.argv[1]
44 else: print "ERR: a path is required"; sys.exit(1)
45 modes = ['complex', 'energy', 'phase', 'hfc', 'specdiff', 'kl', 'mkl', 'dual']
46 #thresholds = [ 0.01, 0.05, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2]
47 #modes = [ 'hfc' ]
48 thresholds = [0.5]
49
50 #datapath = "%s%s" % (DATADIR,'/onset/DB/*/')
51 respath = '/var/tmp/DB-testings'
52
53 benchonset = mybenchonset(datapath,respath,checkres=True,checkanno=True)
54 benchonset.params = taskparams()
55 benchonset.task = taskonset
56 benchonset.valuesdict = {}
57
58 try:
59 #benchonset.auto_learn2(modes=modes)
60 benchonset.run_bench(modes=modes,thresholds=thresholds)
61 except KeyboardInterrupt:
62 sys.exit(1)
python/test/bench/onset/bench-onset+0−68
@@ -1,68 +0,0 @@
1#! /usr/bin/python
2
3from aubio.task import *
4
5from aubio.bench.onset import mmean, stdev, benchonset
6
7class mybenchonset(benchonset):
8
9 def run_bench(self,modes=['dual'],thresholds=[0.5]):
10 from os.path import dirname,basename
11 self.thresholds = thresholds
12 self.pretty_titles()
13 d,e,f,g = [],[],[],[]
14 for mode in modes:
15 self.vlist = []
16 self.params.onsetmode = mode
17 #self.params.localmin = True
18
19 for threshold in self.thresholds:
20 self.params.threshold = threshold
21 self.dir_eval_print()
22 self.vlist.append(self.v)
23 self.plotroc(d)
24 self.plotfmeas(e)
25 self.plotpr(f)
26 #self.plothistcat(g)
27
28
29
30 #self.plotplotroc(d)
31 #self.plotplotfmeas(e)
32 #self.plotplotpr(f)
33 outplot = basename(self.datadir)
34 for ext in ("png","svg","ps"):
35 self.plotplotroc(d,outplot=outplot,extension=ext)
36 self.plotplotfmeas(e,outplot=outplot,extension=ext)
37 self.plotplotpr(f,outplot=outplot,extension=ext)
38 #self.plotplothistcat(g,outplot=outplot,extension=ext)
39
40if __name__ == "__main__":
41 import sys
42 if len(sys.argv) > 1: datapath = sys.argv[1]
43 else: print "ERR: a path is required"; sys.exit(1)
44 modes = ['complex', 'energy', 'phase', 'hfc', 'specdiff', 'kl', 'mkl', 'dual']
45 thresholds = [ 0.01, 0.05, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2]
46 #modes = [ 'hfc' ]
47 #thresholds = [0.5]
48
49 #datapath = "%s%s" % (DATADIR,'/onset/DB/*/')
50 respath = '/var/tmp/DB-testings'
51
52 benchonset = mybenchonset(datapath,respath,checkres=True,checkanno=True)
53 benchonset.params = taskparams()
54 benchonset.params.dcthreshold = -1.
55 benchonset.params.silence = -100.
56 benchonset.params.delay = 5.
57 benchonset.params.bufsize = 1024
58 benchonset.params.hopsize = 256
59 benchonset.params.step = float(benchonset.params.hopsize)/float(benchonset.params.samplerate)
60 benchonset.params.mintol = 4.1
61 benchonset.task = taskonset
62 benchonset.valuesdict = {}
63
64 try:
65 #benchonset.auto_learn2(modes=modes)
66 benchonset.run_bench(modes=modes,thresholds=thresholds)
67 except KeyboardInterrupt:
68 sys.exit(1)
python/test/bench/onset/bench-window+0−59
@@ -1,59 +0,0 @@
1#! /usr/bin/python
2
3from aubio.bench.onset import benchonset
4from aubio.task.onset import taskonset
5from aubio.task.params import taskparams
6
7class mybenchonset(benchonset):
8
9 def run_bench(self,modes=['dual'],thresholds=[0.5]):
10 from os.path import dirname,basename
11 self.thresholds = thresholds
12 self.pretty_titles()
13
14 for mode in modes:
15
16 self.params.onsetmode = mode
17 self.params.localmin = True
18 self.params.delay = 1.
19 self.params.threshold = thresholds[0]
20 self.params.localmin = False
21 #
22 for delay in (0., 4.):
23 d = []
24 self.params.delay = delay
25 for buf in (2048, 1024, 512):
26 for hop in (buf/2, buf/4):
27 self.params.bufsize = buf
28 self.params.hopsize = hop
29 self.params.step = float(self.params.hopsize)/float(self.params.samplerate)
30 self.dir_eval_print()
31 self.plotdiffs(d,plottitle="%s %s" % (buf,hop))
32 #plotplotdiffs(d)
33 outplot = "_-_".join(("window",mode,"delay-%s" % int(delay),
34 basename(self.datadir) ))
35 for ext in ("png","svg","ps"):
36 self.plotplotdiffs(d,outplot=outplot,extension=ext)
37
38if __name__ == "__main__":
39 import sys
40 if len(sys.argv) > 1: datapath = sys.argv[1]
41 else: print "ERR: a path is required"; sys.exit(1)
42 modes = ['complex', 'energy', 'phase', 'hfc', 'specdiff', 'kl', 'mkl', 'dual']
43 #thresholds = [ 0.01, 0.05, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2]
44 #modes = [ 'hfc' ]
45 thresholds = [0.5]
46
47 #datapath = "%s%s" % (DATADIR,'/onset/DB/*/')
48 respath = '/var/tmp/DB-testings'
49
50 benchonset = mybenchonset(datapath,respath,checkres=True,checkanno=True)
51 benchonset.params = taskparams()
52 benchonset.task = taskonset
53 benchonset.valuesdict = {}
54
55 try:
56 #benchonset.auto_learn2(modes=modes)
57 benchonset.run_bench(modes=modes,thresholds=thresholds)
58 except KeyboardInterrupt:
59 sys.exit(1)
python/test/bench/pitch/Makefile.am+0−59
@@ -1,59 +0,0 @@
1export AUBIODIR=../../../..
2export PYTHONPATH=$(AUBIODIR)/python
3export LD_LIBRARY_PATH=$(AUBIODIR)/src/.libs:$(AUBIODIR)/ext/.libs
4
5CP=cp -a
6
7SOURCE = \
8 $(BASEDIR)/isolated/vibraphone \
9 $(BASEDIR)/isolated/clavinet \
10 $(BASEDIR)/isolated/elecguitar \
11 $(BASEDIR)/isolated/piano \
12 $(BASEDIR)/isolated/rhodes \
13 $(BASEDIR)/isolated
14
15
16MONOSOURCE = \
17 $(BASEDIR)/monophonic/Mirex04/daisy \
18 $(BASEDIR)/monophonic/Mirex04/midi \
19 $(BASEDIR)/monophonic/Mirex04/jazz \
20 $(BASEDIR)/monophonic/Mirex04/pop \
21 $(BASEDIR)/monophonic/Mirex04/opera \
22 $(BASEDIR)/monophonic/Mirex04
23
24POLYSOURCE = \
25 $(BASEDIR)/polyphonic/Mirex04/daisy \
26 $(BASEDIR)/polyphonic/Mirex04/midi \
27 $(BASEDIR)/polyphonic/Mirex04/jazz \
28 $(BASEDIR)/polyphonic/Mirex04/pop \
29 $(BASEDIR)/polyphonic/Mirex04/opera \
30 $(BASEDIR)/polyphonic/Mirex04
31
32test-aubiopitch-isolated: $(patsubst %, %.aubiopitch-isolated, $(SOURCE))
33test-aubiopitch-monophonic: $(patsubst %, %.aubiopitch-monophonic, $(MONOSOURCE))
34test-aubiopitch-polyphonic: $(patsubst %, %.aubiopitch-polyphonic, $(POLYSOURCE))
35
36plotpitch:
37 ../../../aubiopitch -m fcomb,mcomb,yinfft,yin,schmitt -i jazz2REF.wav -p -t 0.2 -l 100 -M 600 -O jazz2REF.ps
38 ../../../aubiopitch -m fcomb,mcomb,yinfft,yin,schmitt -p -t 0.2 -l 300 -M 900 -i opera_fem2REF.wav -O opera_fem2REF.ps
39
40timings:
41 ./bench-timings $(BASEDIR)/polyphonic/Mirex04/opera
42
43%.aubiopitch-isolated: %
44 $(CP) isolated/`basename $@` isolated/`basename $@`.old
45 ./bench-pitch-isolated $< | tee isolated/`basename $@`
46 -diff isolated/`basename $@`.old isolated/`basename $@`
47 -diff isolated/`basename $@`.ref isolated/`basename $@`
48
49%.aubiopitch-monophonic: %
50 $(CP) monophonic/`basename $@` monophonic/`basename $@`.old
51 ./bench-pitch-monophonic $< | tee monophonic/`basename $@`
52 -diff monophonic/`basename $@`.ref monophonic/`basename $@`
53 -diff monophonic/`basename $@`.old monophonic/`basename $@`
54
55%.aubiopitch-polyphonic: %
56 $(CP) polyphonic/`basename $@` polyphonic/`basename $@`.old
57 ./bench-pitch-polyphonic $< | tee polyphonic/`basename $@`
58 -diff polyphonic/`basename $@`.ref polyphonic/`basename $@`
59 -diff polyphonic/`basename $@`.old polyphonic/`basename $@`
python/test/bench/pitch/bench-pitch-isolated+0−198
@@ -1,198 +0,0 @@
1#! /usr/bin/python
2
3from aubio.bench.node import *
4from aubio.task 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 = ['truth', 'osil', 'esil', 'opit', 'epit', 'echr',
12 'Msil', 'Mpit', 'Mchr',
13 'TotalPit', 'TotalPit', 'TotalChr' ]
14 """ list of values to print per dir """
15 printnames_total = [ 'mode', 'MinPit', 'MaxPit', 'TotalSil', 'TotalPit', 'TotalChr']
16 printnames_notes = [ 'mode', 'Note', 'Sil', 'Pit', 'Chr']
17 printnames = printnames_notes
18
19 """ per dir """
20 formats = {'mode': "%12s" ,
21 'truth': "%s",
22 'osil': "%s", 'esil': "%s",
23 'opit': "%s", 'epit': "%s", 'echr': "%s",
24 'Note': "%s", 'Sil': "%s", 'Chr': "%s", 'Pit': "%s",
25 'TotalPit': "%s", 'TotalSil': "%s", 'TotalChr': "%s",
26 'MinPit': "%s", 'MaxPit': "%s",
27 'Msil': "%s", 'Mpit': "%s", 'Mchr': "%s"}
28
29 def dir_eval(self):
30 """ evaluate statistical data over the directory """
31 v = self.v
32 v['mode'] = self.params.pitchmode
33
34 def file_exec(self,input,output):
35 filetask = self.task(input,params=self.params)
36 computed_data = filetask.compute_all()
37 osil, esil, opit, epit, echr = filetask.eval(computed_data,tol=0.5)
38 self.v['truth'].append(int(filetask.truth))
39 assert opit > 0
40
41 self.v['osil'].append(osil)
42 self.v['esil'].append(esil)
43 self.v['opit'].append(opit)
44 self.v['epit'].append(epit)
45 self.v['echr'].append(echr)
46
47 self.v['Msil'].append(esil/float(osil)*100.)
48 self.v['Mpit'].append(epit/float(opit)*100.)
49 self.v['Mchr'].append(echr/float(opit)*100.)
50 #print results#, computed_data
51 #print input, results, results - float(input.split('.')[-2])
52
53 def run_bench(self,modes=['schmitt'],multiplot=0):
54 from os.path import basename
55 self.modes = modes
56 self.pretty_titles()
57 d = []
58 for mode in self.modes:
59 self.params.pitchmode = mode
60 self.dir_exec()
61 self.dir_eval()
62 truth = [i for i in range(min(self.v['truth']),max(self.v['truth'])+1)]
63 allOsil = [0 for i in range(min(self.v['truth']),max(self.v['truth'])+1)]
64 allEsil = [0 for i in range(min(self.v['truth']),max(self.v['truth'])+1)]
65 allOpit = [0 for i in range(min(self.v['truth']),max(self.v['truth'])+1)]
66 allEpit = [0 for i in range(min(self.v['truth']),max(self.v['truth'])+1)]
67 allEchr = [0 for i in range(min(self.v['truth']),max(self.v['truth'])+1)]
68 allMsil = [0 for i in range(min(self.v['truth']),max(self.v['truth'])+1)]
69 allMpit = [0 for i in range(min(self.v['truth']),max(self.v['truth'])+1)]
70 allMchr = [0 for i in range(min(self.v['truth']),max(self.v['truth'])+1)]
71 for i in range(len(self.v['truth'])):
72 allOsil[self.v['truth'][i]-min(self.v['truth'])] += self.v['osil'][i]
73 allEsil[self.v['truth'][i]-min(self.v['truth'])] += self.v['esil'][i]
74 allOpit[self.v['truth'][i]-min(self.v['truth'])] += self.v['opit'][i]
75 allEpit[self.v['truth'][i]-min(self.v['truth'])] += self.v['epit'][i]
76 allEchr[self.v['truth'][i]-min(self.v['truth'])] += self.v['echr'][i]
77 for i in range(len(truth)):
78 allOsil[i] = max(1,allOsil[i])
79 allOpit[i] = max(1,allOpit[i])
80 allMsil[i] = allEsil[i]/float(allOsil[i])*100.
81 allMpit[i] = allEpit[i]/float(allOpit[i])*100.
82 allMchr[i] = allEchr[i]/float(allOpit[i])*100.
83 self.v['Sil'], self.v['Pit'], self.v['Chr'] = allMsil[i], allMpit[i], allMchr[i]
84 self.v['Note'] = truth[i]
85 #self.printnames = self.printnames_notes
86 self.pretty_print()
87 self.v['TotalSil'] = sum(allMsil)/len(truth)
88 self.v['TotalPit'] = sum(allMpit)/len(truth)
89 self.v['TotalChr'] = sum(allMchr)/len(truth)
90 self.v['MinPit'] = min(truth)
91 self.v['MaxPit'] = max(truth)
92 #self.printnames = self.printnames_total
93 #self.pretty_print()
94
95 plot = []
96 self.plotpitchtessiture(plot,
97 truth,
98 allMpit,
99 plottitle="%s %s" % (self.v['mode'],self.params.bufsize),
100 plotmode='lines')
101 """
102 self.plotpitchtessiture(plot,
103 truth,
104 allMchr,
105 plottitle="%s %s" % (self.v['mode'],"%12"),
106 plotmode='lines')
107 self.plotpitchtessiture(plot,
108 truth,
109 allMsil,
110 plottitle="%s %s" % (self.v['mode'],"sil"),
111 plotmode='lines')
112 """
113 title = basename(self.datadir)
114 if multiplot:
115 d.append(plot)
116 else:
117 d += plot
118 outplot = "_-_".join(('pitchtessiture',title))
119 self.xmin = min(self.v['truth']) #20.
120 self.xmax = max(self.v['truth'])
121 for ext in ('ps','png','svg'): #,''):
122 self.plotplotpitchtessiture(d,
123 plottitle="".join(['Performance against MIDI Note number (',
124 title,
125 ", %s" % len(self.sndlist), " samples)"]),
126 outplot=outplot,
127 extension=ext,multiplot=multiplot)
128 #d.append('beta = .25,orig(x) title \"-2 octave\"')
129 #d.append('beta = .50,orig(x) title \"-1 octave\"')
130 #d.append('beta = 1.0,orig(x) title \"original\"')
131 #d.append('beta = 2.0,orig(x) title \"+1 octave\"')
132
133 """
134 Plot functions
135 """
136
137 def plotpitchtessiture(self,d,lx,ly,plottitle="",plotmode='linespoints'):
138 import Gnuplot, Gnuplot.funcutils
139 d.append(Gnuplot.Data(lx, ly, with=plotmode, title="%s" % (plottitle) ))
140
141 def plotplotpitchtessiture(self,d,plottitle='',outplot=0,extension='',multiplot=1):
142 from aubio.gnuplot import gnuplot_create
143 g = gnuplot_create(outplot=outplot,extension=extension)
144 #g.title(plottitle)
145 #g('orig(x) = beta*x')
146 g.title(plottitle)
147 g('set yrange [50:100]')
148 # erase axis
149 g('set xrange [%f:%f]' % (self.xmin,self.xmax)) #(self.xmax - (self.xmax-self.xmin)*5./4.,self.xmax))
150 #g.plot(*d)
151 g('set border 3')
152 g('set xtics nomirror')
153 g('set ytics nomirror')
154 g('set key bottom')
155 if multiplot:
156 g('set multiplot')
157 for i in range(len(d)):
158 # plot onset detection functions
159 g('set size 1,%f' % ( 1.0/float(len(d)) ) )
160 g('set origin 0,%f' % ( 1.0*float(len(d)-i-1)/float(len(d)) ) )
161 #g.ylabel('%Correct detections')
162 g('set xrange [%f:%f]' % (self.xmin,self.xmax)) #(self.xmax - (self.xmax-self.xmin)*5./4.,self.xmax))
163 g.plot(*d[i])
164 g('unset title')
165 g('unset multiplot')
166 else:
167 g.plot(*d)
168
169
170if __name__ == "__main__":
171 import sys
172 if len(sys.argv) > 1: datapath = sys.argv[1]
173 else: print "error: a path is required"; sys.exit(1)
174 if len(sys.argv) > 2:
175 for each in sys.argv[3:-1]: print each
176 modes = ['schmitt', 'yin', 'yinfft', 'mcomb', 'fcomb']
177 #modes = ['mcomb']
178
179 params = taskparams()
180 params.bufsize = 2048 # 4096
181 params.hopsize = 256
182 params.silence = -60.
183 params.pitchsmooth = 0
184 params.pitchmax = 20000
185 params.pitchmin = 20
186 params.pitchyinfft = 0.95
187 benchpitch = benchpitch(datapath,params=params)
188 benchpitch.task = taskpitch
189
190 #benchpitch.titles = [ 'mode', 'thres', 'avg', 'avgdist' ]
191 #benchpitch.formats = ["%12s" , "| %6s", "| %6s", "| %6s", "| %6s", "| %6s" ]
192 try:
193 benchpitch.run_bench(modes=modes)
194 except KeyboardInterrupt:
195 print "Interrupted by user"
196 sys.exit(1)
197
198 sys.exit(0)
python/test/bench/pitch/bench-pitch-plot-isolated+0−63
@@ -1,63 +0,0 @@
1#! /usr/bin/python
2
3if __name__ == '__main__':
4 import sys, Gnuplot
5 from aubio.gnuplot import gnuplot_create
6 from aubio.txtfile import read_datafile
7 from aubio.plot.keyboard import draw_keyboard
8 lines = []
9 titles = []
10 for file in range(len(sys.argv)-1):
11 l = read_datafile(sys.argv[file+1])
12 notes, score = [],[]
13 for i in range(len(l)):
14 notes.append(l[i][0])
15 score.append(l[i][2])
16 lines.append(Gnuplot.Data(notes,score,
17 with='linespoints',
18 title=sys.argv[file+1].split('.')[-1]))
19 titles.append(sys.argv[file+1].split('.')[-1])
20 blacks,whites = draw_keyboard(firstnote = notes[0], lastnote = notes[-1],
21 y0= 40, y1 = 50)
22
23 g = gnuplot_create(sys.argv[file+1].split('.')[-3],'ps')
24 #g = gnuplot_create('','')
25 #g = gnuplot_create('/tmp/test','eps')
26 g('set yrange [40:100]')
27 #g('set xrange [%f:%f]' % (notes[0],notes[-1]+60))
28 g('set size 0.5')
29 g('set key outside')
30
31 g('set border 3')
32 g('set xtics nomirror')
33 g('set ytics nomirror')
34 multiplot = 1
35 oplots = lines
36 g('set size 1,2')
37 if multiplot:
38 height = 2.
39 g('set lmargin 10')
40 #g('set rmargin 15')
41 g('set multiplot')
42 g('set yrange [50:100]')
43 g('set xrange [%f:%f]' % (notes[0],notes[-1]))
44 g('set xtics %f,12' % notes[0])
45 g('set nokey')
46 for i in range(len(oplots)):
47 g.ylabel(titles[i])
48 g('set size %f,%f' % (1.,height*.85/float(len(oplots))))
49 g('set origin 0,%f' % (height*(.15+.85*float(len(oplots)-i-1)/float(len(oplots)))))
50 g.plot(oplots[i])
51 g('set title "Raw pitch accuracy (%) against midi note numbers"')
52 g('set noxtics')
53 g('set noytics')
54 g('set size %f,%f' % (1.,.15*height))
55 g('set origin 0,%f' % 0)
56 g('set yrange [40:50]')
57 g('set xrange [%f:%f]' % (notes[0],notes[-1]))
58 g.xlabel('')
59 g.ylabel('')
60 g.plot(whites,blacks)
61 g('unset multiplot')
62 else:
63 g.plot(whites,blacks,*lines)
python/test/bench/tempo/demo-tempo+0−313
@@ -1,313 +0,0 @@
1#! /usr/bin/python
2
3""" this file was written by Paul Brossier
4 it is released under the GNU/GPL license.
5"""
6
7import sys,time
8from aubio.task import taskbeat,taskparams
9from aubio.aubioclass import fvec, aubio_autocorr
10from aubio.gnuplot import gnuplot_create, gnuplot_addargs
11from aubio.aubiowrapper import *
12from math import exp,log
13
14usage = "usage: %s [options] -i soundfile" % sys.argv[0]
15
16def parse_args():
17 from optparse import OptionParser
18 parser = OptionParser(usage=usage)
19 parser.add_option("-i","--input",
20 action="store", dest="filename",
21 help="input sound file")
22 parser.add_option("-n","--printframe",
23 action="store", dest="printframe", default=-1,
24 help="make a plot of the n_th frame")
25 gnuplot_addargs(parser)
26 (options, args) = parser.parse_args()
27 if not options.filename:
28 print "no file name given\n", usage
29 sys.exit(1)
30 return options, args
31
32def plotdata(x,y,plottitle="",**keyw):
33 import Gnuplot
34 return Gnuplot.Data(x, y, title="%s" % plottitle,**keyw)
35
36options, args = parse_args()
37filename = options.filename
38xsize = float(options.xsize)
39ysize = float(options.ysize)
40
41printframe = int(options.printframe)
42
43if options.outplot and printframe > 0:
44 extension = options.outplot.split('.')[-1]
45 outplot = '.'.join(options.outplot.split('.')[:-1])
46else:
47 extension = ''
48 outplot = None
49f = gnuplot_create(outplot=outplot,extension=extension,options=options)
50
51params = taskparams()
52params.onsetmode = 'specdiff'
53task = taskbeat(filename,params=params)
54
55hopsize = params.hopsize
56bufsize = params.bufsize
57btstep = task.btstep
58winlen = task.btwinlen
59laglen = winlen/4
60step = winlen/4
61
62timesig = 0
63maxnumelem = 4
64gp = 0
65counter = 0
66flagconst = 0
67constthresh = 3.901
68g_var = 3.901
69rp = 0
70rp1 = 0
71rp2 = 0
72g_mu = 0
73
74rayparam = 48/512.*winlen
75
76#t = [i for i in range(hopsize)]
77#tlong = [i for i in range(hopsize*(btstep-1))]
78#tall = [i for i in range(hopsize*btstep)]
79#a = [0 for i in range(hopsize*btstep)]
80dfx = [i for i in range(winlen)]
81dfframe = [0 for i in range(winlen)]
82dfrev = [0 for i in range(winlen)]
83acframe = [0 for i in range(winlen)]
84
85localacf = [0 for i in range(winlen)]
86inds = [0 for i in range(maxnumelem)]
87
88acx = [i for i in range(laglen)]
89acfout = [0 for i in range(laglen)]
90
91phwv = [0 for i in range(2*laglen)]
92phwvx = [i for i in range(2*laglen)]
93
94dfwvnorm = exp(log(2.0)*(winlen+2.)/rayparam);
95dfwv = [exp(log(2.)*(i+1.)/rayparam)/dfwvnorm for i in range(winlen)]
96
97gwv = [exp(-.5*(j+1.-g_mu)**2/g_var**2) for j in range(laglen)]
98rwv = [(i+1.)/rayparam**2 * exp(-(i+1.)**2 / (2.*rayparam)**2)
99 for i in range(0,laglen)]
100acf = fvec(winlen,1)
101
102nrframe = 0
103while (task.readsize == params.hopsize):
104 task()
105 #print task.pos2
106 #a[:-hopsize] = [i for i in a[-(btstep-1)*hopsize:]]
107 #a[-hopsize:] = [task.myvec.get(i,0) for i in t]
108
109 #g('set xrange [%f:%f]' % (t[0],t[-1]))
110 #time.sleep(.2)
111 if task.pos2==btstep-1:
112 nrframe += 1
113 dfframe = [task.dfframe.get(i,0) for i in range(winlen)]
114 if printframe == nrframe or printframe == -1:
115 d = [[plotdata(range(-winlen,0),dfframe,plottitle="onset detection", with='lines')]]
116 # start beattracking_do
117 for i in range(winlen):
118 dfrev[winlen-1-i] = 0.
119 dfrev[winlen-1-i] = dfframe[i]*dfwv[i]
120 aubio_autocorr(task.dfframe(),acf());
121 acframe = [acf.get(i,0) for i in range(winlen)]
122 if not timesig:
123 numelem = 4
124 else:
125 numelem = timesig
126
127 old = 0
128 acfout = [0 for i in range(winlen/4)]
129 for i in range(1,laglen-1):
130 for a in range(1,numelem+1):
131 for b in range (1-a,a):
132 acfout[i] += acframe[a*(i+1)+b-1] * 1./(2.*a-1.)*rwv[i]
133 if old < acfout[i]:
134 old = acfout[i]
135 maxi = i
136 rp = max(maxi,1);
137
138 if printframe == nrframe or printframe == -1:
139 rwvs = [rwv[i]*max(acframe) for i in range(len(rwv))]
140 d += [[plotdata(acx,acfout,plottitle="comb filterbank", with='lines', axes='x1y1'),
141 plotdata([rp,rp],[1.2*old,min(acfout)],plottitle="period", with='impulses', axes='x1y1'),
142 plotdata(acx,rwvs,plottitle="L_w", with='lines', axes='x1y1')]]
143
144 # getperiod
145 inds = [0 for i in range(maxnumelem)]
146 localacf = [0 for i in range(winlen)]
147 period = 0
148 for a in range(1,4+1):
149 for b in range(1-a,a):
150 localacf[a*rp+b-1] = acframe[a*rp+b-1]
151 for i in range(numelem):
152 maxindex = 0
153 maxval = 0.0
154 for j in range(rp*(i+1)+i):
155 if localacf[j] > maxval:
156 maxval = localacf[j]
157 maxind = j
158 localacf[j] = 0
159 inds[i] = maxind
160 for i in range(numelem):
161 period += inds[i]/(i+1.)
162 period = period/numelem
163 #print "period", period
164
165 # checkstate
166 if gp:
167 # context dependant model
168 acfout = [0 for i in range(winlen/4)]
169 old = 0
170 for i in range(laglen-1):
171 for a in range(timesig):
172 for b in range(1-a,a):
173 acfout[i] += acframe[a*(i+1)+b-1] * gwv[i]
174 if old < acfout[i]:
175 old = acfout[i]
176 maxi = i
177 gp = maxi
178 else:
179 # general model
180 gp = 0
181 #print "gp", gp
182 if printframe == nrframe or printframe == -1:
183 gwvs = [gwv[i]*max(acfout) for i in range(len(gwv))]
184 d += [[plotdata(acx,acfout,plottitle="comb filterbank", with='lines', axes='x1y1'),
185 plotdata(gp,old,plottitle="period", with='impulses', axes='x1y1'),
186 plotdata(acx,gwvs,plottitle="L_{gw}", with='lines', axes='x1y1')]]
187
188 if counter == 0:
189 # initial step
190 if abs(gp-rp) > 2.*constthresh:
191 flagstep = 1
192 counter = 3
193 else:
194 flagstep = 0
195 #print "flagstep", flagstep
196 #print "rp2,rp1,rp", rp2,rp1,rp
197 acfw = [dfframe[i]*dfwv[i] for i in range(winlen)]
198
199 if counter == 1 and flagstep == 1:
200 # "3rd frame after flagstep set"
201 if abs(2.*rp-rp1- rp2) < constthresh:
202 flagconst = 1
203 counter = 0
204 else:
205 flagconst = 0
206 counter = 2
207 elif counter > 0:
208 counter -= 1
209
210 rp2 = rp1; rp1 = rp
211
212 if flagconst:
213 # "first run of new hypothesis"
214 gp = rp
215 g_mu = gp
216 timesig = 4 #FIXME
217 gwv = [exp(-.5*(j+1.-g_mu)**2/g_var**2) for j in range(laglen)]
218 flagconst = 0
219 bp = gp
220 phwv = [1 for i in range(2*laglen)]
221 elif timesig:
222 # "contex dependant"
223 bp = gp
224 if step > lastbeat:
225 phwv = [exp(-.5*(1.+j-step+lastbeat)**2/(bp/8.)) for j in range(2*laglen)]
226 else:
227 print "NOT using phase weighting"
228 phwv = [1 for i in range(2*laglen)]
229 else:
230 # "initial state"
231 bp = rp
232 phwv = [1 for i in range(2*laglen)]
233
234 while bp < 25:
235 print "WARNING, doubling the beat period"
236 bp *= 2
237
238 #
239 phout = [0. for i in range(winlen)]
240
241 kmax = int(winlen/float(bp));
242
243 old = 0
244 for i in range(bp):
245 phout[i] = 0.
246 for k in range(kmax):
247 phout[i] += dfrev[i+bp*k] * phwv[i]
248 if phout[i] > old:
249 old = phout[i]
250 maxi = i
251 maxindex = maxi
252 if (maxindex == winlen - 1): maxindex = 0
253 phase = 1 + maxindex
254 i = 1
255 beat = bp - phase
256 beats= []
257 if beat >= 0: beats.append(beat)
258 while beat+bp < step:
259 beat += bp
260 beats.append(beat)
261 lastbeat = beat
262 #print beats,
263 #print "the lastbeat is", lastbeat
264
265 # plot all this
266 if printframe == nrframe or printframe == -1:
267 phwvs = [phwv[i]*max(phout) for i in range(len(phwv))]
268 d += [[plotdata(range(-laglen,0),phwvs[laglen:0:-1],plottitle="A_{gw}", with='lines',axes='x1y1'),
269 plotdata(range(-laglen,0),phout[laglen:0:-1],plottitle="df", with='lines'),
270 plotdata(-phase,old,plottitle="phase", with='impulses', axes='x1y1'),
271 plotdata([i for i in beats],[old for i in beats],plottitle="predicted", with='impulses')
272 ]]
273 #d += [[plotdata(dfx,dfwv,plottitle="phase weighting", with='lines', axes='x1y2'),
274 # plotdata(dfx,dfrev,plottitle="df reverse", with='lines', axes='x1y1')]]
275 #d += [[plotdata(dfx,phout,plottitle="phase", with='lines', axes='x1y2')]]
276 #d += [[plotdata(dfx,dfwv,plottitle="phase weighting", with='lines', axes='x1y2'),
277 # plotdata(dfx,dfrev,plottitle="df reverse", with='lines', axes='x1y1')]]
278 #d += [[plotdata(dfx,phout,plottitle="phase", with='lines', axes='x1y2')]]
279
280 f('set lmargin 4')
281 f('set rmargin 4')
282 f('set size %f,%f' % (1.0*xsize,1.0*ysize) )
283 f('set key spacing 1.3')
284 f('set multiplot')
285
286 f('set size %f,%f' % (1.0*xsize,0.33*ysize) )
287 f('set orig %f,%f' % (0.0*xsize,0.66*ysize) )
288 f('set xrange [%f:%f]' % (-winlen,0) )
289 f.title('Onset detection function')
290 f.xlabel('time (df samples)')
291 f.plot(*d[0])
292 f('set size %f,%f' % (0.5*xsize,0.33*ysize) )
293 f('set orig %f,%f' % (0.0*xsize,0.33*ysize) )
294 f('set xrange [%f:%f]' % (0,laglen) )
295 f.title('Period detection: Rayleygh weighting')
296 f.xlabel('lag (df samples)')
297 f.plot(*d[1])
298 f('set size %f,%f' % (0.5*xsize,0.33*ysize) )
299 f('set orig %f,%f' % (0.5*xsize,0.33*ysize) )
300 f('set xrange [%f:%f]' % (0,laglen) )
301 f.title('Period detection: Gaussian weighting')
302 f.xlabel('lag (df samples)')
303 f.plot(*d[2])
304 f('set size %f,%f' % (1.0*xsize,0.33*ysize) )
305 f('set orig %f,%f' % (0.0*xsize,0.00*ysize) )
306 f('set xrange [%f:%f]' % (-laglen,laglen) )
307 f.title('Phase detection and predicted beats')
308 f.xlabel('time (df samples)')
309 f.plot(*d[3])
310 f('set nomultiplot')
311 if printframe == -1: a = sys.stdin.read()
312 elif 0 < printframe and printframe < nrframe:
313 break
python/test/bench/tempo/demo-tempo-acf+0−157
@@ -1,157 +0,0 @@
1#! /usr/bin/python
2
3""" this file was written by Paul Brossier
4 it is released under the GNU/GPL license.
5"""
6
7import sys,time
8from aubio.task import taskbeat,taskparams
9from aubio.aubioclass import fvec, aubio_autocorr
10from aubio.gnuplot import gnuplot_create, gnuplot_addargs
11from aubio.aubiowrapper import *
12from math import exp,log
13
14usage = "usage: %s [options] -i soundfile" % sys.argv[0]
15
16def parse_args():
17 from optparse import OptionParser
18 parser = OptionParser(usage=usage)
19 parser.add_option("-i","--input",
20 action="store", dest="filename",
21 help="input sound file")
22 parser.add_option("-n","--printframe",
23 action="store", dest="printframe", default=-1,
24 help="make a plot of the n_th frame")
25 gnuplot_addargs(parser)
26 (options, args) = parser.parse_args()
27 if not options.filename:
28 print "no file name given\n", usage
29 sys.exit(1)
30 return options, args
31
32def plotdata(x,y,plottitle="",**keyw):
33 import Gnuplot
34 return Gnuplot.Data(x, y, title="%s" % plottitle,**keyw)
35
36options, args = parse_args()
37filename = options.filename
38xsize = float(options.xsize)
39ysize = float(options.ysize)
40
41printframe = int(options.printframe)
42
43if options.outplot and printframe > 0:
44 extension = options.outplot.split('.')[-1]
45 outplot = '.'.join(options.outplot.split('.')[:-1])
46else:
47 extension = ''
48 outplot = None
49f = gnuplot_create(outplot,extension,options)
50
51params = taskparams()
52params.onsetmode = 'specdiff'
53task = taskbeat(filename,params=params)
54
55hopsize = params.hopsize
56bufsize = params.bufsize
57btstep = task.btstep
58winlen = task.btwinlen
59laglen = winlen/4
60step = winlen/4
61
62timesig = 0
63maxnumelem = 4
64gp = 0
65counter = 0
66flagconst = 0
67constthresh = 3.901
68g_var = 3.901
69rp = 0
70rp1 = 0
71rp2 = 0
72g_mu = 0
73
74rayparam = 48/512.*winlen
75
76t = [i for i in range(hopsize)]
77#tlong = [i for i in range(hopsize*(btstep-1))]
78#tall = [i for i in range(hopsize*btstep)]
79sig = [0 for i in range(hopsize*btstep*4)]
80dfx = [i for i in range(winlen)]
81dfframe = [0 for i in range(winlen)]
82dfrev = [0 for i in range(winlen)]
83acframe = [0 for i in range(winlen/2)]
84
85localacf = [0 for i in range(winlen)]
86inds = [0 for i in range(maxnumelem)]
87
88acx = [i for i in range(laglen)]
89acfout = [0 for i in range(laglen)]
90
91phwv = [0 for i in range(2*laglen)]
92phwvx = [i for i in range(2*laglen)]
93
94dfwvnorm = exp(log(2.0)*(winlen+2.)/rayparam);
95dfwv = [exp(log(2.)*(i+1.)/rayparam)/dfwvnorm for i in range(winlen)]
96
97gwv = [exp(-.5*(j+1.-g_mu)**2/g_var**2) for j in range(laglen)]
98rwv = [(i+1.)/rayparam**2 * exp(-(i+1.)**2 / (2.*rayparam)**2)
99 for i in range(0,laglen)]
100acf = fvec(winlen,1)
101
102nrframe = 0
103while (task.readsize == params.hopsize):
104 task()
105 #print task.pos2
106 sig[:-hopsize] = [i for i in sig[-(btstep*4-1)*hopsize:]]
107 sig[-hopsize:] = [task.myvec.get(i,0) for i in t]
108
109 #g('set xrange [%f:%f]' % (t[0],t[-1]))
110 #time.sleep(.2)
111 if task.pos2==btstep-1:
112 nrframe += 1
113 dfframe = [task.dfframe.get(i,0) for i in range(winlen)]
114 # start beattracking_do
115 for i in range(winlen):
116 dfrev[winlen-1-i] = 0.
117 dfrev[winlen-1-i] = dfframe[i]*dfwv[i]
118 aubio_autocorr(task.dfframe(),acf());
119 acframe = [acf.get(i,0) for i in range(winlen/2)]
120 if printframe == nrframe or printframe == -1:
121 d = [[plotdata(range(0,btstep*hopsize*4,4),sig[0:-1:4],plottitle="input signal", with='lines')]]
122 d += [[plotdata(range(-winlen,0),dfframe,plottitle="onset detection", with='lines')]]
123 d += [[plotdata(range(winlen/2),acframe,plottitle="autocorrelation", with='lines')]]
124
125 # plot all this
126 if printframe == nrframe or printframe == -1:
127
128 f('set lmargin 4')
129 f('set rmargin 4')
130 f('set size %f,%f' % (1.0*xsize,1.0*ysize) )
131 f('set key spacing 1.3')
132 f('set multiplot')
133
134 f('set size %f,%f' % (1.0*xsize,0.33*ysize) )
135 f('set orig %f,%f' % (0.0*xsize,0.66*ysize) )
136 f('set xrange [%f:%f]' % (0,btstep*hopsize*4) )
137 f('set yrange [%f:%f]' % (-1.2*max(sig),1.2*max(sig)) )
138 f.title('Input signal')
139 f.xlabel('time (samples)')
140 f.plot(*d[0])
141 f('set size %f,%f' % (1.0*xsize,0.33*ysize) )
142 f('set orig %f,%f' % (0.0*xsize,0.33*ysize) )
143 f('set xrange [%f:%f]' % (-winlen,0) )
144 f('set autoscale y')
145 f.title('Onset detection function')
146 f.xlabel('time (df samples)')
147 f.plot(*d[1])
148 f('set size %f,%f' % (1.0*xsize,0.33*ysize) )
149 f('set orig %f,%f' % (0.0*xsize,0.00*ysize) )
150 f('set xrange [%f:%f]' % (0,winlen/2) )
151 f.title('Autocorrelation')
152 f.xlabel('lag (df samples)')
153 f.plot(*d[2])
154 f('set nomultiplot')
155 if printframe == -1: a = sys.stdin.read()
156 elif 0 < printframe and printframe < nrframe:
157 break
python/test/cvec.py+0−51
@@ -1,51 +0,0 @@
1import unittest
2
3from aubio.aubiowrapper import *
4
5buf_size = 2048
6channels = 3
7
8class cvec_test_case(unittest.TestCase):
9
10 def setUp(self):
11 self.vector = new_cvec(buf_size, channels)
12
13 def tearDown(self):
14 del_cvec(self.vector)
15
16 def test_cvec(self):
17 """ create and delete cvec """
18 pass
19
20 def test_cvec_read_norm(self):
21 """ check new cvec norm elements are set to 0. """
22 for index in range(buf_size/2+1):
23 for channel in range(channels):
24 self.assertEqual(cvec_read_norm(self.vector,channel,index),0.)
25
26 def test_cvec_read_phas(self):
27 """ check new cvec phas elements are set to 0. """
28 for index in range(buf_size/2+1):
29 for channel in range(channels):
30 self.assertEqual(cvec_read_phas(self.vector,channel,index),0.)
31
32 def test_cvec_write_norm(self):
33 """ check new cvec norm elements are set with cvec_write_norm """
34 for index in range(buf_size/2+1):
35 for channel in range(channels):
36 cvec_write_norm(self.vector,1.,channel,index)
37 for index in range(buf_size/2+1):
38 for channel in range(channels):
39 self.assertEqual(cvec_read_norm(self.vector,channel,index),1.)
40
41 def test_cvec_write_phas(self):
42 """ check new cvec phas elements are set with cvec_write_phas """
43 for index in range(buf_size/2+1):
44 for channel in range(channels):
45 cvec_write_phas(self.vector,1.,channel,index)
46 for index in range(buf_size/2+1):
47 for channel in range(channels):
48 self.assertEqual(cvec_read_phas(self.vector,channel,index),1.)
49
50if __name__ == '__main__':
51 unittest.main()
python/test/fvec.py+0−36
@@ -1,36 +0,0 @@
1import unittest
2
3from aubio.aubiowrapper import *
4
5buf_size = 2048
6channels = 3
7
8class fvec_test_case(unittest.TestCase):
9
10 def setUp(self):
11 self.vector = new_fvec(buf_size, channels)
12
13 def tearDown(self):
14 del_fvec(self.vector)
15
16 def test_fvec(self):
17 """ create and delete fvec """
18 pass
19
20 def test_fvec_read_sample(self):
21 """ check new fvec elements are set to 0. """
22 for index in range(buf_size):
23 for channel in range(channels):
24 self.assertEqual(fvec_read_sample(self.vector,channel,index),0.)
25
26 def test_fvec_write_sample(self):
27 """ check new fvec elements are set with fvec_write_sample """
28 for index in range(buf_size):
29 for channel in range(channels):
30 fvec_write_sample(self.vector,1.,channel,index)
31 for index in range(buf_size):
32 for channel in range(channels):
33 self.assertEqual(fvec_read_sample(self.vector,channel,index),1.)
34
35if __name__ == '__main__':
36 unittest.main()
python/test/list_missing_tests+0−30
@@ -1,30 +0,0 @@
1#! /usr/bin/python
2
3from glob import glob
4from os.path import splitext, exists
5import sys
6
7if len(sys.argv) > 1: verbose = True
8else: verbose = False
9
10cfiles = [ file.split('/')[-1] for file in glob('../../src/*.c') ]
11cfiles.sort()
12
13for cfile in cfiles:
14 pythonfile=splitext(cfile)[0]+'.py'
15 if not exists(pythonfile):
16 print "[X] %30s" % cfile, "[ ] %30s" % pythonfile
17 #print cfile, "has NO test", pythonfile
18 elif verbose:
19 print "[X] %30s" % cfile, "[X] %30s" % pythonfile
20
21pythonfiles = [ file.split('/')[-1] for file in glob('*.py') ]
22pythonfiles.sort()
23
24for pythonfile in pythonfiles:
25 cfile=splitext(pythonfile)[0]+'.c'
26 if not exists('../../'+cfile):
27 print "[ ] %30s" % cfile, "[X] %30s" % pythonfile
28 #print pythonfile, "has NO source", cfile
29 elif verbose:
30 print "[X] %30s" % cfile, "[X] %30s" % pythonfile
python/test/run_all_tests+0−15
@@ -1,15 +0,0 @@
1#! /usr/bin/python
2
3# add ${src}/python and ${src}/python/aubio/.libs to python path
4# so the script is runnable from a compiled source tree.
5import sys, os
6sys.path.append('..')
7sys.path.append(os.path.join('..','aubio','.libs'))
8
9import unittest
10
11modules_to_test = ['aubiomodule', 'fvec', 'cvec']
12
13if __name__ == '__main__':
14 for module in modules_to_test: exec('from %s import *' % module)
15 unittest.main()

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