3 """ this file was written by Paul Brossier
4 it is released under the GNU/GPL license.
8 from aubio.task import *
10 usage = "usage: %s [options] -i soundfile" % sys.argv[0]
14 from optparse import OptionParser
15 parser = OptionParser(usage=usage)
16 parser.add_option("-i","--input",
17 action="store", dest="filename",
18 help="input sound file")
19 parser.add_option("-m","--mode",
20 action="store", dest="mode", default='mcomb',
21 help="pitch detection mode [default=mcomb] \
22 mcomb|yin|fcomb|schmitt")
23 parser.add_option("-u","--units", action="callback",
24 callback=check_pitchm_mode, dest="omode",
25 default=aubio_pitchm_freq,
26 help="output pitch in units [default=Hz] \
28 parser.add_option("-B","--bufsize",
29 action="store", dest="bufsize", default=None,
30 help="buffer size [default=2048]")
31 parser.add_option("-H","--hopsize",
32 action="store", dest="hopsize", default=None,
33 help="overlap size [default=512]")
34 parser.add_option("-t","--threshold",
35 action="store", dest="threshold", default=0.1,
36 help="pitch threshold (for yin) [default=0.1]")
37 parser.add_option("-s","--silence",
38 action="store", dest="silence", default=-70,
39 help="silence threshold [default=-70]")
40 parser.add_option("-D","--delay",
41 action="store", dest="delay",
42 help="number of seconds frames to take back [default=0]")
43 parser.add_option("-S","--smoothing",
44 action="store", dest="smoothing", default=False,
45 help="use a median filter of N frames [default=0]")
46 parser.add_option("-M","--maximum",
47 action="store", dest="pitchmax", default=False,
48 help="maximum pitch value to look for (Hz) [default=20000]")
49 parser.add_option("-l","--minimum",
50 action="store", dest="pitchmin", default=False,
51 help="minimum pitch value to look for (Hz) [default=20]")
53 parser.add_option("-n","--note",
54 action="store_true", dest="note", default=False,
55 help="NOT IMPLEMENTED output notes")
57 parser.add_option("-T","--plottruth",
58 action="store_true", dest="plottruth", default=False,
59 help="draw plot of the ground truth pitch track")
60 parser.add_option("-p","--plot",
61 action="store_true", dest="plot", default=False,
62 help="draw plot of the pitch track")
63 parser.add_option("-x","--xsize",
64 action="store", dest="xsize", default=1.,
65 type='float', help="define xsize for plot")
66 parser.add_option("-y","--ysize",
67 action="store", dest="ysize", default=1.,
68 type='float', help="define ysize for plot")
69 parser.add_option("-O","--outplot",
70 action="store", dest="outplot", default=None,
71 help="save the plot to output.{ps,png,svg} instead of displaying it")
72 parser.add_option("-v","--verbose",
73 action="store_true", dest="verbose", default=True,
74 help="make lots of noise")
75 parser.add_option("-q","--quiet",
76 action="store_false", dest="verbose", default=True,
78 (options, args) = parser.parse_args()
79 if not options.bufsize:
80 if options.mode == aubio_pitch_yin: options.bufsize = 1024
81 if options.mode == aubio_pitch_schmitt: options.bufsize = 2048
82 if options.mode == aubio_pitch_mcomb: options.bufsize = 4096
83 if options.mode == aubio_pitch_fcomb: options.bufsize = 4096
84 else: options.bufsize = 2048
85 if not options.hopsize:
86 options.hopsize = float(options.bufsize) / 2
87 if not options.filename:
88 print "no file name given\n", usage
92 options, args = parse_args()
94 #print options.bufsize, options.hopsize
96 filename = options.filename
98 params.samplerate = float(sndfile(filename).samplerate())
99 params.hopsize = int(options.hopsize)
100 params.bufsize = int(options.bufsize)
101 params.step = params.samplerate/float(params.hopsize)
102 params.yinthresh = float(options.threshold)
103 params.silence = float(options.silence)
104 params.verbose = options.verbose
105 if options.smoothing: params.pitchsmooth = int(options.smoothing)
106 if options.pitchmax: params.pitchmax = int(options.pitchmax)
107 if options.pitchmin: params.pitchmin = int(options.pitchmin)
108 if options.omode: params.omode = int(options.omode)
109 #mintol = float(options.mintol)*step
110 # default take back system delay
111 if options.delay: params.pitchdelay = float(options.delay)
114 exit("not implemented yet")
116 wplot,oplots,titles = [],[],[]
117 modes = options.mode.split(',')
118 for i in range(len(modes)):
120 params.pitchmode = modes[i]
121 filetask = taskpitch(filename,params=params)
122 pitch = filetask.compute_all()
123 #print filetask.eval(pitch[i])
124 if options.plot: filetask.plot(pitch,wplot,oplots,titles)
127 extension = options.outplot.split('.')[-1]
128 outplot = '.'.join(options.outplot.split('.')[:-1])
130 extension,outplot = None,None
132 filetask.plotplot(wplot,oplots,titles,outplot=outplot,extension=extension,
133 xsize=options.xsize,ysize=options.ysize,truth=options.plottruth)