| # Module 'Soundogram' |
| |
| import audio |
| 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 |