History

some gnuplot cleanup and a function to plot a sound

Paul Brossier committed 21 years ago

Commit 65ebf301 parent 62c60751 file · +75 −36Browse files

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

Unified · Split

python/aubio/gnuplot.py+75−36
@@ -18,65 +18,56 @@ __LICENSE__ = """\ · 17 unmodified lines
18 You should have received a copy of the GNU General Public License18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.20 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21""" 21"""
22 22
23__notesheight = 0.2523__notesheight = 0.25
24 24
25
26from numarray import *25from numarray import *
27import Gnuplot, Gnuplot.funcutils26import Gnuplot, Gnuplot.funcutils
28 27
29def plotnote(la,title=None) :28def plotnote(la,title=None) :
30 if la[0,:].size() == 3:29 if la[0,:].size() == 3:
31 d = plotnote_withends(la, plot_title=title)30 d = plotnote_withends(la, plot_title=title)
32 else: 31 else:
33 # scale data if in freq (for REF.txt files)32 # scale data if in freq (for REF.txt files)
34 if max(la[:,1] > 128 ):33 if max(la[:,1] > 128 ):
35 print "scaling frequency data to midi range"34 print "scaling frequency data to midi range"
36 la[:,1] /= 6.87535 la[:,1] /= 6.875
37 la[:,1] = log(la[:,1])/0.693136 la[:,1] = log(la[:,1])/0.6931
38 la[:,1] *= 1237 la[:,1] *= 12
39 la[:,1] -= 338 la[:,1] -= 3
40 d = plotnote_withoutends(la, plot_title=title)39 d = plotnote_withoutends(la, plot_title=title)
41 return d40 return d
42 41
43def plotnote_multi(lalist,title=None,fileout=None) :42def plotnote_multi(lalist,title=None,fileout=None) :
44 d=list()43 d=list()
45 for i in range(len(lalist)):44 for i in range(len(lalist)):
46 d.append(plotnote(lalist[i], title=title))45 d.append(plotnote(lalist[i], title=title))
47 return d46 return d
48 47
49 48
50def plotnote_withends(la,plot_title=None) :49def plotnote_withends(la,plot_title=None) :
51 d=[]50 d=[]
52 51 x_widths = array(la[:,1]-la[:,0])/2.
53 x_widths = array(la[:,1]-la[:,0])/2.52 d.append(Gnuplot.Data(
54 53 la[:,0]+x_widths, # x centers
55 d.append(Gnuplot.Data(54 la[:,2], # y centers
56 la[:,0]+x_widths, # x centers55 x_widths, # x errors
57 la[:,2], # y centers56 __notesheight*ones(len(la)), # y errors
58 x_widths, # x errors57 title=plot_title,with=('boxxyerrorbars fs 3')))
59 __notesheight*ones(len(la) # y errors58 return d
60 ),
61 title=plot_title,with=('boxxyerrorbars fs 3')))
62
63 return d
64 59
65 60
66def plotnote_withoutends(la,plot_title=None) :61def plotnote_withoutends(la,plot_title=None) :
67 """ bug: fails drawing last note """62 """ bug: fails drawing last note """
68 d=[]63 d=[]
69
70 x_widths = array(la[1:,0]-la[:-1,0])/2;64 x_widths = array(la[1:,0]-la[:-1,0])/2;
71
72 d.append(Gnuplot.Data(65 d.append(Gnuplot.Data(
73 la[:-1,0]+x_widths, # x centers66 la[:-1,0]+x_widths, # x centers
74 la[:-1,1], # y centers67 la[:-1,1], # y centers
75 x_widths, # x errors68 x_widths, # x errors
76 __notesheight*ones(len(la)-1 # y errors69 __notesheight*ones(len(la)-1), # y errors
77 ),
78 title=plot_title,with=('boxxyerrorbars fs 3')))70 title=plot_title,with=('boxxyerrorbars fs 3')))
79
80 return d71 return d
81 72
82def plotnote_do(d,fileout=None):73def plotnote_do(d,fileout=None):
@@ -100,4 +91,52 @@ def plotnote_do(d,fileout=None): · 17 unmodified lines
100 if fileout != None:91 if fileout != None:
101 g.hardcopy(fileout, enhanced=1, color=0)92 g.hardcopy(fileout, enhanced=1, color=0)
102 93
94def audio_to_array(filename):
95 import aubio.aubioclass
96 hopsize = 2048
97 filei = aubio.aubioclass.sndfile(filename)
98 framestep = 1/(filei.samplerate()+0.)
99 channels = filei.channels()
100 myvec = aubio.aubioclass.fvec(hopsize,channels)
101 data = []
102 readsize = hopsize
103 while (readsize==hopsize):
104 readsize = filei.read(hopsize,myvec)
105 #for i in range(channels):
106 i = 0
107 curpos = 0
108 while (curpos < readsize):
109 data.append(myvec.get(curpos,i))
110 curpos+=1
111 # FIXME again for the last frame
112 curpos = 0
113 while (curpos < readsize):
114 data.append(myvec.get(curpos,i))
115 curpos+=1
116 time = arange(len(data))*framestep
117 return time,data
118
119def plot_audio(filenames, fileout=None, start=0, end=None, noaxis=None, task=audio_to_array):
120 g = Gnuplot.Gnuplot(debug=1, persist=1)
121 d = []
122 todraw = len(filenames)
123 xorig = 0.
124 xsize = 1./todraw
125 g.gnuplot('set multiplot;')
126 while (len(filenames)):
127 b,a = task(filenames.pop(0))
128 d.append(Gnuplot.Data(b,a))
129 if not noaxis and todraw==1:
130 g.xlabel('Time (s)')
131 g.ylabel('Amplitude')
132 g.gnuplot('set size %f,1.;' % (xsize) )
133 g.gnuplot('set origin %f,0.;' % (xorig) )
134 g.gnuplot('set style data lines; \
135 set yrange [-1.:1.]; \
136 set xrange [0:%f]' % b[-1])
137 g.plot(d.pop(0))
138 xorig += 1./todraw
139 g.gnuplot('unset multiplot;')
140 if fileout != None:
141 g.hardcopy(fileout, enhanced=1, color=0)
103 142

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