■
wavファイルを開いて波形表示してみた。
…こっからSciPy使ってfftしてみようと思ったんですが、なんかよくわからない。
import Tkinter import tkFileDialog import wave, math, struct def wavePrint(fileName): f = wave.open(fileName,'r') (nchannels, sampwidth, framerate, nframes, comptype, compname) = f.getparams() print (nchannels, sampwidth, framerate, nframes, comptype, compname) frames = [] for ii in range(nframes): frames.extend(struct.unpack('h',f.readframes(1))) print frames class waveFileRead: def __init__(self): pass def open(self,fileName): self.f = wave.open(fileName,'r') (nchannels, sampwidth, framerate, nframes, comptype, compname) = self.f.getparams() self.sampwidth = self.f.getsampwidth() # print (nchannels, sampwidth, framerate, nframes, comptype, compname,'%dh' % nframes) # print "pos:",self.f.tell() def read(self,nframes): return struct.unpack('%dh' % (nframes*self.sampwidth/2), self.f.readframes(nframes)) def pos(self,pos): return self.f.setpos(pos) def nframes(self): return self.f.getnframes() class waveViewer: def __init__(self): self.window = Tkinter.Tk() self.width = 640 self.height = 480 self.canvas = Tkinter.Canvas(self.window,bg="white", width=self.width,height=self.height) self.canvas.pack() self.scale = Tkinter.Scale(self.window,command=self.scaleChanged, orient=Tkinter.HORIZONTAL) self.scale.pack(side=Tkinter.LEFT) self.btnOpenFile = Tkinter.Button(self.window,text="open",command=self.clickOpenFile) self.btnOpenFile.pack(side=Tkinter.RIGHT) self.object = [] self.window.mainloop() def scaleChanged(self,pos): self.paintCanvas() def clickOpenFile(self): fileName = tkFileDialog.askopenfilename() self.w = waveFileRead() self.w.open(fileName) self.scale.set(0) self.scale.configure(from_=0,to=self.w.nframes()) self.paintCanvas() def paintCanvas(self): x = 0 y = 0 for item in self.object: self.canvas.delete(item) self.object = [] frame = self.scale.get() self.w.pos(frame) for f in self.w.read(self.width): cy = f/300 + self.height/2 self.object.append(self.canvas.create_line(x,y, x+1,cy, fill='black',width=1)) x,y = x+1,cy print cy if __name__=='__main__': waveViewer()