move tests/python/demo to tests/, add localaubio.py module helpers
authorPaul Brossier <piem@piem.org>
Sat, 1 Dec 2007 16:56:57 +0000 (17:56 +0100)
committerPaul Brossier <piem@piem.org>
Sat, 1 Dec 2007 16:56:57 +0000 (17:56 +0100)
27 files changed:
tests/demo/bench/onset/Makefile.am [new file with mode: 0644]
tests/demo/bench/onset/bench-delay [new file with mode: 0755]
tests/demo/bench/onset/bench-onset [new file with mode: 0755]
tests/demo/bench/onset/bench-window [new file with mode: 0755]
tests/demo/bench/pitch/Makefile.am [new file with mode: 0644]
tests/demo/bench/pitch/bench-pitch-isolated [new file with mode: 0755]
tests/demo/bench/pitch/bench-pitch-plot-isolated [new file with mode: 0755]
tests/demo/bench/tempo/demo-tempo [new file with mode: 0755]
tests/demo/bench/tempo/demo-tempo-acf [new file with mode: 0755]
tests/demo/localaubio.py [new file with mode: 0644]
tests/demo/plot_mfcc_filterbank.py [new file with mode: 0755]
tests/python/bench/onset/Makefile.am [deleted file]
tests/python/bench/onset/bench-delay [deleted file]
tests/python/bench/onset/bench-onset [deleted file]
tests/python/bench/onset/bench-window [deleted file]
tests/python/bench/pitch/Makefile.am [deleted file]
tests/python/bench/pitch/bench-pitch-isolated [deleted file]
tests/python/bench/pitch/bench-pitch-plot-isolated [deleted file]
tests/python/bench/tempo/demo-tempo [deleted file]
tests/python/bench/tempo/demo-tempo-acf [deleted file]
tests/python/demo/plot_mfcc_filterbank.py [deleted file]
tests/python/localaubio.py [new file with mode: 0644]
tests/python/run_all_tests
tests/python/src/cvec.py
tests/python/src/fvec.py
tests/python/src/onset/peakpick.py
tests/python/template.py

