shithub: aubio

Download patch

ref: 470a772cc0cefecbd33f4144706397eb5b770421
parent: 9c5426547601e97b4620a83ad68810a8c43614f1
author: Paul Brossier <[email protected]>
date: Thu Jul 13 09:48:24 EDT 2006

fix timelines and plot sizes in onset and pitch
fix timelines and plot sizes in onset and pitch


--- a/python/aubio/task/onset.py
+++ b/python/aubio/task/onset.py
@@ -144,7 +144,7 @@
 		import re
 		# prepare the plot
 		g = gnuplot_create(outplot=outplot, extension=extension)
-		
+		g('set title \'%s\'' % (re.sub('.*/','',self.input)))
 		if spectro:
 			g('set size %f,%f' % (xsize,1.3*ysize) )
 		else:
@@ -154,24 +154,7 @@
 		# hack to align left axis
 		g('set lmargin 3')
 		g('set rmargin 6')
-		g('set tmargin 0')
-		g('set format x ""')
-		g('set format y "%3e"')
-		g('set noytics')
 
-		for i in range(len(oplots)):
-			# plot onset detection functions
-			g('set size %f,%f' % (xsize,0.7*ysize/(len(oplots))))
-			g('set origin 0,%f' % ((len(oplots)-float(i)-1)*0.7*ysize/(len(oplots))))
-			g('set xrange [0:%f]' % (self.lenofunc*self.params.step))
-			g('set nokey')
-			g('set yrange [0:%f]' % (1.1*oplots[i][2]))
-			g('set y2tics ("0" 0, "%d" %d)' % (round(oplots[i][2]),round(oplots[i][2])))
-			g.ylabel(oplots[i][1])
-			if i == len(oplots)-1:
-				g.xlabel('time (s)',offset=(0,0.7))
-			g.plot(*oplots[i][0])
-
 		if spectro:
 			import Gnuplot
 			minf = 50
@@ -187,36 +170,53 @@
 			g('set rmargin 0')
 			g('set tmargin 0')
 			g('set palette rgbformulae -25,-24,-32')
-			g.xlabel('')
+			g.xlabel('time (s)',offset=(0,1.))
 			g.ylabel('freq (Hz)')
+			g('set origin 0,%f' % (1.0*ysize) ) 
+			g('set format x "%1.1f"')
 			#if log:
 			#	g('set yrange [%f:%f]' % (max(10,minf),maxf))
 			#	g('set log y')
 			g.splot(Gnuplot.GridData(data,time,freq, binary=1, title=''))
-			g('set lmargin 3')
-			g('set rmargin 6')
-			g('set origin 0,%f' % (1.0*ysize) ) 
-			g('set format x "%1.1f"')
-			g.xlabel('time (s)',offset=(0,1.))
 		else:
 			# plot waveform and onsets
+			time,data = audio_to_array(self.input)
+			wplot = [make_audio_plot(time,data)] + wplot
 			g('set origin 0,%f' % (0.7*ysize) )
-			g.xlabel('time (s)',offset=(0,0.7))
+			g('set size %f,%f' % (xsize,0.3*ysize))
 			g('set format y "%1f"')
+			g('set xrange [0:%f]' % max(time)) 
+			g('set yrange [-1:1]') 
+			g('set noytics')
+			g('set y2tics -1,1')
+			g.xlabel('time (s)',offset=(0,0.7))
+			g.ylabel('amplitude')
+			g.plot(*wplot)
 
-		g('set size %f,%f' % (1.*xsize, 0.3*ysize))
-		g('set title \'%s %s\'' % (re.sub('.*/','',self.input),self.title))
-		g('set tmargin 2')
-		# audio data
-		time,data = audio_to_array(self.input)
-		wplot = [make_audio_plot(time,data)] + wplot
-		g('set y2tics -1,1')
+		# default settings for next plots
+		g('unset title')
+		g('set format x ""')
+		g('set format y "%3e"')
+		g('set tmargin 0')
+		g.xlabel('')
 
-		g('set xrange [0:%f]' % max(time)) 
-		g('set yrange [-1:1]') 
-		g.ylabel('amplitude')
-		g.plot(*wplot)
-		
-		g('unset multiplot')
+		N = len(oplots)
+		y = 0.7*ysize # the vertical proportion of the plot taken by onset functions
+		delta = 0.035 # the constant part of y taken by last plot label and data
+		for i in range(N):
+			# plot onset detection functions
+			g('set size %f,%f' % ( xsize, (y-delta)/N))
+			g('set origin 0,%f' % ((N-i-1)*(y-delta)/N + delta ))
+			g('set nokey')
+			g('set xrange [0:%f]' % (self.lenofunc*self.params.step))
+			g('set yrange [0:%f]' % (1.1*oplots[i][2]))
+			g('set y2tics ("0" 0, "%d" %d)' % (round(oplots[i][2]),round(oplots[i][2])))
+			g.ylabel(oplots[i][1])
+			if i == N-1:
+				g('set size %f,%f' % ( xsize, (y-delta)/N + delta ) )
+				g('set origin 0,0')
+				g.xlabel('time (s)', offset=(0,0.7))
+				g('set format x')
+			g.plot(*oplots[i][0])
 
