File: spectrum.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 (57 lines) | stat: -rw-r--r-- 1,152 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
#!/usr/bin/python
#####################################
#  spectrum example
#  
#   VL, 01/07

from sndobj import *
from Tkinter import *
import array
import display

# window size, refresh interval, norm factor
# highest frequency of display
window_size = 300
time_interval = 0.1
norm = 32768.0/10
highest = 10000

# display callback
def callb(data):
    re  = array.array('f')
    im  = array.array('f')
    fft  = data[0]
    disp = data[1]
    sr = fft.GetSr()
    end = int(fft.GetFFTSize()*2*highest/sr)
    for i in range(0,end,2):
         re.append(fft.Output(i)/norm)
         im.append(fft.Output(i+1)/norm)
    if not disp.error:
      disp.draw(re,im,(sr/fft.GetHopSize())*time_interval)
    
# SndObj chain and process thread       
win = HammingTable(1024,0.5)
thread = SndThread()
inp = SndRTIO(1, SND_INPUT)
sig = SndIn(inp, 1)
fft = FFT(win,sig);

# display object
disp = display.Spectrum(Tk(), window_size, thread.ProcOff, "red", "blue")
dat = (fft,disp)

# thread set-up
thread.SetProcessCallback(callb, dat)
thread.AddObj(inp, SNDIO_IN)
thread.AddObj(sig)
thread.AddObj(fft)
thread.ProcOn()

# run the display
disp.mainloop()