--- /dev/null
+#!/usr/bin/python
+
+import wave
+import sys
+import struct
+from pylab import *
+import numpy
+
+f = wave.open(sys.argv[1], 'rb')
+width = f.getsampwidth()
+peak = pow(2, width * 8) / 2
+channels = f.getnchannels()
+frames = f.getnframes()
+print '%d bytes per sample' % width
+print '%d channels' % channels
+print '%d frames' % frames
+data = []
+for i in range(0, channels):
+ data.append([])
+
+for i in range(0, frames):
+ frame = f.readframes(1)
+ for j in range(0, channels):
+ v = 0
+ for k in range(0, width):
+ v |= ord(frame[j * width + k]) << (k * 8)
+ if v >= peak:
+ v = v - 2 * peak
+ data[j].append(v)
+
+f.close()
+
+names = ['L', 'R', 'C', 'Lfe', 'Ls', 'Rs']
+dyn_range = 20 * log10(pow(2, 23))
+
+for i in range(0, channels):
+ s = numpy.fft.fft(data[i])
+# subplot(channels, 1, i + 1)
+ # 138.5 is a fudge factor:
+ semilogx(arange(0, frames / 2, 0.5), 20 * log10(abs(s) + 0.1) - dyn_range, label = names[i])
+ xlim(100, frames / 4)
+plt.gca().xaxis.grid(True, which='major')
+plt.gca().xaxis.grid(True, which='minor')
+plt.gca().yaxis.grid(True)
+legend(loc = 'lower right')
+show()
+
+#plot(abs(numpy.fft.fft(data[0])))
+#plot(data[0])
+#show()