-
+		g('unset multiplot')
--- a/python/aubio/task/pitch.py
+++ b/python/aubio/task/pitch.py
@@ -161,13 +161,10 @@
 		titles.append(self.params.pitchmode)
 
 			
-	def plotplot(self,wplot,oplots,titles,outplot=None,multiplot = 1, midi = 1, truth = 1):
-		from aubio.gnuplot import gnuplot_init, audio_to_array, make_audio_plot
+	def plotplot(self,wplot,oplots,titles,outplot=None,extension=None,xsize=1.,ysize=1.,multiplot = 1, midi = 1, truth = 1):
+		from aubio.gnuplot import gnuplot_create , audio_to_array, make_audio_plot
 		import re
 		import Gnuplot
-		# audio data
-		time,data = audio_to_array(self.input)
-		f = make_audio_plot(time,data)
 
 		# check if ground truth exists
 		if truth:
@@ -176,32 +173,35 @@
 				oplots = [Gnuplot.Data(timet,pitcht,with='lines',
 					title='ground truth')] + oplots
 
-		t = Gnuplot.Data(0,0,with='impulses') 
-
-		g = gnuplot_init(outplot)
+		g = gnuplot_create(outplot=outplot, extension=extension)
 		g('set title \'%s\'' % (re.sub('.*/','',self.input)))
+		g('set size %f,%f' % (xsize,ysize) )
 		g('set multiplot')
 		# hack to align left axis
 		g('set lmargin 4')
 		g('set rmargin 4')
-		# plot waveform and onsets
-		g('set size 1,0.3')
-		g('set ytics 10')
-		g('set origin 0,0.7')
+    # plot waveform
+		time,data = audio_to_array(self.input)
+		wplot = [make_audio_plot(time,data)]
+		g('set origin 0,%f' % (0.7*ysize) )
+		g('set size %f,%f' % (xsize,0.3*ysize))
+		#g('set format y "%1f"')
 		g('set xrange [0:%f]' % max(time)) 
 		g('set yrange [-1:1]') 
 		g('set noytics')
 		g('set y2tics -1,1')
-		g.xlabel('time (s)',offset=(0,0.8))
+		g.xlabel('time (s)',offset=(0,0.7))
 		g.ylabel('amplitude')
-		g.plot(f)
+		g.plot(*wplot)
+
+		# default settings for next plots
 		g('unset title')
-		# plot onset detection function
+		g('set format x ""')
+		g('set format y "%3e"')
+		g('set tmargin 0')
+		g.xlabel('')
+		g('set noclip one') 
 
-
-		g('set size 1,0.7')
-		g('set origin 0,0')
-		g('set xrange [0:%f]' % max(time))
 		if not midi:
 			g('set log y')
 			#g.xlabel('time (s)')
@@ -211,21 +211,26 @@
 			g.ylabel('midi')
 			g('set yrange [%f:%f]' % (aubio_freqtomidi(self.params.pitchmin), aubio_freqtomidi(self.params.pitchmax)))
 			g('set y2tics %f,%f' % (round(aubio_freqtomidi(self.params.pitchmin)+.5),12))
-		g('set key right top')
-		g('set noclip one') 
-		g('set format x ""')
+		
 		if multiplot:
-			g('set tmargin 0')
-			for i in range(len(oplots)):
-				# plot onset detection functions
-				g('set size 1,%f' % (0.7/(len(oplots))))
-				g('set origin 0,%f' % ((len(oplots)-float(i)-1)*0.7/(len(oplots))))
-				g('set xrange [0:%f]' % max(time))
+			N = len(oplots)
+			y = 0.7*ysize # the vertical proportion of the plot taken by onset functions
+			delta = 0.035 # the constant part of y taken by last plot label and data
+			for i in range(N):
+				# plot pitch detection functions
+				g('set size %f,%f' % ( xsize, (y-delta)/N))
+				g('set origin 0,%f' % ((N-i-1)*(y-delta)/N + delta ))
 				g('set nokey')
+				g('set xrange [0:%f]' % max(time))
 				g.ylabel(titles[i])
-				g.xlabel('')
+				if i == N-1:
+					g('set size %f,%f' % (xsize, (y-delta)/N + delta ) )
+					g('set origin 0,0')
+					g.xlabel('time (s)', offset=(0,0.7))
+					g('set format x')
 				g.plot(oplots[i])
 		else:
+			g('set key right top')
 			g.plot(*oplots)
 		g('unset multiplot')