ref: 65ebf30bfe3ae8f66fb6fe45a5ebe313da474671
parent: 62c60758a97f9082e1ec6eb99f45fd82bc0c5ce9
author: Paul Brossier <piem@altern.org>
date: Tue Mar 29 11:12:09 EST 2005
some gnuplot cleanup and a function to plot a sound
--- a/python/aubio/gnuplot.py
+++ b/python/aubio/gnuplot.py
@@ -18,65 +18,56 @@
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-"""
+"""
__notesheight = 0.25
-
from numarray import *
import Gnuplot, Gnuplot.funcutils
def plotnote(la,title=None) :
- if la[0,:].size() == 3:
- d = plotnote_withends(la, plot_title=title)
- else:
- # scale data if in freq (for REF.txt files)
- if max(la[:,1] > 128 ):
- print "scaling frequency data to midi range"
- la[:,1] /= 6.875
- la[:,1] = log(la[:,1])/0.6931
- la[:,1] *= 12
- la[:,1] -= 3
- d = plotnote_withoutends(la, plot_title=title)
- return d
+ if la[0,:].size() == 3:
+ d = plotnote_withends(la, plot_title=title)
+ else:
+ # scale data if in freq (for REF.txt files)
+ if max(la[:,1] > 128 ):
+ print "scaling frequency data to midi range"
+ la[:,1] /= 6.875
+ la[:,1] = log(la[:,1])/0.6931
+ la[:,1] *= 12
+ la[:,1] -= 3
+ d = plotnote_withoutends(la, plot_title=title)
+ return d
def plotnote_multi(lalist,title=None,fileout=None) :
- d=list()
- for i in range(len(lalist)):
- d.append(plotnote(lalist[i], title=title))
- return d
+ d=list()
+ for i in range(len(lalist)):
+ d.append(plotnote(lalist[i], title=title))
+ return d
def plotnote_withends(la,plot_title=None) :
- d=[]
+ d=[]
+ x_widths = array(la[:,1]-la[:,0])/2.
+ d.append(Gnuplot.Data(
+ la[:,0]+x_widths, # x centers
+ la[:,2], # y centers
+ x_widths, # x errors
+ __notesheight*ones(len(la)), # y errors
+ title=plot_title,with=('boxxyerrorbars fs 3')))
+ return d
- x_widths = array(la[:,1]-la[:,0])/2.
- d.append(Gnuplot.Data(
- la[:,0]+x_widths, # x centers
- la[:,2], # y centers
- x_widths, # x errors
- __notesheight*ones(len(la) # y errors
- ),
- title=plot_title,with=('boxxyerrorbars fs 3')))
-
- return d
-
-
def plotnote_withoutends(la,plot_title=None) :
""" bug: fails drawing last note """
d=[]
-
x_widths = array(la[1:,0]-la[:-1,0])/2;
-
d.append(Gnuplot.Data(
la[:-1,0]+x_widths, # x centers
la[:-1,1], # y centers
x_widths, # x errors
- __notesheight*ones(len(la)-1 # y errors
- ),
+ __notesheight*ones(len(la)-1), # y errors
title=plot_title,with=('boxxyerrorbars fs 3')))
-
return d
def plotnote_do(d,fileout=None):
@@ -100,4 +91,52 @@
if fileout != None:
g.hardcopy(fileout, enhanced=1, color=0)
+def audio_to_array(filename):
+ import aubio.aubioclass
+ hopsize = 2048
+ filei = aubio.aubioclass.sndfile(filename)
+ framestep = 1/(filei.samplerate()+0.)
+ channels = filei.channels()
+ myvec = aubio.aubioclass.fvec(hopsize,channels)
+ data = []
+ readsize = hopsize
+ while (readsize==hopsize):
+ readsize = filei.read(hopsize,myvec)
+ #for i in range(channels):
+ i = 0
+ curpos = 0
+ while (curpos < readsize):
+ data.append(myvec.get(curpos,i))
+ curpos+=1
+ # FIXME again for the last frame
+ curpos = 0
+ while (curpos < readsize):
+ data.append(myvec.get(curpos,i))
+ curpos+=1
+ time = arange(len(data))*framestep
+ return time,data
+
+def plot_audio(filenames, fileout=None, start=0, end=None, noaxis=None, task=audio_to_array):
+ g = Gnuplot.Gnuplot(debug=1, persist=1)
+ d = []
+ todraw = len(filenames)
+ xorig = 0.
+ xsize = 1./todraw
+ g.gnuplot('set multiplot;')
+ while (len(filenames)):
+ b,a = task(filenames.pop(0))
+ d.append(Gnuplot.Data(b,a))
+ if not noaxis and todraw==1:
+ g.xlabel('Time (s)')
+ g.ylabel('Amplitude')
+ g.gnuplot('set size %f,1.;' % (xsize) )
+ g.gnuplot('set origin %f,0.;' % (xorig) )
+ g.gnuplot('set style data lines; \
+ set yrange [-1.:1.]; \
+ set xrange [0:%f]' % b[-1])
+ g.plot(d.pop(0))
+ xorig += 1./todraw
+ g.gnuplot('unset multiplot;')
+ if fileout != None:
+ g.hardcopy(fileout, enhanced=1, color=0)