Showing the changes to python (1 of 1 file). Show all
Unified · Split
| @@ -0,0 +1,135 @@ | |||
| 1 | #! /usr/bin/python | ||
| 2 | |||
| 3 | """ this file was written by Paul Brossier | ||
| 4 | it is released under the GNU/GPL license. | ||
| 5 | """ | ||
| 6 | |||
| 7 | import sys,time | ||
| 8 | from aubio.task import task,taskparams | ||
| 9 | from aubio.aubioclass import fvec | ||
| 10 | from aubio.gnuplot import gnuplot_create | ||
| 11 | from aubio.aubiowrapper import * | ||
| 12 | |||
| 13 | usage = "usage: %s [options] -i soundfile" % sys.argv[0] | ||
| 14 | |||
| 15 | def parse_args(): | ||
| 16 | from optparse import OptionParser | ||
| 17 | parser = OptionParser(usage=usage) | ||
| 18 | parser.add_option("-i","--input", | ||
| 19 | action="store", dest="filename", | ||
| 20 | help="input sound file") | ||
| 21 | parser.add_option("-n","--printframe", | ||
| 22 | action="store", dest="printframe", default=-1, | ||
| 23 | help="make a plot of the n_th frame") | ||
| 24 | parser.add_option("-x","--xsize", | ||
| 25 | action="store", dest="xsize", default=1., | ||
| 26 | help="define xsize for plot") | ||
| 27 | parser.add_option("-y","--ysize", | ||
| 28 | action="store", dest="ysize", default=1., | ||
| 29 | help="define ysize for plot") | ||
| 30 | parser.add_option("-O","--outplot", | ||
| 31 | action="store", dest="outplot", default=None, | ||
| 32 | help="save plot to output.{ps,png}") | ||
| 33 | (options, args) = parser.parse_args() | ||
| 34 | if not options.filename: | ||
| 35 | print "no file name given\n", usage | ||
| 36 | sys.exit(1) | ||
| 37 | return options, args | ||
| 38 | |||
| 39 | def plotdata(x,y,plottitle="",**keyw): | ||
| 40 | import Gnuplot | ||
| 41 | return Gnuplot.Data(x, y, title="%s" % plottitle,**keyw) | ||
| 42 | |||
| 43 | options, args = parse_args() | ||
| 44 | filename = options.filename | ||
| 45 | xsize = float(options.xsize) | ||
| 46 | ysize = float(options.ysize)*2 | ||
| 47 | |||
| 48 | printframe = int(options.printframe) | ||
| 49 | if printframe == -1: | ||
| 50 | print "Will wait for ^D to skip to next plot" | ||
| 51 | print "Press enter before to print to file" | ||
| 52 | |||
| 53 | |||
| 54 | g = gnuplot_create() | ||
| 55 | params = taskparams() | ||
| 56 | params.hopsize = 2048 # 512 | ||
| 57 | params.bufsize = params.hopsize #2048 | ||
| 58 | taskfile = task(filename,params=params) | ||
| 59 | |||
| 60 | yin = fvec(params.bufsize/2,1) | ||
| 61 | |||
| 62 | t = [i for i in range(params.bufsize)] | ||
| 63 | a = [0 for i in range(params.bufsize)] | ||
| 64 | |||
| 65 | while (taskfile.readsize == params.hopsize): | ||
| 66 | taskfile() | ||
| 67 | |||
| 68 | n = [i for i in range(params.bufsize/2)] | ||
| 69 | a = [taskfile.myvec.get(i,0) for i in range(params.hopsize/2)] | ||
| 70 | aubio_pitchyin_diff(taskfile.myvec(),yin()) # compute d[t] | ||
| 71 | c = [yin.get(i,0) for i in range(params.bufsize/2)] | ||
| 72 | aubio_pitchyin_getcum(yin()) # compute d'[t] | ||
| 73 | y = [yin.get(i,0) for i in range(params.bufsize/2)] | ||
| 74 | thresh = [0.1 for i in range(params.bufsize/2)] | ||
| 75 | #t.append((i/float(params.hopsize)+taskfile.frameread)*params.step),t.pop(0) | ||
| 76 | d = [plotdata(n,a,plottitle="signal", with='lines'), | ||
| 77 | plotdata(n,c,plottitle="d[t]",axes='x1y2', with='lines lt 1'), | ||
| 78 | plotdata(n,y,plottitle="d'[t]",axes='x1y1', with='lines lt 2'), | ||
| 79 | plotdata(n,thresh,plottitle="threshold",axes='x1y1', with='lines lt 3')] | ||
| 80 | #g('set xrange [%f:%f]' % (t[0],t[-1])) | ||
| 81 | #time.sleep(.2) | ||
| 82 | g.reset() | ||
| 83 | g('set yrange [-1:3]') | ||
| 84 | g('set xrange [0:%d]' % (params.bufsize/2)) | ||
| 85 | g('set title \"%s\"' % "Example of period detection using YIN") | ||
| 86 | if printframe == -1: | ||
| 87 | g.replot(*d) | ||
| 88 | a = sys.stdin.read() | ||
| 89 | if a == "\n" or printframe == taskfile.frameread: | ||
| 90 | from os.path import basename | ||
| 91 | outplot = "_".join([basename(sys.argv[0]),'_'.join(basename(filename).split('.')),"%d" % taskfile.frameread]) | ||
| 92 | print outplot | ||
| 93 | f = gnuplot_create(outplot=outplot,extension='ps') | ||
| 94 | f('set size %f,%f;' % (xsize,ysize) ) | ||
| 95 | f('set lmargin %f' % (15*xsize)) | ||
| 96 | f('set rmargin %f' % (10*xsize)) | ||
| 97 | #f('set title \"%s\"' % "Example of period detection using YIN") | ||
| 98 | f('set multiplot') | ||
| 99 | f.ylabel('amplitude',offset=(+.5,0)) | ||
| 100 | f.xlabel('time (samples)') | ||
| 101 | f('set size %f,%f;' % (xsize,ysize*0.4) ) | ||
| 102 | f('set orig %f,%f;' % (0,ysize*0.6) ) | ||
| 103 | sigmax = max(abs(min(a)),abs(max(a))) | ||
| 104 | f('set yrange [%f:%f]' % (-1.3*sigmax,1.3*sigmax)) | ||
| 105 | f('set xrange [0:%d]' % (params.bufsize/2)) | ||
| 106 | f.plot(d[0]) | ||
| 107 | |||
| 108 | f.ylabel('') | ||
| 109 | f.xlabel('lag (samples)') | ||
| 110 | f('set bmargin %f' % (4*ysize)) | ||
| 111 | f('set size %f,%f;' % (xsize,ysize*0.6) ) | ||
| 112 | f('set orig %f,%f;' % (0,0) ) | ||
| 113 | f('set autoscale') | ||
| 114 | f('set xrange [0:%d]' % (params.bufsize/2)) | ||
| 115 | f('set notitle') | ||
| 116 | f('set y2tics') | ||
| 117 | f('set ytics nomirror') | ||
| 118 | f('set noytics') | ||
| 119 | f('set key right') | ||
| 120 | f.plot(d[1]) | ||
| 121 | |||
| 122 | f.ylabel('amplitude') | ||
| 123 | f.xlabel('') | ||
| 124 | f('set y2tics nomirror') | ||
| 125 | f('set ytics nomirror') | ||
| 126 | f('set noy2tics') | ||
| 127 | f('set noxtics') | ||
| 128 | f('set ytics') | ||
| 129 | f('set key left') | ||
| 130 | f.plot(d[2],d[3]) | ||
| 131 | #f('set yrange [-1:3]') | ||
| 132 | #f.plot(*d) | ||
| 133 | print "saved plot", outplot, 'ps' | ||
| 134 | elif printframe < taskfile.frameread: | ||
| 135 | break | ||