File: display.py

package info (click to toggle)
sndobj 2.6.7%2Bds1-3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye
  • size: 4,904 kB
  • sloc: ansic: 55,663; cpp: 21,625; python: 391; makefile: 130; java: 22; sh: 21
file content (94 lines) | stat: -rw-r--r-- 2,804 bytes parent folder | download | duplicates (5)
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