diff --git a/tests/demo/bench/onset/Makefile.am b/tests/demo/bench/onset/Makefile.am
new file mode 100644 (file)
index 0000000..98a27b6
--- /dev/null
@@ -0,0 +1,44 @@
+export BASEDIR=../../../..
+export PYTHONPATH=$(BASEDIR)/python
+export LD_LIBRARY_PATH=$(BASEDIR)/src/.libs:$(BASEDIR)/ext/.libs
+
+DETAILSOURCE = \
+       /var/tmp/Onset-Mirex2005/poly_pitched \
+       /var/tmp/Onset-Mirex2005/solo_bars_and_bells \
+       /var/tmp/Onset-Mirex2005/solo_brass \
+       /var/tmp/Onset-Mirex2005/solo_drums \
+       /var/tmp/Onset-Mirex2005/solo_plucked_strings \
+       /var/tmp/Onset-Mirex2005/solo_singing_voice \
+       /var/tmp/Onset-Mirex2005/solo_sustained_strings \
+       /var/tmp/Onset-Mirex2005/solo_winds \
+       /var/tmp/Onset-Mirex2005/complex
+
+SOURCE = /var/tmp/Onset-Mirex2005
+
+TESTSOURCE = \
+       /var/tmp/Onset-Mirex2005/solo_bars_and_bells \
+       /var/tmp/Onset-Mirex2005/solo_winds \
+       /archives/samples/DB/PercussivePhrases/CM18/Samba_Audio
+
+test-aubiocut:            $(patsubst %, %.aubiocut,    $(TESTSOURCE))
+test-aubiodelay:          $(patsubst %, %.aubiodelay,  $(TESTSOURCE))
+test-aubiowindow:         $(patsubst %, %.aubiowindow, $(TESTSOURCE))
+
+final-aubiocut:           $(patsubst %, %.aubiocut,    $(DETAILSOURCE) $(SOURCE))
+final-aubiodelay:         $(patsubst %, %.aubiodelay,  $(SOURCE))
+final-aubiowindow:        $(patsubst %, %.aubiowindow, $(SOURCE))
+
+%.aubiocut: %
+       rm -f `basename $@`
+       ./bench-onset $< | tee `basename $@`
+       -diff `basename $@`.ref `basename $@`
+
+%.aubiodelay: %
+       rm -f `basename $@`
+       ./bench-delay $< | tee `basename $@`
+       -diff `basename $@`.ref `basename $@`
+
+%.aubiowindow: %
+       rm -f `basename $@`
+       ./bench-window $< | tee `basename $@`
+       -diff `basename $@`.ref `basename $@`
diff --git a/tests/demo/bench/onset/bench-delay b/tests/demo/bench/onset/bench-delay
new file mode 100755 (executable)
index 0000000..9a213d0
--- /dev/null
@@ -0,0 +1,62 @@
+#! /usr/bin/python
+
+from aubio.bench.onset import benchonset
+from aubio.task.onset import taskonset
+from aubio.task.params import taskparams
+
+class mybenchonset(benchonset):
+
+       def run_bench(self,modes=['dual'],thresholds=[0.5]):
+               from os.path import dirname,basename
+               self.thresholds = thresholds
+               self.pretty_titles()
+
+               for mode in modes:
+                       d = []
+                       self.params.onsetmode = mode
+                       self.params.localmin = True
+                       self.params.delay = 1. 
+                       self.params.threshold = thresholds[0]
+                       #
+                       self.params.localmin = False 
+                       self.params.delay = 0. 
+                       self.dir_eval_print()
+                       self.plotdiffs(d,plottitle="Causal")
+                       #
+                       self.params.localmin = True
+                       self.params.delay = 0. 
+                       self.dir_eval_print()
+                       self.plotdiffs(d,plottitle="Local min")
+
+                       self.params.localmin = False 
+                       self.params.delay = 6. 
+                       self.dir_eval_print()
+                       self.plotdiffs(d,plottitle="Fixed delay")
+
+                       #self.plotplotdiffs(d)
+                       outplot = "_-_".join(("delay",mode,basename(self.datadir) ))
+                       for ext in ("png","svg","ps"):
+                               self.plotplotdiffs(d,outplot=outplot,extension=ext)
+
+if __name__ == "__main__":
+       import sys
+       if len(sys.argv) > 1: datapath = sys.argv[1]
+       else: print "ERR: a path is required"; sys.exit(1)
+       modes = ['complex', 'energy', 'phase', 'hfc', 'specdiff', 'kl', 'mkl', 'dual']
+       #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]
+       #modes = [ 'hfc' ]
+       thresholds = [0.5]
+
+       #datapath = "%s%s" % (DATADIR,'/onset/DB/*/')
+       respath = '/var/tmp/DB-testings'
+
+       benchonset = mybenchonset(datapath,respath,checkres=True,checkanno=True)
+       benchonset.params = taskparams()
+       benchonset.task = taskonset
+       benchonset.valuesdict = {}
+
+       try:
+               #benchonset.auto_learn2(modes=modes)
+               benchonset.run_bench(modes=modes,thresholds=thresholds)
+       except KeyboardInterrupt:
+               sys.exit(1)
diff --git a/tests/demo/bench/onset/bench-onset b/tests/demo/bench/onset/bench-onset
new file mode 100755 (executable)
index 0000000..53a7ee9
--- /dev/null
@@ -0,0 +1,68 @@
+#! /usr/bin/python
+
+from aubio.task import *
+
+from aubio.bench.onset import mmean, stdev, benchonset
+
+class mybenchonset(benchonset):
+
+       def run_bench(self,modes=['dual'],thresholds=[0.5]):
+               from os.path import dirname,basename
+               self.thresholds = thresholds
+               self.pretty_titles()
+               d,e,f,g = [],[],[],[]
+               for mode in modes:
+                       self.vlist = []
+                       self.params.onsetmode = mode
+                       #self.params.localmin = True
+
+                       for threshold in self.thresholds:
+                               self.params.threshold = threshold
+                               self.dir_eval_print()
+                               self.vlist.append(self.v)
+                       self.plotroc(d)
+                       self.plotfmeas(e)
+                       self.plotpr(f)
+                       #self.plothistcat(g)
+
+
+
+               #self.plotplotroc(d)
+               #self.plotplotfmeas(e)
+               #self.plotplotpr(f)
+               outplot = basename(self.datadir)
+               for ext in ("png","svg","ps"):
+                       self.plotplotroc(d,outplot=outplot,extension=ext)
+                       self.plotplotfmeas(e,outplot=outplot,extension=ext)
+                       self.plotplotpr(f,outplot=outplot,extension=ext)
+                       #self.plotplothistcat(g,outplot=outplot,extension=ext)
+
+if __name__ == "__main__":
+       import sys
+       if len(sys.argv) > 1: datapath = sys.argv[1]
+       else: print "ERR: a path is required"; sys.exit(1)
+       modes = ['complex', 'energy', 'phase', 'hfc', 'specdiff', 'kl', 'mkl', 'dual']
+       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]
+       #modes = [ 'hfc' ]
+       #thresholds = [0.5]
+
+       #datapath = "%s%s" % (DATADIR,'/onset/DB/*/')
+       respath = '/var/tmp/DB-testings'
+
+       benchonset = mybenchonset(datapath,respath,checkres=True,checkanno=True)
+       benchonset.params = taskparams()
+       benchonset.params.dcthreshold = -1.
+       benchonset.params.silence = -100.
+       benchonset.params.delay = 5. 
+       benchonset.params.bufsize = 1024 
+       benchonset.params.hopsize = 256 
+       benchonset.params.step = float(benchonset.params.hopsize)/float(benchonset.params.samplerate)
+       benchonset.params.mintol = 4.1 
+       benchonset.task = taskonset
+       benchonset.valuesdict = {}
+
+       try:
+               #benchonset.auto_learn2(modes=modes)
+               benchonset.run_bench(modes=modes,thresholds=thresholds)
+       except KeyboardInterrupt:
+               sys.exit(1)
diff --git a/tests/demo/bench/onset/bench-window b/tests/demo/bench/onset/bench-window
new file mode 100755 (executable)
index 0000000..1fa4a7b
--- /dev/null
@@ -0,0 +1,59 @@
+#! /usr/bin/python
+
+from aubio.bench.onset import benchonset
+from aubio.task.onset import taskonset
+from aubio.task.params import taskparams
+
+class mybenchonset(benchonset):
+
+       def run_bench(self,modes=['dual'],thresholds=[0.5]):
+               from os.path import dirname,basename
+               self.thresholds = thresholds
+               self.pretty_titles()
+
+               for mode in modes:
+
+                       self.params.onsetmode = mode
+                       self.params.localmin = True
+                       self.params.delay = 1. 
+                       self.params.threshold = thresholds[0]
+                       self.params.localmin = False 
+                       #
+                       for delay in (0., 4.):
+                               d = []
+                               self.params.delay = delay 
+                               for buf in (2048, 1024, 512):
+                                       for hop in (buf/2, buf/4):
+                                               self.params.bufsize = buf 
+                                               self.params.hopsize = hop 
+                                               self.params.step = float(self.params.hopsize)/float(self.params.samplerate)
+                                               self.dir_eval_print()
+                                               self.plotdiffs(d,plottitle="%s %s" % (buf,hop))
+                               #plotplotdiffs(d)
+                               outplot = "_-_".join(("window",mode,"delay-%s" % int(delay),
+                                       basename(self.datadir) ))
+                               for ext in ("png","svg","ps"):
+                                       self.plotplotdiffs(d,outplot=outplot,extension=ext)
+
+if __name__ == "__main__":
+       import sys
+       if len(sys.argv) > 1: datapath = sys.argv[1]
+       else: print "ERR: a path is required"; sys.exit(1)
+       modes = ['complex', 'energy', 'phase', 'hfc', 'specdiff', 'kl', 'mkl', 'dual']
+       #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]
+       #modes = [ 'hfc' ]
+       thresholds = [0.5]
+
+       #datapath = "%s%s" % (DATADIR,'/onset/DB/*/')
+       respath = '/var/tmp/DB-testings'
+
+       benchonset = mybenchonset(datapath,respath,checkres=True,checkanno=True)
+       benchonset.params = taskparams()
+       benchonset.task = taskonset
+       benchonset.valuesdict = {}
+
+       try:
+               #benchonset.auto_learn2(modes=modes)
+               benchonset.run_bench(modes=modes,thresholds=thresholds)
+       except KeyboardInterrupt:
+               sys.exit(1)
diff --git a/tests/demo/bench/pitch/Makefile.am b/tests/demo/bench/pitch/Makefile.am
new file mode 100644 (file)
index 0000000..c2a08b3
--- /dev/null
@@ -0,0 +1,59 @@
+export AUBIODIR=../../../..
+export PYTHONPATH=$(AUBIODIR)/python
+export LD_LIBRARY_PATH=$(AUBIODIR)/src/.libs:$(AUBIODIR)/ext/.libs
+
+CP=cp -a
+
+SOURCE = \
+       $(BASEDIR)/isolated/vibraphone \
+       $(BASEDIR)/isolated/clavinet \
+       $(BASEDIR)/isolated/elecguitar \
+       $(BASEDIR)/isolated/piano \
+       $(BASEDIR)/isolated/rhodes \
+       $(BASEDIR)/isolated
+
+
+MONOSOURCE = \
+       $(BASEDIR)/monophonic/Mirex04/daisy \
+       $(BASEDIR)/monophonic/Mirex04/midi \
+       $(BASEDIR)/monophonic/Mirex04/jazz \
+       $(BASEDIR)/monophonic/Mirex04/pop \
+       $(BASEDIR)/monophonic/Mirex04/opera \
+       $(BASEDIR)/monophonic/Mirex04
+
+POLYSOURCE = \
+       $(BASEDIR)/polyphonic/Mirex04/daisy \
+       $(BASEDIR)/polyphonic/Mirex04/midi \
+       $(BASEDIR)/polyphonic/Mirex04/jazz \
+       $(BASEDIR)/polyphonic/Mirex04/pop \
+       $(BASEDIR)/polyphonic/Mirex04/opera \
+       $(BASEDIR)/polyphonic/Mirex04
+
+test-aubiopitch-isolated:    $(patsubst %, %.aubiopitch-isolated, $(SOURCE))
+test-aubiopitch-monophonic:  $(patsubst %, %.aubiopitch-monophonic, $(MONOSOURCE))
+test-aubiopitch-polyphonic:  $(patsubst %, %.aubiopitch-polyphonic, $(POLYSOURCE))
+
+plotpitch:
+       ../../../aubiopitch -m fcomb,mcomb,yinfft,yin,schmitt -i jazz2REF.wav -p -t 0.2 -l 100 -M 600 -O jazz2REF.ps
+       ../../../aubiopitch -m fcomb,mcomb,yinfft,yin,schmitt -p -t 0.2 -l 300 -M 900 -i opera_fem2REF.wav -O opera_fem2REF.ps
+
+timings:
+       ./bench-timings $(BASEDIR)/polyphonic/Mirex04/opera
+
+%.aubiopitch-isolated: %
+       $(CP) isolated/`basename $@` isolated/`basename $@`.old
+       ./bench-pitch-isolated $< | tee isolated/`basename $@`
+       -diff isolated/`basename $@`.old isolated/`basename $@`
+       -diff isolated/`basename $@`.ref isolated/`basename $@`
+
+%.aubiopitch-monophonic: %
+       $(CP) monophonic/`basename $@` monophonic/`basename $@`.old
+       ./bench-pitch-monophonic $< | tee monophonic/`basename $@`
+       -diff monophonic/`basename $@`.ref monophonic/`basename $@`
+       -diff monophonic/`basename $@`.old monophonic/`basename $@`
+
+%.aubiopitch-polyphonic: %
+       $(CP) polyphonic/`basename $@` polyphonic/`basename $@`.old
+       ./bench-pitch-polyphonic $< | tee polyphonic/`basename $@`
+       -diff polyphonic/`basename $@`.ref polyphonic/`basename $@`
+       -diff polyphonic/`basename $@`.old polyphonic/`basename $@`
diff --git a/tests/demo/bench/pitch/bench-pitch-isolated b/tests/demo/bench/pitch/bench-pitch-isolated
new file mode 100755 (executable)
index 0000000..c048b01
--- /dev/null
@@ -0,0 +1,198 @@
+#! /usr/bin/python
+
+from aubio.bench.node import *
+from aubio.task import *
+
+class benchpitch(bench):
+       
+       """ list of values to store per file """
+       valuenames = ['mode']
+       """ list of lists to store per file """
+       valuelists = ['truth', 'osil', 'esil', 'opit', 'epit', 'echr', 
+               'Msil', 'Mpit', 'Mchr',
+              'TotalPit', 'TotalPit', 'TotalChr' ]
+       """ list of values to print per dir """
+       printnames_total = [ 'mode', 'MinPit', 'MaxPit', 'TotalSil', 'TotalPit', 'TotalChr']
+       printnames_notes = [ 'mode', 'Note', 'Sil', 'Pit', 'Chr']
+       printnames = printnames_notes 
+
+       """ per dir """
+       formats = {'mode': "%12s" , 
+               'truth': "%s",
+               'osil': "%s", 'esil': "%s", 
+               'opit': "%s", 'epit': "%s", 'echr': "%s",
+    'Note': "%s", 'Sil': "%s", 'Chr': "%s", 'Pit': "%s",
+               'TotalPit': "%s", 'TotalSil': "%s", 'TotalChr': "%s",
+               'MinPit': "%s", 'MaxPit': "%s",
+               'Msil': "%s", 'Mpit': "%s", 'Mchr': "%s"}
+
+       def dir_eval(self):
+               """ evaluate statistical data over the directory """
+               v = self.v
+               v['mode']      = self.params.pitchmode
+
+       def file_exec(self,input,output):
+               filetask = self.task(input,params=self.params)
+               computed_data = filetask.compute_all()
+               osil, esil, opit, epit, echr = filetask.eval(computed_data,tol=0.5)
+               self.v['truth'].append(int(filetask.truth))
+               assert opit > 0
+               
+               self.v['osil'].append(osil)
+               self.v['esil'].append(esil)
+               self.v['opit'].append(opit)
+               self.v['epit'].append(epit)
+               self.v['echr'].append(echr)
+
+               self.v['Msil'].append(esil/float(osil)*100.)
+               self.v['Mpit'].append(epit/float(opit)*100.)
+               self.v['Mchr'].append(echr/float(opit)*100.)
+               #print results#, computed_data
+               #print input, results, results - float(input.split('.')[-2])
+                       
+       def run_bench(self,modes=['schmitt'],multiplot=0):
+               from os.path import basename
+               self.modes = modes
+               self.pretty_titles()
+               d = []
+               for mode in self.modes:
+                       self.params.pitchmode = mode
+                       self.dir_exec()
+                       self.dir_eval()
+                       truth   = [i for i in range(min(self.v['truth']),max(self.v['truth'])+1)]
+                       allOsil = [0 for i in range(min(self.v['truth']),max(self.v['truth'])+1)]
+                       allEsil = [0 for i in range(min(self.v['truth']),max(self.v['truth'])+1)]
+                       allOpit = [0 for i in range(min(self.v['truth']),max(self.v['truth'])+1)]
+                       allEpit = [0 for i in range(min(self.v['truth']),max(self.v['truth'])+1)]
+                       allEchr = [0 for i in range(min(self.v['truth']),max(self.v['truth'])+1)]
+                       allMsil = [0 for i in range(min(self.v['truth']),max(self.v['truth'])+1)]
+                       allMpit = [0 for i in range(min(self.v['truth']),max(self.v['truth'])+1)]
+                       allMchr = [0 for i in range(min(self.v['truth']),max(self.v['truth'])+1)]
+                       for i in range(len(self.v['truth'])):
+                               allOsil[self.v['truth'][i]-min(self.v['truth'])] += self.v['osil'][i]
+                               allEsil[self.v['truth'][i]-min(self.v['truth'])] += self.v['esil'][i]
+                               allOpit[self.v['truth'][i]-min(self.v['truth'])] += self.v['opit'][i]
+                               allEpit[self.v['truth'][i]-min(self.v['truth'])] += self.v['epit'][i]
+                               allEchr[self.v['truth'][i]-min(self.v['truth'])] += self.v['echr'][i]
+                       for i in range(len(truth)):
+                               allOsil[i] = max(1,allOsil[i])
+                               allOpit[i] = max(1,allOpit[i])
+                               allMsil[i] = allEsil[i]/float(allOsil[i])*100.
+                               allMpit[i] = allEpit[i]/float(allOpit[i])*100.
+                               allMchr[i] = allEchr[i]/float(allOpit[i])*100.
+                               self.v['Sil'], self.v['Pit'], self.v['Chr'] = allMsil[i], allMpit[i], allMchr[i]
+                               self.v['Note'] = truth[i]
+                               #self.printnames = self.printnames_notes
+                               self.pretty_print()
+                       self.v['TotalSil'] = sum(allMsil)/len(truth)
+                       self.v['TotalPit'] = sum(allMpit)/len(truth)
+                       self.v['TotalChr'] = sum(allMchr)/len(truth)
+                       self.v['MinPit'] = min(truth) 
+                       self.v['MaxPit'] = max(truth) 
+                       #self.printnames = self.printnames_total
+                       #self.pretty_print()
+
+                       plot = []
+                       self.plotpitchtessiture(plot,
+                               truth, 
+                               allMpit,
+                               plottitle="%s %s" % (self.v['mode'],self.params.bufsize),
+                               plotmode='lines')
+                       """
+                       self.plotpitchtessiture(plot,
+                               truth, 
+                               allMchr,
+                               plottitle="%s %s" % (self.v['mode'],"%12"),
+                               plotmode='lines')
+                       self.plotpitchtessiture(plot,
+                               truth, 
+                               allMsil,
+                               plottitle="%s %s" % (self.v['mode'],"sil"),
+                               plotmode='lines')
+                       """
+                       title = basename(self.datadir)
+                       if multiplot:
+                               d.append(plot)
+                       else:
+                               d += plot
+               outplot = "_-_".join(('pitchtessiture',title))
+               self.xmin = min(self.v['truth']) #20.
+               self.xmax = max(self.v['truth'])
+               for ext in ('ps','png','svg'): #,''):
+                       self.plotplotpitchtessiture(d,
+                               plottitle="".join(['Performance against MIDI Note number (',
+                                       title,
+                                       ", %s" % len(self.sndlist), " samples)"]),
+                               outplot=outplot,
+                               extension=ext,multiplot=multiplot)
+               #d.append('beta = .25,orig(x) title \"-2 octave\"')
+               #d.append('beta = .50,orig(x) title \"-1 octave\"')
+               #d.append('beta = 1.0,orig(x) title \"original\"')
+               #d.append('beta = 2.0,orig(x) title \"+1 octave\"')
+
+       """
+       Plot functions 
+       """
+
+       def plotpitchtessiture(self,d,lx,ly,plottitle="",plotmode='linespoints'):
+               import Gnuplot, Gnuplot.funcutils
+               d.append(Gnuplot.Data(lx, ly, with=plotmode, title="%s" % (plottitle) ))
+
+       def plotplotpitchtessiture(self,d,plottitle='',outplot=0,extension='',multiplot=1):
+               from aubio.gnuplot import gnuplot_create
+               g = gnuplot_create(outplot=outplot,extension=extension) 
+               #g.title(plottitle)
+               #g('orig(x) = beta*x')
+               g.title(plottitle)
+               g('set yrange [50:100]')
+               # erase axis
+               g('set xrange [%f:%f]' % (self.xmin,self.xmax)) #(self.xmax - (self.xmax-self.xmin)*5./4.,self.xmax))
+               #g.plot(*d)
+               g('set border 3')
+               g('set xtics nomirror')
+               g('set ytics nomirror')
+               g('set key bottom')
+               if multiplot:
+                       g('set multiplot')
+                       for i in range(len(d)):
+                               # plot onset detection functions
+                               g('set size   1,%f' % ( 1.0/float(len(d)) ) )
+                               g('set origin 0,%f' % ( 1.0*float(len(d)-i-1)/float(len(d)) ) )
+                               #g.ylabel('%Correct detections')
+                               g('set xrange [%f:%f]' % (self.xmin,self.xmax)) #(self.xmax - (self.xmax-self.xmin)*5./4.,self.xmax))
+                               g.plot(*d[i])
+                               g('unset title')
+                       g('unset multiplot')
+               else:
+                       g.plot(*d)
+
+
+if __name__ == "__main__":
+       import sys
+       if len(sys.argv) > 1: datapath = sys.argv[1]
+       else: print "error: a path is required"; sys.exit(1)
+       if len(sys.argv) > 2:
+               for each in sys.argv[3:-1]: print each
+       modes = ['schmitt', 'yin', 'yinfft', 'mcomb', 'fcomb']
+       #modes = ['mcomb']
+
+       params = taskparams()
+       params.bufsize = 2048 # 4096 
+       params.hopsize = 256
+       params.silence = -60.
+       params.pitchsmooth = 0 
+       params.pitchmax = 20000
+       params.pitchmin = 20
+       params.pitchyinfft = 0.95
+       benchpitch = benchpitch(datapath,params=params)
+       benchpitch.task = taskpitch
+
+       #benchpitch.titles  = [ 'mode', 'thres', 'avg', 'avgdist' ]
+       #benchpitch.formats = ["%12s" , "| %6s", "| %6s", "| %6s", "| %6s", "| %6s" ]
+       try:
+               benchpitch.run_bench(modes=modes)
+       except KeyboardInterrupt:
+               print "Interrupted by user"
+               sys.exit(1)
+
+       sys.exit(0)
diff --git a/tests/demo/bench/pitch/bench-pitch-plot-isolated b/tests/demo/bench/pitch/bench-pitch-plot-isolated
new file mode 100755 (executable)
index 0000000..9bae85e
--- /dev/null
@@ -0,0 +1,63 @@
+#! /usr/bin/python
+
+if __name__ == '__main__':
+  import sys, Gnuplot
+  from aubio.gnuplot import gnuplot_create
+  from aubio.txtfile import read_datafile
+  from aubio.plot.keyboard import draw_keyboard
+  lines = []
+  titles = []
+  for file in range(len(sys.argv)-1):
+    l = read_datafile(sys.argv[file+1])
+    notes, score = [],[]
+    for i in range(len(l)):
+      notes.append(l[i][0])
+      score.append(l[i][2])
+    lines.append(Gnuplot.Data(notes,score,
+      with='linespoints',
+      title=sys.argv[file+1].split('.')[-1]))
+    titles.append(sys.argv[file+1].split('.')[-1])
+  blacks,whites = draw_keyboard(firstnote = notes[0], lastnote = notes[-1], 
+    y0= 40, y1 = 50)
+
+  g = gnuplot_create(sys.argv[file+1].split('.')[-3],'ps')
+  #g = gnuplot_create('','')
+  #g = gnuplot_create('/tmp/test','eps')
+  g('set yrange [40:100]')
+  #g('set xrange [%f:%f]' % (notes[0],notes[-1]+60))
+  g('set size 0.5')
+  g('set key outside')
+
+  g('set border 3')
+  g('set xtics nomirror')
+  g('set ytics nomirror')
+  multiplot = 1
+  oplots = lines
+  g('set size 1,2')
+  if multiplot:
+    height = 2.
+    g('set lmargin 10')
+    #g('set rmargin 15')
+    g('set multiplot')
+    g('set yrange [50:100]')
+    g('set xrange [%f:%f]' % (notes[0],notes[-1]))
+    g('set xtics %f,12' % notes[0])
+    g('set nokey')
+    for i in range(len(oplots)):
+      g.ylabel(titles[i])
+      g('set size %f,%f' % (1.,height*.85/float(len(oplots))))
+      g('set origin 0,%f' % (height*(.15+.85*float(len(oplots)-i-1)/float(len(oplots)))))
+      g.plot(oplots[i])
+    g('set title "Raw pitch accuracy (%) against midi note numbers"')
+    g('set noxtics')
+    g('set noytics')
+    g('set size %f,%f' % (1.,.15*height))
+    g('set origin 0,%f' % 0)
+    g('set yrange [40:50]')
+    g('set xrange [%f:%f]' % (notes[0],notes[-1]))
+    g.xlabel('')
+    g.ylabel('')
+    g.plot(whites,blacks)
+    g('unset multiplot')
+  else:
+    g.plot(whites,blacks,*lines)
diff --git a/tests/demo/bench/tempo/demo-tempo b/tests/demo/bench/tempo/demo-tempo
new file mode 100755 (executable)
index 0000000..02579a6
--- /dev/null
@@ -0,0 +1,313 @@
+#! /usr/bin/python
+
+""" this file was written by Paul Brossier 
+  it is released under the GNU/GPL license.
+"""
+
+import sys,time
+from aubio.task import taskbeat,taskparams
+from aubio.aubioclass import fvec, aubio_autocorr
+from aubio.gnuplot import gnuplot_create, gnuplot_addargs
+from aubio.aubiowrapper import *
+from math import exp,log
+
+usage = "usage: %s [options] -i soundfile" % sys.argv[0]
+
+def parse_args():
+        from optparse import OptionParser
+        parser = OptionParser(usage=usage)
+        parser.add_option("-i","--input",
+                          action="store", dest="filename", 
+                          help="input sound file")
+        parser.add_option("-n","--printframe",
+                          action="store", dest="printframe", default=-1, 
+                          help="make a plot of the n_th frame")
+        gnuplot_addargs(parser)
+        (options, args) = parser.parse_args()
+        if not options.filename: 
+                 print "no file name given\n", usage
+                 sys.exit(1)
+        return options, args
+
+def plotdata(x,y,plottitle="",**keyw):
+       import Gnuplot
+       return Gnuplot.Data(x, y, title="%s" % plottitle,**keyw)
+
+options, args = parse_args()
+filename = options.filename
+xsize = float(options.xsize)
+ysize = float(options.ysize)
+
+printframe = int(options.printframe)
+
+if options.outplot and printframe > 0: 
+  extension = options.outplot.split('.')[-1] 
+  outplot = '.'.join(options.outplot.split('.')[:-1])
+else: 
+  extension = ''
+  outplot = None
+f = gnuplot_create(outplot=outplot,extension=extension,options=options)
+
+params = taskparams()
+params.onsetmode = 'specdiff'
+task = taskbeat(filename,params=params)
+
+hopsize = params.hopsize
+bufsize = params.bufsize
+btstep = task.btstep
+winlen = task.btwinlen
+laglen = winlen/4
+step = winlen/4
+
+timesig = 0
+maxnumelem = 4
+gp = 0
+counter = 0
+flagconst = 0
+constthresh = 3.901
+g_var      = 3.901
+rp = 0
+rp1 = 0
+rp2 = 0
+g_mu = 0
+
+rayparam = 48/512.*winlen
+
+#t     = [i for i in range(hopsize)]
+#tlong = [i for i in range(hopsize*(btstep-1))]
+#tall  = [i for i in range(hopsize*btstep)]
+#a     = [0 for i in range(hopsize*btstep)]
+dfx = [i for i in range(winlen)]
+dfframe = [0 for i in range(winlen)]
+dfrev = [0 for i in range(winlen)]
+acframe = [0 for i in range(winlen)]
+
+localacf = [0 for i in range(winlen)]
+inds = [0 for i in range(maxnumelem)]
+
+acx = [i for i in range(laglen)]
+acfout  = [0 for i in range(laglen)]
+
+phwv  = [0 for i in range(2*laglen)]
+phwvx = [i for i in range(2*laglen)]
+
+dfwvnorm = exp(log(2.0)*(winlen+2.)/rayparam);
+dfwv = [exp(log(2.)*(i+1.)/rayparam)/dfwvnorm for i in range(winlen)]
+
+gwv = [exp(-.5*(j+1.-g_mu)**2/g_var**2) for j in range(laglen)]
+rwv = [(i+1.)/rayparam**2 * exp(-(i+1.)**2 / (2.*rayparam)**2)
+        for i in range(0,laglen)] 
+acf = fvec(winlen,1)
+
+nrframe = 0
+while (task.readsize == params.hopsize):
+  task()
+  #print task.pos2
+  #a[:-hopsize] = [i for i in a[-(btstep-1)*hopsize:]]
+  #a[-hopsize:] = [task.myvec.get(i,0) for i in t]
+
+  #g('set xrange [%f:%f]' % (t[0],t[-1]))
+  #time.sleep(.2)
+  if task.pos2==btstep-1:
+    nrframe += 1
+    dfframe = [task.dfframe.get(i,0) for i in range(winlen)]
+    if printframe == nrframe or printframe == -1:
+      d  = [[plotdata(range(-winlen,0),dfframe,plottitle="onset detection", with='lines')]]
+    # start beattracking_do
+    for i in range(winlen):
+      dfrev[winlen-1-i] = 0.
+      dfrev[winlen-1-i] = dfframe[i]*dfwv[i]
+    aubio_autocorr(task.dfframe(),acf()); 
+    acframe = [acf.get(i,0) for i in range(winlen)]
+    if not timesig:
+      numelem = 4
+    else:
+      numelem = timesig
+
+    old = 0
+    acfout = [0 for i in range(winlen/4)]
+    for i in range(1,laglen-1):
+      for a in range(1,numelem+1):
+        for b in range (1-a,a):
+          acfout[i] += acframe[a*(i+1)+b-1] * 1./(2.*a-1.)*rwv[i]
+          if old < acfout[i]:
+            old = acfout[i]
+            maxi = i
+    rp = max(maxi,1);
+
+    if printframe == nrframe or printframe == -1:
+      rwvs = [rwv[i]*max(acframe) for i in range(len(rwv))]
+      d += [[plotdata(acx,acfout,plottitle="comb filterbank", with='lines', axes='x1y1'),
+          plotdata([rp,rp],[1.2*old,min(acfout)],plottitle="period", with='impulses', axes='x1y1'),
+          plotdata(acx,rwvs,plottitle="L_w", with='lines', axes='x1y1')]]
+
+    # getperiod
+    inds = [0 for i in range(maxnumelem)]
+    localacf = [0 for i in range(winlen)]
+    period = 0
+    for a in range(1,4+1):
+      for b in range(1-a,a):
+        localacf[a*rp+b-1] = acframe[a*rp+b-1]
+    for i in range(numelem):
+      maxindex = 0
+      maxval = 0.0
+      for j in range(rp*(i+1)+i):
+        if localacf[j] > maxval:
+          maxval = localacf[j]
+          maxind = j
+        localacf[j] = 0
+      inds[i] = maxind
+    for i in range(numelem):
+      period += inds[i]/(i+1.)
+    period = period/numelem
+    #print "period", period
+
+    # checkstate 
+    if gp:
+      # context dependant model
+      acfout = [0 for i in range(winlen/4)]
+      old = 0
+      for i in range(laglen-1):
+        for a in range(timesig):
+          for b in range(1-a,a):
+            acfout[i] += acframe[a*(i+1)+b-1] * gwv[i]
+        if old < acfout[i]:
+          old = acfout[i]
+          maxi = i
+      gp = maxi
+    else:
+      # general model
+      gp = 0
+    #print "gp", gp
+    if printframe == nrframe or printframe == -1:
+      gwvs = [gwv[i]*max(acfout) for i in range(len(gwv))]
+      d += [[plotdata(acx,acfout,plottitle="comb filterbank", with='lines', axes='x1y1'),
+          plotdata(gp,old,plottitle="period", with='impulses', axes='x1y1'),
+          plotdata(acx,gwvs,plottitle="L_{gw}", with='lines', axes='x1y1')]]
+
+    if counter == 0:
+      # initial step
+      if abs(gp-rp) > 2.*constthresh:
+        flagstep = 1
+        counter  = 3
+      else:
+        flagstep = 0
+    #print "flagstep", flagstep
+    #print "rp2,rp1,rp", rp2,rp1,rp
+    acfw = [dfframe[i]*dfwv[i] for i in range(winlen)]
+
+    if counter == 1 and flagstep == 1:
+      # "3rd frame after flagstep set"
+      if abs(2.*rp-rp1- rp2) < constthresh:
+        flagconst = 1
+        counter = 0
+      else:
+        flagconst = 0
+        counter = 2
+    elif counter > 0:
+      counter -= 1
+
+    rp2 = rp1; rp1 = rp
+
+    if flagconst:
+      # "first run of new hypothesis"
+      gp = rp
+      g_mu = gp
+      timesig = 4 #FIXME
+      gwv = [exp(-.5*(j+1.-g_mu)**2/g_var**2) for j in range(laglen)]
+      flagconst = 0
+      bp = gp
+      phwv = [1 for i in range(2*laglen)]
+    elif timesig:
+      # "contex dependant"
+      bp = gp
+      if step > lastbeat:
+        phwv = [exp(-.5*(1.+j-step+lastbeat)**2/(bp/8.)) for j in range(2*laglen)]
+      else:
+        print "NOT using phase weighting"
+        phwv = [1 for i in range(2*laglen)]
+    else:
+      # "initial state"
+      bp = rp
+      phwv = [1 for i in range(2*laglen)]
+
+    while bp < 25:
+      print "WARNING, doubling the beat period"
+      bp *= 2
+
+    # 
+    phout = [0. for i in range(winlen)]
+
+    kmax = int(winlen/float(bp));
+
+    old = 0
+    for i in range(bp):
+      phout[i] = 0.
+      for k in range(kmax):
+        phout[i] += dfrev[i+bp*k] * phwv[i]
+      if phout[i] > old:
+        old = phout[i]
+        maxi = i
+    maxindex = maxi 
+    if (maxindex == winlen - 1): maxindex = 0
+    phase = 1 + maxindex
+    i = 1
+    beat = bp - phase
+    beats= []
+    if beat >= 0: beats.append(beat)
+    while beat+bp < step: 
+      beat += bp
+      beats.append(beat)
+    lastbeat = beat
+    #print beats,
+    #print "the lastbeat is", lastbeat
+
+    # plot all this
+    if printframe == nrframe or printframe == -1:
+      phwvs = [phwv[i]*max(phout) for i in range(len(phwv))]
+      d += [[plotdata(range(-laglen,0),phwvs[laglen:0:-1],plottitle="A_{gw}", with='lines',axes='x1y1'),
+          plotdata(range(-laglen,0),phout[laglen:0:-1],plottitle="df", with='lines'),
+          plotdata(-phase,old,plottitle="phase", with='impulses', axes='x1y1'),
+          plotdata([i for i in beats],[old for i in beats],plottitle="predicted", with='impulses')
+          ]]
+    #d += [[plotdata(dfx,dfwv,plottitle="phase weighting", with='lines', axes='x1y2'),
+    #    plotdata(dfx,dfrev,plottitle="df reverse", with='lines', axes='x1y1')]]
+    #d += [[plotdata(dfx,phout,plottitle="phase", with='lines', axes='x1y2')]]
+    #d += [[plotdata(dfx,dfwv,plottitle="phase weighting", with='lines', axes='x1y2'),
+    #    plotdata(dfx,dfrev,plottitle="df reverse", with='lines', axes='x1y1')]]
+    #d += [[plotdata(dfx,phout,plottitle="phase", with='lines', axes='x1y2')]]
+
+      f('set lmargin 4')
+      f('set rmargin 4')
+      f('set size %f,%f' % (1.0*xsize,1.0*ysize) )
+      f('set key spacing 1.3')
+      f('set multiplot')
+
+      f('set size %f,%f' % (1.0*xsize,0.33*ysize) )
+      f('set orig %f,%f' % (0.0*xsize,0.66*ysize) )
+      f('set xrange [%f:%f]' % (-winlen,0) )
+      f.title('Onset detection function')
+      f.xlabel('time (df samples)')
+      f.plot(*d[0])
+      f('set size %f,%f' % (0.5*xsize,0.33*ysize) )
+      f('set orig %f,%f' % (0.0*xsize,0.33*ysize) )
+      f('set xrange [%f:%f]' % (0,laglen) )
+      f.title('Period detection: Rayleygh weighting')
+      f.xlabel('lag (df samples)')
+      f.plot(*d[1])
+      f('set size %f,%f' % (0.5*xsize,0.33*ysize) )
+      f('set orig %f,%f' % (0.5*xsize,0.33*ysize) )
+      f('set xrange [%f:%f]' % (0,laglen) )
+      f.title('Period detection: Gaussian weighting')
+      f.xlabel('lag (df samples)')
+      f.plot(*d[2])
+      f('set size %f,%f' % (1.0*xsize,0.33*ysize) )
+      f('set orig %f,%f' % (0.0*xsize,0.00*ysize) )
+      f('set xrange [%f:%f]' % (-laglen,laglen) )
+      f.title('Phase detection and predicted beats')
+      f.xlabel('time (df samples)')
+      f.plot(*d[3])
+      f('set nomultiplot')
+    if printframe == -1: a = sys.stdin.read()
+    elif 0 < printframe and printframe < nrframe:
+      break
diff --git a/tests/demo/bench/tempo/demo-tempo-acf b/tests/demo/bench/tempo/demo-tempo-acf
new file mode 100755 (executable)
index 0000000..e099b81
--- /dev/null
@@ -0,0 +1,157 @@
+#! /usr/bin/python
+
+""" this file was written by Paul Brossier 
+  it is released under the GNU/GPL license.
+"""
+
+import sys,time
+from aubio.task import taskbeat,taskparams
+from aubio.aubioclass import fvec, aubio_autocorr
+from aubio.gnuplot import gnuplot_create, gnuplot_addargs
+from aubio.aubiowrapper import *
+from math import exp,log
+
+usage = "usage: %s [options] -i soundfile" % sys.argv[0]
+
+def parse_args():
+        from optparse import OptionParser
+        parser = OptionParser(usage=usage)
+        parser.add_option("-i","--input",
+                          action="store", dest="filename", 
+                          help="input sound file")
+        parser.add_option("-n","--printframe",
+                          action="store", dest="printframe", default=-1, 
+                          help="make a plot of the n_th frame")
+        gnuplot_addargs(parser)
+        (options, args) = parser.parse_args()
+        if not options.filename: 
+                 print "no file name given\n", usage
+                 sys.exit(1)
+        return options, args
+
+def plotdata(x,y,plottitle="",**keyw):
+       import Gnuplot
+       return Gnuplot.Data(x, y, title="%s" % plottitle,**keyw)
+
+options, args = parse_args()
+filename = options.filename
+xsize = float(options.xsize)
+ysize = float(options.ysize)
+
+printframe = int(options.printframe)
+
+if options.outplot and printframe > 0: 
+  extension = options.outplot.split('.')[-1] 
+  outplot = '.'.join(options.outplot.split('.')[:-1])
+else: 
+  extension = ''
+  outplot = None
+f = gnuplot_create(outplot,extension,options)
+
+params = taskparams()
+params.onsetmode = 'specdiff'
+task = taskbeat(filename,params=params)
+
+hopsize = params.hopsize
+bufsize = params.bufsize
+btstep = task.btstep
+winlen = task.btwinlen
+laglen = winlen/4
+step = winlen/4
+
+timesig = 0
+maxnumelem = 4
+gp = 0
+counter = 0
+flagconst = 0
+constthresh = 3.901
+g_var      = 3.901
+rp = 0
+rp1 = 0
+rp2 = 0
+g_mu = 0
+
+rayparam = 48/512.*winlen
+
+t     = [i for i in range(hopsize)]
+#tlong = [i for i in range(hopsize*(btstep-1))]
+#tall  = [i for i in range(hopsize*btstep)]
+sig    = [0 for i in range(hopsize*btstep*4)]
+dfx = [i for i in range(winlen)]
+dfframe = [0 for i in range(winlen)]
+dfrev = [0 for i in range(winlen)]
+acframe = [0 for i in range(winlen/2)]
+
+localacf = [0 for i in range(winlen)]
+inds = [0 for i in range(maxnumelem)]
+
+acx = [i for i in range(laglen)]
+acfout  = [0 for i in range(laglen)]
+
+phwv  = [0 for i in range(2*laglen)]
+phwvx = [i for i in range(2*laglen)]
+
+dfwvnorm = exp(log(2.0)*(winlen+2.)/rayparam);
+dfwv = [exp(log(2.)*(i+1.)/rayparam)/dfwvnorm for i in range(winlen)]
+
+gwv = [exp(-.5*(j+1.-g_mu)**2/g_var**2) for j in range(laglen)]
+rwv = [(i+1.)/rayparam**2 * exp(-(i+1.)**2 / (2.*rayparam)**2)
+        for i in range(0,laglen)] 
+acf = fvec(winlen,1)
+
+nrframe = 0
+while (task.readsize == params.hopsize):
+  task()
+  #print task.pos2
+  sig[:-hopsize] = [i for i in sig[-(btstep*4-1)*hopsize:]]
+  sig[-hopsize:] = [task.myvec.get(i,0) for i in t]
+
+  #g('set xrange [%f:%f]' % (t[0],t[-1]))
+  #time.sleep(.2)
+  if task.pos2==btstep-1:
+    nrframe += 1
+    dfframe = [task.dfframe.get(i,0) for i in range(winlen)]
+    # start beattracking_do
+    for i in range(winlen):
+      dfrev[winlen-1-i] = 0.
+      dfrev[winlen-1-i] = dfframe[i]*dfwv[i]
+    aubio_autocorr(task.dfframe(),acf()); 
+    acframe = [acf.get(i,0) for i in range(winlen/2)]
+    if printframe == nrframe or printframe == -1:
+      d  = [[plotdata(range(0,btstep*hopsize*4,4),sig[0:-1:4],plottitle="input signal", with='lines')]]
+      d  += [[plotdata(range(-winlen,0),dfframe,plottitle="onset detection", with='lines')]]
+      d  += [[plotdata(range(winlen/2),acframe,plottitle="autocorrelation", with='lines')]]
+
+    # plot all this
+    if printframe == nrframe or printframe == -1:
+
+      f('set lmargin 4')
+      f('set rmargin 4')
+      f('set size %f,%f' % (1.0*xsize,1.0*ysize) )
+      f('set key spacing 1.3')
+      f('set multiplot')
+
+      f('set size %f,%f' % (1.0*xsize,0.33*ysize) )
+      f('set orig %f,%f' % (0.0*xsize,0.66*ysize) )
+      f('set xrange [%f:%f]' % (0,btstep*hopsize*4) )
+      f('set yrange [%f:%f]' % (-1.2*max(sig),1.2*max(sig)) )
+      f.title('Input signal')
+      f.xlabel('time (samples)')
+      f.plot(*d[0])
+      f('set size %f,%f' % (1.0*xsize,0.33*ysize) )
+      f('set orig %f,%f' % (0.0*xsize,0.33*ysize) )
+      f('set xrange [%f:%f]' % (-winlen,0) )
+      f('set autoscale y')
+      f.title('Onset detection function')
+      f.xlabel('time (df samples)')
+      f.plot(*d[1])
+      f('set size %f,%f' % (1.0*xsize,0.33*ysize) )
+      f('set orig %f,%f' % (0.0*xsize,0.00*ysize) )
+      f('set xrange [%f:%f]' % (0,winlen/2) )
+      f.title('Autocorrelation')
+      f.xlabel('lag (df samples)')
+      f.plot(*d[2])
+      f('set nomultiplot')
+    if printframe == -1: a = sys.stdin.read()
+    elif 0 < printframe and printframe < nrframe:
+      break
diff --git a/tests/demo/localaubio.py b/tests/demo/localaubio.py
new file mode 100644 (file)
index 0000000..a0d8c20
--- /dev/null
@@ -0,0 +1,13 @@
+
+try:
+  from aubio.aubiowrapper import * 
+except ImportError:
+  try: 
+    import os
+    import sys
+    cur_dir = os.path.dirname(sys.argv[0])
+    sys.path.append(os.path.join(cur_dir,'..','..','python'))
+    sys.path.append(os.path.join(cur_dir,'..','..','python','aubio','.libs'))
+    from aubio.aubiowrapper import * 
+  except ImportError:
+    raise
diff --git a/tests/demo/plot_mfcc_filterbank.py b/tests/demo/plot_mfcc_filterbank.py
new file mode 100755 (executable)
index 0000000..cb1be90
--- /dev/null
@@ -0,0 +1,42 @@
+#!/usr/bin/env python
+
+import pylab
+import numpy
+import sys
+
+from localaubio import *
+
+win_size = 2048 
+channels = 1
+n_filters = 40
+samplerate = 44100
+
+filterbank = new_aubio_filterbank_mfcc(n_filters, win_size, samplerate, 
+        0., samplerate) 
+
+mfcc_filters = []
+for channel in range(n_filters):
+  vec = aubio_filterbank_getchannel(filterbank,channel)
+  mfcc_filters.append([])
+  for index in range(win_size): 
+    mfcc_filters[channel].append(fvec_read_sample(vec,0,index))
+
+doLog=False
+if len(sys.argv)>1: 
+  if sys.argv[1]=='log':
+    doLog=True
+
+nmat= numpy.array(mfcc_filters)
+
+pylab.hold(True)
+
+n_filters=numpy.shape(nmat)[0]
+for i in range(n_filters):
+  if doLog==True:
+    pylab.semilogx(nmat[i,:])
+  else:
+    pylab.plot(nmat[i,:]) 
+
+pylab.hold(False)
+#pylab.savefig('test.png')
+pylab.show()
diff --git a/tests/python/bench/onset/Makefile.am b/tests/python/bench/onset/Makefile.am
deleted file mode 100644 (file)
index 98a27b6..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-export BASEDIR=../../../..
-export PYTHONPATH=$(BASEDIR)/python
-export LD_LIBRARY_PATH=$(BASEDIR)/src/.libs:$(BASEDIR)/ext/.libs
-
-DETAILSOURCE = \
-       /var/tmp/Onset-Mirex2005/poly_pitched \
-       /var/tmp/Onset-Mirex2005/solo_bars_and_bells \
-       /var/tmp/Onset-Mirex2005/solo_brass \
-       /var/tmp/Onset-Mirex2005/solo_drums \
-       /var/tmp/Onset-Mirex2005/solo_plucked_strings \
-       /var/tmp/Onset-Mirex2005/solo_singing_voice \
-       /var/tmp/Onset-Mirex2005/solo_sustained_strings \
-       /var/tmp/Onset-Mirex2005/solo_winds \
-       /var/tmp/Onset-Mirex2005/complex
-
-SOURCE = /var/tmp/Onset-Mirex2005
-
-TESTSOURCE = \
-       /var/tmp/Onset-Mirex2005/solo_bars_and_bells \
-       /var/tmp/Onset-Mirex2005/solo_winds \
-       /archives/samples/DB/PercussivePhrases/CM18/Samba_Audio
-
-test-aubiocut:            $(patsubst %, %.aubiocut,    $(TESTSOURCE))
-test-aubiodelay:          $(patsubst %, %.aubiodelay,  $(TESTSOURCE))
-test-aubiowindow:         $(patsubst %, %.aubiowindow, $(TESTSOURCE))
-
-final-aubiocut:           $(patsubst %, %.aubiocut,    $(DETAILSOURCE) $(SOURCE))
-final-aubiodelay:         $(patsubst %, %.aubiodelay,  $(SOURCE))
-final-aubiowindow:        $(patsubst %, %.aubiowindow, $(SOURCE))
-
-%.aubiocut: %
-       rm -f `basename $@`
-       ./bench-onset $< | tee `basename $@`
-       -diff `basename $@`.ref `basename $@`
-
-%.aubiodelay: %
-       rm -f `basename $@`
-       ./bench-delay $< | tee `basename $@`
-       -diff `basename $@`.ref `basename $@`
-
-%.aubiowindow: %
-       rm -f `basename $@`
-       ./bench-window $< | tee `basename $@`
-       -diff `basename $@`.ref `basename $@`
diff --git a/tests/python/bench/onset/bench-delay b/tests/python/bench/onset/bench-delay
deleted file mode 100755 (executable)
index 9a213d0..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-#! /usr/bin/python
-
-from aubio.bench.onset import benchonset
-from aubio.task.onset import taskonset
-from aubio.task.params import taskparams
-
-class mybenchonset(benchonset):
-
-       def run_bench(self,modes=['dual'],thresholds=[0.5]):
-               from os.path import dirname,basename
-               self.thresholds = thresholds
-               self.pretty_titles()
-
-               for mode in modes:
-                       d = []
-                       self.params.onsetmode = mode
-                       self.params.localmin = True
-                       self.params.delay = 1. 
-                       self.params.threshold = thresholds[0]
-                       #
-                       self.params.localmin = False 
-                       self.params.delay = 0. 
-                       self.dir_eval_print()
-                       self.plotdiffs(d,plottitle="Causal")
-                       #
-                       self.params.localmin = True
-                       self.params.delay = 0. 
-                       self.dir_eval_print()
-                       self.plotdiffs(d,plottitle="Local min")
-
-                       self.params.localmin = False 
-                       self.params.delay = 6. 
-                       self.dir_eval_print()
-                       self.plotdiffs(d,plottitle="Fixed delay")
-
-                       #self.plotplotdiffs(d)
-                       outplot = "_-_".join(("delay",mode,basename(self.datadir) ))
-                       for ext in ("png","svg","ps"):
-                               self.plotplotdiffs(d,outplot=outplot,extension=ext)
-
-if __name__ == "__main__":
-       import sys
-       if len(sys.argv) > 1: datapath = sys.argv[1]
-       else: print "ERR: a path is required"; sys.exit(1)
-       modes = ['complex', 'energy', 'phase', 'hfc', 'specdiff', 'kl', 'mkl', 'dual']
-       #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]
-       #modes = [ 'hfc' ]
-       thresholds = [0.5]
-
-       #datapath = "%s%s" % (DATADIR,'/onset/DB/*/')
-       respath = '/var/tmp/DB-testings'
-
-       benchonset = mybenchonset(datapath,respath,checkres=True,checkanno=True)
-       benchonset.params = taskparams()
-       benchonset.task = taskonset
-       benchonset.valuesdict = {}
-
-       try:
-               #benchonset.auto_learn2(modes=modes)
-               benchonset.run_bench(modes=modes,thresholds=thresholds)
-       except KeyboardInterrupt:
-               sys.exit(1)
diff --git a/tests/python/bench/onset/bench-onset b/tests/python/bench/onset/bench-onset
deleted file mode 100755 (executable)
index 53a7ee9..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-#! /usr/bin/python
-
-from aubio.task import *
-
-from aubio.bench.onset import mmean, stdev, benchonset
-
-class mybenchonset(benchonset):
-
-       def run_bench(self,modes=['dual'],thresholds=[0.5]):
-               from os.path import dirname,basename
-               self.thresholds = thresholds
-               self.pretty_titles()
-               d,e,f,g = [],[],[],[]
-               for mode in modes:
-                       self.vlist = []
-                       self.params.onsetmode = mode
-                       #self.params.localmin = True
-
-                       for threshold in self.thresholds:
-                               self.params.threshold = threshold
-                               self.dir_eval_print()
-                               self.vlist.append(self.v)
-                       self.plotroc(d)
-                       self.plotfmeas(e)
-                       self.plotpr(f)
-                       #self.plothistcat(g)
-
-
-
-               #self.plotplotroc(d)
-               #self.plotplotfmeas(e)
-               #self.plotplotpr(f)
-               outplot = basename(self.datadir)
-               for ext in ("png","svg","ps"):
-                       self.plotplotroc(d,outplot=outplot,extension=ext)
-                       self.plotplotfmeas(e,outplot=outplot,extension=ext)
-                       self.plotplotpr(f,outplot=outplot,extension=ext)
-                       #self.plotplothistcat(g,outplot=outplot,extension=ext)
-
-if __name__ == "__main__":
-       import sys
-       if len(sys.argv) > 1: datapath = sys.argv[1]
-       else: print "ERR: a path is required"; sys.exit(1)
-       modes = ['complex', 'energy', 'phase', 'hfc', 'specdiff', 'kl', 'mkl', 'dual']
-       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]
-       #modes = [ 'hfc' ]
-       #thresholds = [0.5]
-
-       #datapath = "%s%s" % (DATADIR,'/onset/DB/*/')
-       respath = '/var/tmp/DB-testings'
-
-       benchonset = mybenchonset(datapath,respath,checkres=True,checkanno=True)
-       benchonset.params = taskparams()
-       benchonset.params.dcthreshold = -1.
-       benchonset.params.silence = -100.
-       benchonset.params.delay = 5. 
-       benchonset.params.bufsize = 1024 
-       benchonset.params.hopsize = 256 
-       benchonset.params.step = float(benchonset.params.hopsize)/float(benchonset.params.samplerate)
-       benchonset.params.mintol = 4.1 
-       benchonset.task = taskonset
-       benchonset.valuesdict = {}
-
-       try:
-               #benchonset.auto_learn2(modes=modes)
-               benchonset.run_bench(modes=modes,thresholds=thresholds)
-       except KeyboardInterrupt:
-               sys.exit(1)
diff --git a/tests/python/bench/onset/bench-window b/tests/python/bench/onset/bench-window
deleted file mode 100755 (executable)
index 1fa4a7b..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-#! /usr/bin/python
-
-from aubio.bench.onset import benchonset
-from aubio.task.onset import taskonset
-from aubio.task.params import taskparams
-
-class mybenchonset(benchonset):
-
-       def run_bench(self,modes=['dual'],thresholds=[0.5]):
-               from os.path import dirname,basename
-               self.thresholds = thresholds
-               self.pretty_titles()
-
-               for mode in modes:
-
-                       self.params.onsetmode = mode
-                       self.params.localmin = True
-                       self.params.delay = 1. 
-                       self.params.threshold = thresholds[0]
-                       self.params.localmin = False 
-                       #
-                       for delay in (0., 4.):
-                               d = []
-                               self.params.delay = delay 
-                               for buf in (2048, 1024, 512):
-                                       for hop in (buf/2, buf/4):
-                                               self.params.bufsize = buf 
-                                               self.params.hopsize = hop 
-                                               self.params.step = float(self.params.hopsize)/float(self.params.samplerate)
-                                               self.dir_eval_print()
-                                               self.plotdiffs(d,plottitle="%s %s" % (buf,hop))
-                               #plotplotdiffs(d)
-                               outplot = "_-_".join(("window",mode,"delay-%s" % int(delay),
-                                       basename(self.datadir) ))
-                               for ext in ("png","svg","ps"):
-                                       self.plotplotdiffs(d,outplot=outplot,extension=ext)
-
-if __name__ == "__main__":
-       import sys
-       if len(sys.argv) > 1: datapath = sys.argv[1]
-       else: print "ERR: a path is required"; sys.exit(1)
-       modes = ['complex', 'energy', 'phase', 'hfc', 'specdiff', 'kl', 'mkl', 'dual']
-       #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]
-       #modes = [ 'hfc' ]
-       thresholds = [0.5]
-
-       #datapath = "%s%s" % (DATADIR,'/onset/DB/*/')
-       respath = '/var/tmp/DB-testings'
-
-       benchonset = mybenchonset(datapath,respath,checkres=True,checkanno=True)
-       benchonset.params = taskparams()
-       benchonset.task = taskonset
-       benchonset.valuesdict = {}
-
-       try:
-               #benchonset.auto_learn2(modes=modes)
-               benchonset.run_bench(modes=modes,thresholds=thresholds)
-       except KeyboardInterrupt:
-               sys.exit(1)
diff --git a/tests/python/bench/pitch/Makefile.am b/tests/python/bench/pitch/Makefile.am
deleted file mode 100644 (file)
index c2a08b3..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-export AUBIODIR=../../../..
-export PYTHONPATH=$(AUBIODIR)/python
-export LD_LIBRARY_PATH=$(AUBIODIR)/src/.libs:$(AUBIODIR)/ext/.libs
-
-CP=cp -a
-
-SOURCE = \
-       $(BASEDIR)/isolated/vibraphone \
-       $(BASEDIR)/isolated/clavinet \
-       $(BASEDIR)/isolated/elecguitar \
-       $(BASEDIR)/isolated/piano \
-       $(BASEDIR)/isolated/rhodes \
-       $(BASEDIR)/isolated
-
-
-MONOSOURCE = \
-       $(BASEDIR)/monophonic/Mirex04/daisy \
-       $(BASEDIR)/monophonic/Mirex04/midi \
-       $(BASEDIR)/monophonic/Mirex04/jazz \
-       $(BASEDIR)/monophonic/Mirex04/pop \
-       $(BASEDIR)/monophonic/Mirex04/opera \
-       $(BASEDIR)/monophonic/Mirex04
-
-POLYSOURCE = \
-       $(BASEDIR)/polyphonic/Mirex04/daisy \
-       $(BASEDIR)/polyphonic/Mirex04/midi \
-       $(BASEDIR)/polyphonic/Mirex04/jazz \
-       $(BASEDIR)/polyphonic/Mirex04/pop \
-       $(BASEDIR)/polyphonic/Mirex04/opera \
-       $(BASEDIR)/polyphonic/Mirex04
-
-test-aubiopitch-isolated:    $(patsubst %, %.aubiopitch-isolated, $(SOURCE))
-test-aubiopitch-monophonic:  $(patsubst %, %.aubiopitch-monophonic, $(MONOSOURCE))
-test-aubiopitch-polyphonic:  $(patsubst %, %.aubiopitch-polyphonic, $(POLYSOURCE))
-
-plotpitch:
-       ../../../aubiopitch -m fcomb,mcomb,yinfft,yin,schmitt -i jazz2REF.wav -p -t 0.2 -l 100 -M 600 -O jazz2REF.ps
-       ../../../aubiopitch -m fcomb,mcomb,yinfft,yin,schmitt -p -t 0.2 -l 300 -M 900 -i opera_fem2REF.wav -O opera_fem2REF.ps
-
-timings:
-       ./bench-timings $(BASEDIR)/polyphonic/Mirex04/opera
-
-%.aubiopitch-isolated: %
-       $(CP) isolated/`basename $@` isolated/`basename $@`.old
-       ./bench-pitch-isolated $< | tee isolated/`basename $@`
-       -diff isolated/`basename $@`.old isolated/`basename $@`
-       -diff isolated/`basename $@`.ref isolated/`basename $@`
-
-%.aubiopitch-monophonic: %
-       $(CP) monophonic/`basename $@` monophonic/`basename $@`.old
-       ./bench-pitch-monophonic $< | tee monophonic/`basename $@`
-       -diff monophonic/`basename $@`.ref monophonic/`basename $@`
-       -diff monophonic/`basename $@`.old monophonic/`basename $@`
-
-%.aubiopitch-polyphonic: %
-       $(CP) polyphonic/`basename $@` polyphonic/`basename $@`.old
-       ./bench-pitch-polyphonic $< | tee polyphonic/`basename $@`
-       -diff polyphonic/`basename $@`.ref polyphonic/`basename $@`
-       -diff polyphonic/`basename $@`.old polyphonic/`basename $@`
diff --git a/tests/python/bench/pitch/bench-pitch-isolated b/tests/python/bench/pitch/bench-pitch-isolated
deleted file mode 100755 (executable)
index c048b01..0000000
+++ /dev/null
@@ -1,198 +0,0 @@
-#! /usr/bin/python
-
-from aubio.bench.node import *
-from aubio.task import *
-
-class benchpitch(bench):
-       
-       """ list of values to store per file """
-       valuenames = ['mode']
-       """ list of lists to store per file """
-       valuelists = ['truth', 'osil', 'esil', 'opit', 'epit', 'echr', 
-               'Msil', 'Mpit', 'Mchr',
-              'TotalPit', 'TotalPit', 'TotalChr' ]
-       """ list of values to print per dir """
-       printnames_total = [ 'mode', 'MinPit', 'MaxPit', 'TotalSil', 'TotalPit', 'TotalChr']
-       printnames_notes = [ 'mode', 'Note', 'Sil', 'Pit', 'Chr']
-       printnames = printnames_notes 
-
-       """ per dir """
-       formats = {'mode': "%12s" , 
-               'truth': "%s",
-               'osil': "%s", 'esil': "%s", 
-               'opit': "%s", 'epit': "%s", 'echr': "%s",
-    'Note': "%s", 'Sil': "%s", 'Chr': "%s", 'Pit': "%s",
-               'TotalPit': "%s", 'TotalSil': "%s", 'TotalChr': "%s",
-               'MinPit': "%s", 'MaxPit': "%s",
-               'Msil': "%s", 'Mpit': "%s", 'Mchr': "%s"}
-
-       def dir_eval(self):
-               """ evaluate statistical data over the directory """
-               v = self.v
-               v['mode']      = self.params.pitchmode
-
-       def file_exec(self,input,output):
-               filetask = self.task(input,params=self.params)
-               computed_data = filetask.compute_all()
-               osil, esil, opit, epit, echr = filetask.eval(computed_data,tol=0.5)
-               self.v['truth'].append(int(filetask.truth))
-               assert opit > 0
-               
-               self.v['osil'].append(osil)
-               self.v['esil'].append(esil)
-               self.v['opit'].append(opit)
-               self.v['epit'].append(epit)
-               self.v['echr'].append(echr)
-
-               self.v['Msil'].append(esil/float(osil)*100.)
-               self.v['Mpit'].append(epit/float(opit)*100.)
-               self.v['Mchr'].append(echr/float(opit)*100.)
-               #print results#, computed_data
-               #print input, results, results - float(input.split('.')[-2])
-                       
-       def run_bench(self,modes=['schmitt'],multiplot=0):
-               from os.path import basename
-               self.modes = modes
-               self.pretty_titles()
-               d = []
-               for mode in self.modes:
-                       self.params.pitchmode = mode
-                       self.dir_exec()
-                       self.dir_eval()
-                       truth   = [i for i in range(min(self.v['truth']),max(self.v['truth'])+1)]
-                       allOsil = [0 for i in range(min(self.v['truth']),max(self.v['truth'])+1)]
-                       allEsil = [0 for i in range(min(self.v['truth']),max(self.v['truth'])+1)]
-                       allOpit = [0 for i in range(min(self.v['truth']),max(self.v['truth'])+1)]
-                       allEpit = [0 for i in range(min(self.v['truth']),max(self.v['truth'])+1)]
-                       allEchr = [0 for i in range(min(self.v['truth']),max(self.v['truth'])+1)]
-                       allMsil = [0 for i in range(min(self.v['truth']),max(self.v['truth'])+1)]
-                       allMpit = [0 for i in range(min(self.v['truth']),max(self.v['truth'])+1)]
-                       allMchr = [0 for i in range(min(self.v['truth']),max(self.v['truth'])+1)]
-                       for i in range(len(self.v['truth'])):
-                               allOsil[self.v['truth'][i]-min(self.v['truth'])] += self.v['osil'][i]
-                               allEsil[self.v['truth'][i]-min(self.v['truth'])] += self.v['esil'][i]
-                               allOpit[self.v['truth'][i]-min(self.v['truth'])] += self.v['opit'][i]
-                               allEpit[self.v['truth'][i]-min(self.v['truth'])] += self.v['epit'][i]
-                               allEchr[self.v['truth'][i]-min(self.v['truth'])] += self.v['echr'][i]
-                       for i in range(len(truth)):
-                               allOsil[i] = max(1,allOsil[i])
-                               allOpit[i] = max(1,allOpit[i])
-                               allMsil[i] = allEsil[i]/float(allOsil[i])*100.
-                               allMpit[i] = allEpit[i]/float(allOpit[i])*100.
-                               allMchr[i] = allEchr[i]/float(allOpit[i])*100.
-                               self.v['Sil'], self.v['Pit'], self.v['Chr'] = allMsil[i], allMpit[i], allMchr[i]
-                               self.v['Note'] = truth[i]
-                               #self.printnames = self.printnames_notes
-                               self.pretty_print()
-                       self.v['TotalSil'] = sum(allMsil)/len(truth)
-                       self.v['TotalPit'] = sum(allMpit)/len(truth)
-                       self.v['TotalChr'] = sum(allMchr)/len(truth)
-                       self.v['MinPit'] = min(truth) 
-                       self.v['MaxPit'] = max(truth) 
-                       #self.printnames = self.printnames_total
-                       #self.pretty_print()
-
-                       plot = []
-                       self.plotpitchtessiture(plot,
-                               truth, 
-                               allMpit,
-                               plottitle="%s %s" % (self.v['mode'],self.params.bufsize),
-                               plotmode='lines')
-                       """
-                       self.plotpitchtessiture(plot,
-                               truth, 
-                               allMchr,
-                               plottitle="%s %s" % (self.v['mode'],"%12"),
-                               plotmode='lines')
-                       self.plotpitchtessiture(plot,
-                               truth, 
-                               allMsil,
-                               plottitle="%s %s" % (self.v['mode'],"sil"),
-                               plotmode='lines')
-                       """
-                       title = basename(self.datadir)
-                       if multiplot:
-                               d.append(plot)
-                       else:
-                               d += plot
-               outplot = "_-_".join(('pitchtessiture',title))
-               self.xmin = min(self.v['truth']) #20.
-               self.xmax = max(self.v['truth'])
-               for ext in ('ps','png','svg'): #,''):
-                       self.plotplotpitchtessiture(d,
-                               plottitle="".join(['Performance against MIDI Note number (',
-                                       title,
-                                       ", %s" % len(self.sndlist), " samples)"]),
-                               outplot=outplot,
-                               extension=ext,multiplot=multiplot)
-               #d.append('beta = .25,orig(x) title \"-2 octave\"')
-               #d.append('beta = .50,orig(x) title \"-1 octave\"')
-               #d.append('beta = 1.0,orig(x) title \"original\"')
-               #d.append('beta = 2.0,orig(x) title \"+1 octave\"')
-
-       """
-       Plot functions 
-       """
-
-       def plotpitchtessiture(self,d,lx,ly,plottitle="",plotmode='linespoints'):
-               import Gnuplot, Gnuplot.funcutils
-               d.append(Gnuplot.Data(lx, ly, with=plotmode, title="%s" % (plottitle) ))
-
-       def plotplotpitchtessiture(self,d,plottitle='',outplot=0,extension='',multiplot=1):
-               from aubio.gnuplot import gnuplot_create
-               g = gnuplot_create(outplot=outplot,extension=extension) 
-               #g.title(plottitle)
-               #g('orig(x) = beta*x')
-               g.title(plottitle)
-               g('set yrange [50:100]')
-               # erase axis
-               g('set xrange [%f:%f]' % (self.xmin,self.xmax)) #(self.xmax - (self.xmax-self.xmin)*5./4.,self.xmax))
-               #g.plot(*d)
-               g('set border 3')
-               g('set xtics nomirror')
-               g('set ytics nomirror')
-               g('set key bottom')
-               if multiplot:
-                       g('set multiplot')
-                       for i in range(len(d)):
-                               # plot onset detection functions
-                               g('set size   1,%f' % ( 1.0/float(len(d)) ) )
-                               g('set origin 0,%f' % ( 1.0*float(len(d)-i-1)/float(len(d)) ) )
-                               #g.ylabel('%Correct detections')
-                               g('set xrange [%f:%f]' % (self.xmin,self.xmax)) #(self.xmax - (self.xmax-self.xmin)*5./4.,self.xmax))
-                               g.plot(*d[i])
-                               g('unset title')
-                       g('unset multiplot')
-               else:
-                       g.plot(*d)
-
-
-if __name__ == "__main__":
-       import sys
-       if len(sys.argv) > 1: datapath = sys.argv[1]
-       else: print "error: a path is required"; sys.exit(1)
-       if len(sys.argv) > 2:
-               for each in sys.argv[3:-1]: print each
-       modes = ['schmitt', 'yin', 'yinfft', 'mcomb', 'fcomb']
-       #modes = ['mcomb']
-
-       params = taskparams()
-       params.bufsize = 2048 # 4096 
-       params.hopsize = 256
-       params.silence = -60.
-       params.pitchsmooth = 0 
-       params.pitchmax = 20000
-       params.pitchmin = 20
-       params.pitchyinfft = 0.95
-       benchpitch = benchpitch(datapath,params=params)
-       benchpitch.task = taskpitch
-
-       #benchpitch.titles  = [ 'mode', 'thres', 'avg', 'avgdist' ]
-       #benchpitch.formats = ["%12s" , "| %6s", "| %6s", "| %6s", "| %6s", "| %6s" ]
-       try:
-               benchpitch.run_bench(modes=modes)
-       except KeyboardInterrupt:
-               print "Interrupted by user"
-               sys.exit(1)
-
-       sys.exit(0)
diff --git a/tests/python/bench/pitch/bench-pitch-plot-isolated b/tests/python/bench/pitch/bench-pitch-plot-isolated
deleted file mode 100755 (executable)
index 9bae85e..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-#! /usr/bin/python
-
-if __name__ == '__main__':
-  import sys, Gnuplot
-  from aubio.gnuplot import gnuplot_create
-  from aubio.txtfile import read_datafile
-  from aubio.plot.keyboard import draw_keyboard
-  lines = []
-  titles = []
-  for file in range(len(sys.argv)-1):
-    l = read_datafile(sys.argv[file+1])
-    notes, score = [],[]
-    for i in range(len(l)):
-      notes.append(l[i][0])
-      score.append(l[i][2])
-    lines.append(Gnuplot.Data(notes,score,
-      with='linespoints',
-      title=sys.argv[file+1].split('.')[-1]))
-    titles.append(sys.argv[file+1].split('.')[-1])
-  blacks,whites = draw_keyboard(firstnote = notes[0], lastnote = notes[-1], 
-    y0= 40, y1 = 50)
-
-  g = gnuplot_create(sys.argv[file+1].split('.')[-3],'ps')
-  #g = gnuplot_create('','')
-  #g = gnuplot_create('/tmp/test','eps')
-  g('set yrange [40:100]')
-  #g('set xrange [%f:%f]' % (notes[0],notes[-1]+60))
-  g('set size 0.5')
-  g('set key outside')
-
-  g('set border 3')
-  g('set xtics nomirror')
-  g('set ytics nomirror')
-  multiplot = 1
-  oplots = lines
-  g('set size 1,2')
-  if multiplot:
-    height = 2.
-    g('set lmargin 10')
-    #g('set rmargin 15')
-    g('set multiplot')
-    g('set yrange [50:100]')
-    g('set xrange [%f:%f]' % (notes[0],notes[-1]))
-    g('set xtics %f,12' % notes[0])
-    g('set nokey')
-    for i in range(len(oplots)):
-      g.ylabel(titles[i])
-      g('set size %f,%f' % (1.,height*.85/float(len(oplots))))
-      g('set origin 0,%f' % (height*(.15+.85*float(len(oplots)-i-1)/float(len(oplots)))))
-      g.plot(oplots[i])
-    g('set title "Raw pitch accuracy (%) against midi note numbers"')
-    g('set noxtics')
-    g('set noytics')
-    g('set size %f,%f' % (1.,.15*height))
-    g('set origin 0,%f' % 0)
-    g('set yrange [40:50]')
-    g('set xrange [%f:%f]' % (notes[0],notes[-1]))
-    g.xlabel('')
-    g.ylabel('')
-    g.plot(whites,blacks)
-    g('unset multiplot')
-  else:
-    g.plot(whites,blacks,*lines)
diff --git a/tests/python/bench/tempo/demo-tempo b/tests/python/bench/tempo/demo-tempo
deleted file mode 100755 (executable)
index 02579a6..0000000
+++ /dev/null
@@ -1,313 +0,0 @@
-#! /usr/bin/python
-
-""" this file was written by Paul Brossier 
-  it is released under the GNU/GPL license.
-"""
-
-import sys,time
-from aubio.task import taskbeat,taskparams
-from aubio.aubioclass import fvec, aubio_autocorr
-from aubio.gnuplot import gnuplot_create, gnuplot_addargs
-from aubio.aubiowrapper import *
-from math import exp,log
-
-usage = "usage: %s [options] -i soundfile" % sys.argv[0]
-
-def parse_args():
-        from optparse import OptionParser
-        parser = OptionParser(usage=usage)
-        parser.add_option("-i","--input",
-                          action="store", dest="filename", 
-                          help="input sound file")
-        parser.add_option("-n","--printframe",
-                          action="store", dest="printframe", default=-1, 
-                          help="make a plot of the n_th frame")
-        gnuplot_addargs(parser)
-        (options, args) = parser.parse_args()
-        if not options.filename: 
-                 print "no file name given\n", usage
-                 sys.exit(1)
-        return options, args
-
-def plotdata(x,y,plottitle="",**keyw):
-       import Gnuplot
-       return Gnuplot.Data(x, y, title="%s" % plottitle,**keyw)
-
-options, args = parse_args()
-filename = options.filename
-xsize = float(options.xsize)
-ysize = float(options.ysize)
-
-printframe = int(options.printframe)
-
-if options.outplot and printframe > 0: 
-  extension = options.outplot.split('.')[-1] 
-  outplot = '.'.join(options.outplot.split('.')[:-1])
-else: 
-  extension = ''
-  outplot = None
-f = gnuplot_create(outplot=outplot,extension=extension,options=options)
-
-params = taskparams()
-params.onsetmode = 'specdiff'
-task = taskbeat(filename,params=params)
-
-hopsize = params.hopsize
-bufsize = params.bufsize
-btstep = task.btstep
-winlen = task.btwinlen
-laglen = winlen/4
-step = winlen/4
-
-timesig = 0
-maxnumelem = 4
-gp = 0
-counter = 0
-flagconst = 0
-constthresh = 3.901
-g_var      = 3.901
-rp = 0
-rp1 = 0
-rp2 = 0
-g_mu = 0
-
-rayparam = 48/512.*winlen
-
-#t     = [i for i in range(hopsize)]
-#tlong = [i for i in range(hopsize*(btstep-1))]
-#tall  = [i for i in range(hopsize*btstep)]
-#a     = [0 for i in range(hopsize*btstep)]
-dfx = [i for i in range(winlen)]
-dfframe = [0 for i in range(winlen)]
-dfrev = [0 for i in range(winlen)]
-acframe = [0 for i in range(winlen)]
-
-localacf = [0 for i in range(winlen)]
-inds = [0 for i in range(maxnumelem)]
-
-acx = [i for i in range(laglen)]
-acfout  = [0 for i in range(laglen)]
-
-phwv  = [0 for i in range(2*laglen)]
-phwvx = [i for i in range(2*laglen)]
-
-dfwvnorm = exp(log(2.0)*(winlen+2.)/rayparam);
-dfwv = [exp(log(2.)*(i+1.)/rayparam)/dfwvnorm for i in range(winlen)]
-
-gwv = [exp(-.5*(j+1.-g_mu)**2/g_var**2) for j in range(laglen)]
-rwv = [(i+1.)/rayparam**2 * exp(-(i+1.)**2 / (2.*rayparam)**2)
-        for i in range(0,laglen)] 
-acf = fvec(winlen,1)
-
-nrframe = 0
-while (task.readsize == params.hopsize):
-  task()
-  #print task.pos2
-  #a[:-hopsize] = [i for i in a[-(btstep-1)*hopsize:]]
-  #a[-hopsize:] = [task.myvec.get(i,0) for i in t]
-
-  #g('set xrange [%f:%f]' % (t[0],t[-1]))
-  #time.sleep(.2)
-  if task.pos2==btstep-1:
-    nrframe += 1
-    dfframe = [task.dfframe.get(i,0) for i in range(winlen)]
-    if printframe == nrframe or printframe == -1:
-      d  = [[plotdata(range(-winlen,0),dfframe,plottitle="onset detection", with='lines')]]
-    # start beattracking_do
-    for i in range(winlen):
-      dfrev[winlen-1-i] = 0.
-      dfrev[winlen-1-i] = dfframe[i]*dfwv[i]
-    aubio_autocorr(task.dfframe(),acf()); 
-    acframe = [acf.get(i,0) for i in range(winlen)]
-    if not timesig:
-      numelem = 4
-    else:
-      numelem = timesig
-
-    old = 0
-    acfout = [0 for i in range(winlen/4)]
-    for i in range(1,laglen-1):
-      for a in range(1,numelem+1):
-        for b in range (1-a,a):
-          acfout[i] += acframe[a*(i+1)+b-1] * 1./(2.*a-1.)*rwv[i]
-          if old < acfout[i]:
-            old = acfout[i]
-            maxi = i
-    rp = max(maxi,1);
-
-    if printframe == nrframe or printframe == -1:
-      rwvs = [rwv[i]*max(acframe) for i in range(len(rwv))]
-      d += [[plotdata(acx,acfout,plottitle="comb filterbank", with='lines', axes='x1y1'),
-          plotdata([rp,rp],[1.2*old,min(acfout)],plottitle="period", with='impulses', axes='x1y1'),
-          plotdata(acx,rwvs,plottitle="L_w", with='lines', axes='x1y1')]]
-
-    # getperiod
-    inds = [0 for i in range(maxnumelem)]
-    localacf = [0 for i in range(winlen)]
-    period = 0
-    for a in range(1,4+1):
-      for b in range(1-a,a):
-        localacf[a*rp+b-1] = acframe[a*rp+b-1]
-    for i in range(numelem):
-      maxindex = 0
-      maxval = 0.0
-      for j in range(rp*(i+1)+i):
-        if localacf[j] > maxval:
-          maxval = localacf[j]
-          maxind = j
-        localacf[j] = 0
-      inds[i] = maxind
-    for i in range(numelem):
-      period += inds[i]/(i+1.)
-    period = period/numelem
-    #print "period", period
-
-    # checkstate 
-    if gp:
-      # context dependant model
-      acfout = [0 for i in range(winlen/4)]
-      old = 0
-      for i in range(laglen-1):
-        for a in range(timesig):
-          for b in range(1-a,a):
-            acfout[i] += acframe[a*(i+1)+b-1] * gwv[i]
-        if old < acfout[i]:
-          old = acfout[i]
-          maxi = i
-      gp = maxi
-    else:
-      # general model
-      gp = 0
-    #print "gp", gp
-    if printframe == nrframe or printframe == -1:
-      gwvs = [gwv[i]*max(acfout) for i in range(len(gwv))]
-      d += [[plotdata(acx,acfout,plottitle="comb filterbank", with='lines', axes='x1y1'),
-          plotdata(gp,old,plottitle="period", with='impulses', axes='x1y1'),
-          plotdata(acx,gwvs,plottitle="L_{gw}", with='lines', axes='x1y1')]]
-
-    if counter == 0:
-      # initial step
-      if abs(gp-rp) > 2.*constthresh:
-        flagstep = 1
-        counter  = 3
-      else:
-        flagstep = 0
-    #print "flagstep", flagstep
-    #print "rp2,rp1,rp", rp2,rp1,rp
-    acfw = [dfframe[i]*dfwv[i] for i in range(winlen)]
-
-    if counter == 1 and flagstep == 1:
-      # "3rd frame after flagstep set"
-      if abs(2.*rp-rp1- rp2) < constthresh:
-        flagconst = 1
-        counter = 0
-      else:
-        flagconst = 0
-        counter = 2
-    elif counter > 0:
-      counter -= 1
-
-    rp2 = rp1; rp1 = rp
-
-    if flagconst:
-      # "first run of new hypothesis"
-      gp = rp
-      g_mu = gp
-      timesig = 4 #FIXME
-      gwv = [exp(-.5*(j+1.-g_mu)**2/g_var**2) for j in range(laglen)]
-      flagconst = 0
-      bp = gp
-      phwv = [1 for i in range(2*laglen)]
-    elif timesig:
-      # "contex dependant"
-      bp = gp
-      if step > lastbeat:
-        phwv = [exp(-.5*(1.+j-step+lastbeat)**2/(bp/8.)) for j in range(2*laglen)]
-      else:
-        print "NOT using phase weighting"
-        phwv = [1 for i in range(2*laglen)]
-    else:
-      # "initial state"
-      bp = rp
-      phwv = [1 for i in range(2*laglen)]
-
-    while bp < 25:
-      print "WARNING, doubling the beat period"
-      bp *= 2
-
-    # 
-    phout = [0. for i in range(winlen)]
-
-    kmax = int(winlen/float(bp));
-
-    old = 0
-    for i in range(bp):
-      phout[i] = 0.
-      for k in range(kmax):
-        phout[i] += dfrev[i+bp*k] * phwv[i]
-      if phout[i] > old:
-        old = phout[i]
-        maxi = i
-    maxindex = maxi 
-    if (maxindex == winlen - 1): maxindex = 0
-    phase = 1 + maxindex
-    i = 1
-    beat = bp - phase
-    beats= []
-    if beat >= 0: beats.append(beat)
-    while beat+bp < step: 
-      beat += bp
-      beats.append(beat)
-    lastbeat = beat
-    #print beats,
-    #print "the lastbeat is", lastbeat
-
-    # plot all this
-    if printframe == nrframe or printframe == -1:
-      phwvs = [phwv[i]*max(phout) for i in range(len(phwv))]
-      d += [[plotdata(range(-laglen,0),phwvs[laglen:0:-1],plottitle="A_{gw}", with='lines',axes='x1y1'),
-          plotdata(range(-laglen,0),phout[laglen:0:-1],plottitle="df", with='lines'),
-          plotdata(-phase,old,plottitle="phase", with='impulses', axes='x1y1'),
-          plotdata([i for i in beats],[old for i in beats],plottitle="predicted", with='impulses')
-          ]]
-    #d += [[plotdata(dfx,dfwv,plottitle="phase weighting", with='lines', axes='x1y2'),
-    #    plotdata(dfx,dfrev,plottitle="df reverse", with='lines', axes='x1y1')]]
-    #d += [[plotdata(dfx,phout,plottitle="phase", with='lines', axes='x1y2')]]
-    #d += [[plotdata(dfx,dfwv,plottitle="phase weighting", with='lines', axes='x1y2'),
-    #    plotdata(dfx,dfrev,plottitle="df reverse", with='lines', axes='x1y1')]]
-    #d += [[plotdata(dfx,phout,plottitle="phase", with='lines', axes='x1y2')]]
-
-      f('set lmargin 4')
-      f('set rmargin 4')
-      f('set size %f,%f' % (1.0*xsize,1.0*ysize) )
-      f('set key spacing 1.3')
-      f('set multiplot')
-
-      f('set size %f,%f' % (1.0*xsize,0.33*ysize) )
-      f('set orig %f,%f' % (0.0*xsize,0.66*ysize) )
-      f('set xrange [%f:%f]' % (-winlen,0) )
-      f.title('Onset detection function')
-      f.xlabel('time (df samples)')
-      f.plot(*d[0])
-      f('set size %f,%f' % (0.5*xsize,0.33*ysize) )
-      f('set orig %f,%f' % (0.0*xsize,0.33*ysize) )
-      f('set xrange [%f:%f]' % (0,laglen) )
-      f.title('Period detection: Rayleygh weighting')
-      f.xlabel('lag (df samples)')
-      f.plot(*d[1])
-      f('set size %f,%f' % (0.5*xsize,0.33*ysize) )
-      f('set orig %f,%f' % (0.5*xsize,0.33*ysize) )
-      f('set xrange [%f:%f]' % (0,laglen) )
-      f.title('Period detection: Gaussian weighting')
-      f.xlabel('lag (df samples)')
-      f.plot(*d[2])
-      f('set size %f,%f' % (1.0*xsize,0.33*ysize) )
-      f('set orig %f,%f' % (0.0*xsize,0.00*ysize) )
-      f('set xrange [%f:%f]' % (-laglen,laglen) )
-      f.title('Phase detection and predicted beats')
-      f.xlabel('time (df samples)')
-      f.plot(*d[3])
-      f('set nomultiplot')
-    if printframe == -1: a = sys.stdin.read()
-    elif 0 < printframe and printframe < nrframe:
-      break
diff --git a/tests/python/bench/tempo/demo-tempo-acf b/tests/python/bench/tempo/demo-tempo-acf
deleted file mode 100755 (executable)
index e099b81..0000000
+++ /dev/null
@@ -1,157 +0,0 @@
-#! /usr/bin/python
-
-""" this file was written by Paul Brossier 
-  it is released under the GNU/GPL license.
-"""
-
-import sys,time
-from aubio.task import taskbeat,taskparams
-from aubio.aubioclass import fvec, aubio_autocorr
-from aubio.gnuplot import gnuplot_create, gnuplot_addargs
-from aubio.aubiowrapper import *
-from math import exp,log
-
-usage = "usage: %s [options] -i soundfile" % sys.argv[0]
-
-def parse_args():
-        from optparse import OptionParser
-        parser = OptionParser(usage=usage)
-        parser.add_option("-i","--input",
-                          action="store", dest="filename", 
-                          help="input sound file")
-        parser.add_option("-n","--printframe",
-                          action="store", dest="printframe", default=-1, 
-                          help="make a plot of the n_th frame")
-        gnuplot_addargs(parser)
-        (options, args) = parser.parse_args()
-        if not options.filename: 
-                 print "no file name given\n", usage
-                 sys.exit(1)
-        return options, args
-
-def plotdata(x,y,plottitle="",**keyw):
-       import Gnuplot
-       return Gnuplot.Data(x, y, title="%s" % plottitle,**keyw)
-
-options, args = parse_args()
-filename = options.filename
-xsize = float(options.xsize)
-ysize = float(options.ysize)
-
-printframe = int(options.printframe)
-
-if options.outplot and printframe > 0: 
-  extension = options.outplot.split('.')[-1] 
-  outplot = '.'.join(options.outplot.split('.')[:-1])
-else: 
-  extension = ''
-  outplot = None
-f = gnuplot_create(outplot,extension,options)
-
-params = taskparams()
-params.onsetmode = 'specdiff'
-task = taskbeat(filename,params=params)
-
-hopsize = params.hopsize
-bufsize = params.bufsize
-btstep = task.btstep
-winlen = task.btwinlen
-laglen = winlen/4
-step = winlen/4
-
-timesig = 0
-maxnumelem = 4
-gp = 0
-counter = 0
-flagconst = 0
-constthresh = 3.901
-g_var      = 3.901
-rp = 0
-rp1 = 0
-rp2 = 0
-g_mu = 0
-
-rayparam = 48/512.*winlen
-
-t     = [i for i in range(hopsize)]
-#tlong = [i for i in range(hopsize*(btstep-1))]
-#tall  = [i for i in range(hopsize*btstep)]
-sig    = [0 for i in range(hopsize*btstep*4)]
-dfx = [i for i in range(winlen)]
-dfframe = [0 for i in range(winlen)]
-dfrev = [0 for i in range(winlen)]
-acframe = [0 for i in range(winlen/2)]
-
-localacf = [0 for i in range(winlen)]
-inds = [0 for i in range(maxnumelem)]
-
-acx = [i for i in range(laglen)]
-acfout  = [0 for i in range(laglen)]
-
-phwv  = [0 for i in range(2*laglen)]
-phwvx = [i for i in range(2*laglen)]
-
-dfwvnorm = exp(log(2.0)*(winlen+2.)/rayparam);
-dfwv = [exp(log(2.)*(i+1.)/rayparam)/dfwvnorm for i in range(winlen)]
-
-gwv = [exp(-.5*(j+1.-g_mu)**2/g_var**2) for j in range(laglen)]
-rwv = [(i+1.)/rayparam**2 * exp(-(i+1.)**2 / (2.*rayparam)**2)
-        for i in range(0,laglen)] 
-acf = fvec(winlen,1)
-
-nrframe = 0
-while (task.readsize == params.hopsize):
-  task()
-  #print task.pos2
-  sig[:-hopsize] = [i for i in sig[-(btstep*4-1)*hopsize:]]
-  sig[-hopsize:] = [task.myvec.get(i,0) for i in t]
-
-  #g('set xrange [%f:%f]' % (t[0],t[-1]))
-  #time.sleep(.2)
-  if task.pos2==btstep-1:
-    nrframe += 1
-    dfframe = [task.dfframe.get(i,0) for i in range(winlen)]
-    # start beattracking_do
-    for i in range(winlen):
-      dfrev[winlen-1-i] = 0.
-      dfrev[winlen-1-i] = dfframe[i]*dfwv[i]
-    aubio_autocorr(task.dfframe(),acf()); 
-    acframe = [acf.get(i,0) for i in range(winlen/2)]
-    if printframe == nrframe or printframe == -1:
-      d  = [[plotdata(range(0,btstep*hopsize*4,4),sig[0:-1:4],plottitle="input signal", with='lines')]]
-      d  += [[plotdata(range(-winlen,0),dfframe,plottitle="onset detection", with='lines')]]
-      d  += [[plotdata(range(winlen/2),acframe,plottitle="autocorrelation", with='lines')]]
-
-    # plot all this
-    if printframe == nrframe or printframe == -1:
-
-      f('set lmargin 4')
-      f('set rmargin 4')
-      f('set size %f,%f' % (1.0*xsize,1.0*ysize) )
-      f('set key spacing 1.3')
-      f('set multiplot')
-
-      f('set size %f,%f' % (1.0*xsize,0.33*ysize) )
-      f('set orig %f,%f' % (0.0*xsize,0.66*ysize) )
-      f('set xrange [%f:%f]' % (0,btstep*hopsize*4) )
-      f('set yrange [%f:%f]' % (-1.2*max(sig),1.2*max(sig)) )
-      f.title('Input signal')
-      f.xlabel('time (samples)')
-      f.plot(*d[0])
-      f('set size %f,%f' % (1.0*xsize,0.33*ysize) )
-      f('set orig %f,%f' % (0.0*xsize,0.33*ysize) )
-      f('set xrange [%f:%f]' % (-winlen,0) )
-      f('set autoscale y')
-      f.title('Onset detection function')
-      f.xlabel('time (df samples)')
-      f.plot(*d[1])
-      f('set size %f,%f' % (1.0*xsize,0.33*ysize) )
-      f('set orig %f,%f' % (0.0*xsize,0.00*ysize) )
-      f('set xrange [%f:%f]' % (0,winlen/2) )
-      f.title('Autocorrelation')
-      f.xlabel('lag (df samples)')
-      f.plot(*d[2])
-      f('set nomultiplot')
-    if printframe == -1: a = sys.stdin.read()
-    elif 0 < printframe and printframe < nrframe:
-      break
diff --git a/tests/python/demo/plot_mfcc_filterbank.py b/tests/python/demo/plot_mfcc_filterbank.py
deleted file mode 100755 (executable)
index fb527f0..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-#!/usr/bin/env python
-
-import pylab
-import numpy
-import sys
-
-from aubio.aubiowrapper import * 
-
-win_size = 2048 
-channels = 1
-n_filters = 40
-samplerate = 44100
-
-filterbank = new_aubio_filterbank_mfcc(n_filters, win_size, samplerate, 
-        0., samplerate) 
-
-
-mfcc_filters = []
-for channel in range(n_filters):
-  vec = aubio_filterbank_getchannel(filterbank,channel)
-  mfcc_filters.append([])
-  for index in range(win_size): 
-    mfcc_filters[channel].append(fvec_read_sample(vec,0,index))
-
-doLog=False
-if len(sys.argv)>1: 
-  if sys.argv[1]=='log':
-    doLog=True
-
-nmat= numpy.array(mfcc_filters)
-
-pylab.hold(True)
-
-n_filters=numpy.shape(nmat)[0]
-for i in range(n_filters):
-  if doLog==True:
-    pylab.semilogx(nmat[i,:])
-  else:
-    pylab.plot(nmat[i,:]) 
-
-pylab.hold(False)
-#pylab.savefig('test.png')
-pylab.show()
diff --git a/tests/python/localaubio.py b/tests/python/localaubio.py
new file mode 100644 (file)
index 0000000..ef156a5
--- /dev/null
@@ -0,0 +1,18 @@
+
+# add ${src}/python and ${src}/python/aubio/.libs to python path
+# so the script is runnable from a compiled source tree.
+
+try:
+  from aubio.aubiowrapper import * 
+except ImportError:
+  try: 
+    import os
+    import sys
+    cur_dir = os.path.dirname(sys.argv[0])
+    sys.path.append(os.path.join(cur_dir,'..','..','python'))
+    sys.path.append(os.path.join(cur_dir,'..','..','python','aubio','.libs'))
+    from aubio.aubiowrapper import * 
+  except ImportError:
+    raise
+else:
+  raise ImportError, "Note: the aubio module could be imported without adding the source directory to your path."
index f077a17..f161224 100755 (executable)
@@ -1,13 +1,5 @@
 #! /usr/bin/python
 
