1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
|
###################################
# PySndObj extensions: display classes
#
# VL, 01/07
from Tkinter import *
import time
import math
import array
class Oscilloscope(Frame):
def createCanvas(self):
self.canvas = Canvas(self,height=self.size,width=self.size,bg=self.bg)
self.canvas.pack()
def draw(self,what,samples):
for i in what:
self.data.append(i);
s = len(self.data)
if s >= samples:
count = 0
for i in self.item:
self.canvas.delete(i)
del self.item[0:len(self.item)]
incr = s/self.size
j = 0
while(j < s):
y = self.data[j]*self.size/2 + self.size/2
self.item.append(self.canvas.create_line(count, self.prev, count+1, y, fill=self.line))
self.prev = y
count += 1
j += incr
del self.data[0:s]
def quit(self):
self.close();
time.sleep(0.1)
self.master.destroy()
def __init__(self,master, size, end, line="black", bg="white"):
master.title("Oscilloscope")
self.size = size
self.close = end
self.line = line
self.bg = bg
self.data = array.array('f')
Frame.__init__(self,master)
self.pack()
self.createCanvas()
self.item = array.array('i')
self.prev = 0
self.n = 0
self.master = master
self.master.protocol("WM_DELETE_WINDOW", self.quit)
class Spectrum(Oscilloscope):
def draw(self,re,im,frames):
s = len(re)
for i in range(0, s):
y1 = re[i]
y2 = im[i]
if self.cnt == 0:
self.spec.append(y1*y1+y2*y2)
else:
self.spec[i] = (y1*y1+y2*y2+self.spec[i])
self.cnt += 1
if self.cnt >= frames:
self.cnt = 0
count = 0
for i in self.item:
self.canvas.delete(i)
del self.item[0:len(self.item)]
s = len(self.spec)
j = 0.0
incr = (float(s)/self.size)
while(j < s):
y = -math.sqrt(self.spec[int(j)]/frames)*self.size + self.size
self.item.append(self.canvas.create_line(count, self.prev, count+1, y, fill=self.line, width=self.width))
self.prev = y
count += 1
j += incr
del self.spec[0:s]
def __init__(self,master,size,end,line="black",bg="white",width=1):
Oscilloscope.__init__(self,master,size,end,line,bg)
master.title("Spectrum")
self.cnt = 0
self.spec = array.array('f')
self.error = 0
self.width = width
|