| 
									
										
										
										
											1990-10-25 18:51:42 +00:00
										 |  |  | # Module 'Soundogram' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import audio | 
					
						
							|  |  |  | from Histogram import Histogram | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1991-12-26 13:06:29 +00:00
										 |  |  | class Soundogram(Histogram): | 
					
						
							| 
									
										
										
										
											1990-10-25 18:51:42 +00:00
										 |  |  | 	# | 
					
						
							|  |  |  | 	def define(self, (win, chunk)): | 
					
						
							|  |  |  | 		width, height = corner = win.getwinsize() | 
					
						
							|  |  |  | 		bounds = (0, 0), corner | 
					
						
							|  |  |  | 		self.chunk = chunk | 
					
						
							|  |  |  | 		self.step = (len(chunk)-1)/(width/2+1) + 1 | 
					
						
							|  |  |  | 		ydata = _make_ydata(chunk, self.step) | 
					
						
							|  |  |  | 		return Histogram.define(self, (win, bounds, ydata, (0, 128))) | 
					
						
							|  |  |  | 	# | 
					
						
							|  |  |  | 	def setchunk(self, chunk): | 
					
						
							|  |  |  | 		self.chunk = chunk | 
					
						
							|  |  |  | 		self.recompute() | 
					
						
							|  |  |  | 	# | 
					
						
							|  |  |  | 	def recompute(self): | 
					
						
							|  |  |  | 		(left, top), (right, bottom) = self.bounds | 
					
						
							|  |  |  | 		width = right - left | 
					
						
							|  |  |  | 		self.step = (len(chunk)-1)/width + 1 | 
					
						
							|  |  |  | 		ydata = _make_ydata(chunk, self.step) | 
					
						
							|  |  |  | 		self.setdata(ydata, (0, 128)) | 
					
						
							|  |  |  | 	# | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def _make_ydata(chunk, step): | 
					
						
							|  |  |  | 	ydata = [] | 
					
						
							|  |  |  | 	for i in range(0, len(chunk), step): | 
					
						
							|  |  |  | 		piece = audio.chr2num(chunk[i:i+step]) | 
					
						
							|  |  |  | 		mi, ma = min(piece), max(piece) | 
					
						
							|  |  |  | 		y = max(abs(mi), abs(ma)) | 
					
						
							|  |  |  | 		ydata.append(y) | 
					
						
							|  |  |  | 	return ydata |