-# add ${src}/python and ${src}/python/aubio/.libs to python path
-# so the script is runnable from a compiled source tree.
-import sys, os
-
-cur_dir = os.path.dirname(sys.argv[0])
-sys.path.append(os.path.join(cur_dir,'..','..','python'))
-sys.path.append(os.path.join(cur_dir,'..','..','python','aubio','.libs'))
-
 import unittest
 
 from glob import glob
index f104300..774eb78 100644 (file)
@@ -1,11 +1,10 @@
-import unittest
-
-from aubio.aubiowrapper import *
+from template import aubio_unit_template
+from localaubio import *
 
 buf_size = 2048
 channels = 3
 
-class cvec_test_case(unittest.TestCase):
+class cvec_unit(aubio_unit_template):
 
   def setUp(self):
     self.vector = new_cvec(buf_size, channels)
index 98ad1cd..afbc23e 100644 (file)
@@ -1,11 +1,10 @@
-import unittest
-
-from aubio.aubiowrapper import *
+from template import aubio_unit_template
+from localaubio import *
 
 buf_size = 2048
 channels = 3
 
-class fvec_test_case(unittest.TestCase):
+class fvec_unit(aubio_unit_template):
 
   def setUp(self):
     self.vector = new_fvec(buf_size, channels)
index 51a7abf..fdf1d41 100644 (file)
@@ -1,6 +1,5 @@
 from template import aubio_unit_template
-
-from aubio.aubiowrapper import *
+from localaubio import *
 
 buf_size = 7 
 channels = 1
index c5a3c29..05d1374 100644 (file)
@@ -1,4 +1,3 @@
-
 import unittest
 
 class aubio_unit_template(unittest.TestCase):