"""
import sys
-from aubio.aubioclass import *
+from aubio.task import *
usage = "usage: %s [options] -i soundfile" % sys.argv[0]
parser.add_option("-i","--input",
action="store", dest="filename",
help="input sound file")
- parser.add_option("-m","--mode", action="callback",
- callback=check_onset_mode, dest="mode", default='dual',
+ parser.add_option("-m","--mode",
+ action="store", dest="mode", default='dual',
help="onset detection mode [default=dual] \
complexdomain|hfc|phase|specdiff|energy|kl|mkl|dual")
parser.add_option("-B","--bufsize",
action="store", dest="bufsize", default=512,
- help="buffer size [default=1024]")
+ help="buffer size [default=512]")
parser.add_option("-H","--hopsize",
action="store", dest="hopsize", default=256,
help="overlap size [default=256]")
parser.add_option("-t","--threshold",
- action="store", dest="threshold", default=0.650,
- help="onset peak picking threshold [default=0.650]")
+ action="store", dest="threshold", default=0.3,
+ help="onset peak picking threshold [default=0.3]")
+ parser.add_option("-C","--dcthreshold",
+ action="store", dest="dcthreshold", default=1.,
+ help="onset peak picking DC component [default=1.]")
parser.add_option("-s","--silence",
action="store", dest="silence", default=-70,
help="silence threshold [default=-70]")
parser.add_option("-p","--plot",
action="store_true", dest="plot", default=False,
help="draw plot")
+ parser.add_option("-x","--xsize",
+ action="store", dest="xsize", default=1.,
+ type='float', help="define xsize for plot")
+ parser.add_option("-y","--ysize",
+ action="store", dest="ysize", default=1.,
+ type='float', help="define ysize for plot")
+ parser.add_option("-f","--function",
+ action="store_true", dest="func", default=False,
+ help="print detection function")
+ parser.add_option("-n","--no-onsets",
+ action="store_true", dest="nplot", default=False,
+ help="do not plot detected onsets")
parser.add_option("-O","--outplot",
action="store", dest="outplot", default=None,
help="save plot to output.{ps,png}")
+ parser.add_option("-F","--spectrogram",
+ action="store_true", dest="spectro", default=False,
+ help="add spectrogram to the plot")
parser.add_option("-v","--verbose",
action="store_true", dest="verbose", default=False,
help="make lots of noise [default]")
# to be implemented
parser.add_option("-b","--beat",
action="store_true", dest="beat", default=False,
- help="NOT IMPLEMENTED output beat locations")
+ help="output beat locations")
(options, args) = parser.parse_args()
if not options.filename:
print "no file name given\n", usage
options, args = parse_args()
filename = options.filename
-samplerate = float(sndfile(filename).samplerate())
-hopsize = int(options.hopsize)
-bufsize = int(options.bufsize)
-step = float(samplerate)/float(hopsize)
-threshold = float(options.threshold)
-zerothres = float(options.zerothres)
-silence = float(options.silence)
-mintol = float(options.mintol)*step
+params = taskparams()
+params.hopsize = int(options.hopsize)
+params.bufsize = int(options.bufsize)
+params.threshold = float(options.threshold)
+params.dcthreshold = float(options.dcthreshold)
+params.zerothres = float(options.zerothres)
+params.silence = float(options.silence)
+params.mintol = float(options.mintol)
+params.verbose = options.verbose
# default take back system delay
-if options.delay: delay = float(options.delay)
-else: delay = 3./step
+if options.delay: params.delay = int(float(options.delay)/params.step)
+dotask = taskonset
if options.beat:
- #onsets = getbeats(filename,threshold,silence,mode=options.mode)
- exit("not implemented yet")
+ dotask = taskbeat
elif options.silencecut:
- onsets = getsilences(filename,hopsize=hopsize,silence=silence)
-elif options.plot:
- onsets, ofunc = getonsets(filename,threshold,silence,
- mode=options.mode,localmin=options.localmin,
- derivate=options.derivate,
- bufsize=bufsize,hopsize=hopsize,storefunc=True)
-else:
- onsets = getonsets(filename,threshold,silence,
- mode=options.mode,localmin=options.localmin,
- derivate=options.derivate,
- bufsize=bufsize,hopsize=hopsize)
+ dotask = tasksilence
+elif options.plot or options.func:
+ params.storefunc=True
+else:
+ params.storefunc=False
+
+lonsets, lofunc = [], []
+wplot,oplots = [],[]
+modes = options.mode.split(',')
+for i in range(len(modes)):
+ params.onsetmode = modes[i]
+ filetask = dotask(filename,params=params)
+ onsets = filetask.compute_all()
-# take back system delay
-if delay != 0:
- for i in range(len(onsets)):
- onsets[i] -= delay*step
+ #lonsets.append(onsets)
+ if not options.silencecut:
+ ofunc = filetask.ofunc
+ lofunc.append(ofunc)
-# prune doubled
-if mintol > 0:
- last = -2*mintol
- newonsets = []
- for new in onsets:
- if (new - last > mintol):
- newonsets.append(new)
- last = new
- onsets = newonsets
+ if options.plot:
+ if options.beat:
+ filetask.plot(oplots, onsets)
+ else:
+ filetask.plot(onsets, ofunc, wplot, oplots, nplot=options.nplot)
-# print times in second
-if options.verbose:
- for i in onsets: print "%f" % (i/step)
+ if options.func:
+ for i in ofunc:
+ print i
-if options.plot:
- from aubio.gnuplot import plot_onsets
- plot_onsets(filename, onsets, ofunc,
- samplerate=samplerate, hopsize=hopsize, outplot=options.outplot)
+if options.outplot:
+ extension = options.outplot.split('.')[-1]
+ outplot = '.'.join(options.outplot.split('.')[:-1])
+else:
+ extension,outplot = None,None
+if options.plot: filetask.plotplot(wplot, oplots, outplot=outplot, extension=extension,
+ xsize=options.xsize,ysize=options.ysize,spectro=options.spectro)
if options.cut:
- cutfile(filename,onsets,zerothres=zerothres,bufsize=bufsize,hopsize=hopsize)
+ a = taskcut(filename,onsets,params=params)
+ a.compute_all()