History

add aubioplot-yinfft add aubioplot-yinfft

Paul Brossier committed 20 years ago

Commit 4b4e6ae1 parent 36dfbc61 file · +135 −0Browse files

Showing the changes to python (1 of 1 file). Show all

Unified · Split

python/aubioplot-yinfft+135−0
@@ -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

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t