Initial revision
diff --git a/Lib/lib-stdwin/Soundogram.py b/Lib/lib-stdwin/Soundogram.py
new file mode 100644
index 0000000..a362eb2
--- /dev/null
+++ b/Lib/lib-stdwin/Soundogram.py
@@ -0,0 +1,37 @@
+# Module 'Soundogram'
+
+import audio
+from minmax import min, max
+from Histogram import Histogram
+
+class Soundogram() = Histogram():
+	#
+	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