summaryrefslogtreecommitdiffstats
path: root/Demo/sgi/audio_stdwin/rec.py
diff options
context:
space:
mode:
Diffstat (limited to 'Demo/sgi/audio_stdwin/rec.py')
-rwxr-xr-xDemo/sgi/audio_stdwin/rec.py268
1 files changed, 0 insertions, 268 deletions
diff --git a/Demo/sgi/audio_stdwin/rec.py b/Demo/sgi/audio_stdwin/rec.py
deleted file mode 100755
index 76e924e..0000000
--- a/Demo/sgi/audio_stdwin/rec.py
+++ /dev/null
@@ -1,268 +0,0 @@
-#! /usr/bin/env python
-
-import sys
-import audio
-import stdwin
-
-import string
-import getopt
-
-from stdwinevents import *
-from Buttons import *
-from Sliders import *
-#from Soundogram import Soundogram
-from VUMeter import VUMeter
-from WindowParent import WindowParent, MainLoop
-from HVSplit import HSplit, VSplit
-
-class TimeOutToggleButton(ToggleButton):
- def define(self, parent):
- self = ToggleButton.define(self, parent)
- self.parent.need_timer(self)
- self.timer_hook = 0
- return self
- def timer(self):
- if self.timer_hook:
- self.timer_hook(self)
-
-K = 1024
-BUFSIZE = 30*8*K
-Rates = [0, 32*K, 16*K, 8*K]
-Magics = ['', '0032', '0016', '0008']
-
-class Struct: pass
-G = Struct()
-
-def main():
- #
- # Turn off scroll bars
- #
- stdwin.setdefscrollbars(0, 0)
- #
- # Set default state
- #
- G.gain = 60
- G.rate = 3
- G.nomuting = 0
- G.savefile = '@rec'
- #
- # Set default values
- #
- G.data = ''
- G.playing = 0
- G.recording = 0
- G.sogram = 0
- #
- # Parse options
- #
- optlist, args = getopt.getopt(sys.argv[1:], 'mdg:r:')
- #
- for optname, optarg in optlist:
- if 0: # (So all cases start with elif)
- pass
- elif optname == '-d':
- G.debug = 1
- elif optname == '-g':
- G.gain = string.atoi(optarg)
- if not (0 < G.gain < 256):
- raise optarg.error, '-g gain out of range'
- elif optname == '-m':
- G.nomuting = (not G.nomuting)
- elif optname == '-r':
- G.rate = string.atoi(optarg)
- if not (1 <= G.rate <= 3):
- raise optarg.error, '-r rate out of range'
- #
- if args:
- G.savefile = args[0]
- #
- # Initialize the sound package
- #
- audio.setoutgain(G.nomuting * G.gain) # Silence the speaker
- audio.setrate(G.rate)
- #
- # Create the WindowParent and VSplit
- #
- G.window = WindowParent().create('Recorder', (0, 0))
- w = G.vsplit = VSplit().create(G.window)
- #
- # VU-meter
- #
- G.vubtn = VUMeter().define(w)
- #
- # Radiobuttons for rates
- #
- r1btn = RadioButton().definetext(w, '32 K/sec')
- r1btn.on_hook = rate_hook
- r1btn.rate = 1
- #
- r2btn = RadioButton().definetext(w, '16 K/sec')
- r2btn.on_hook = rate_hook
- r2btn.rate = 2
- #
- r3btn = RadioButton().definetext(w, '8 K/sec')
- r3btn.on_hook = rate_hook
- r3btn.rate = 3
- #
- radios = [r1btn, r2btn, r3btn]
- r1btn.group = r2btn.group = r3btn.group = radios
- for r in radios:
- if r.rate == G.rate: r.select(1)
- #
- # Other controls
- #
- G.recbtn = TimeOutToggleButton().definetext(w, 'Record')
- G.recbtn.on_hook = record_on_hook
- G.recbtn.timer_hook = record_timer_hook
- G.recbtn.off_hook = record_off_hook
- #
- G.mutebtn = CheckButton().definetext(w, 'Mute')
- G.mutebtn.select(not G.nomuting)
- G.mutebtn.hook = mute_hook
- #
- G.playbtn = TimeOutToggleButton().definetext(w, 'Playback')
- G.playbtn.on_hook = play_on_hook
- G.playbtn.timer_hook = play_timer_hook
- G.playbtn.off_hook = play_off_hook
- #
- G.gainbtn = ComplexSlider().define(w)
- G.gainbtn.settexts(' Volume: ', ' ')
- G.gainbtn.setminvalmax(0, G.gain, 255)
- G.gainbtn.sethook(gain_hook)
- #
- G.sizebtn = Label().definetext(w, `len(G.data)` + ' bytes')
- #
- #G.showbtn = PushButton().definetext(w, 'Sound-o-gram...')
- #G.showbtn.hook = show_hook
- #
- G.savebtn = PushButton().definetext(w, 'Save...')
- G.savebtn.hook = save_hook
- #
- G.quitbtn = PushButton().definetext(w, 'Quit')
- G.quitbtn.hook = quit_hook
- G.playbtn.enable(0)
- G.savebtn.enable(0)
- #G.showbtn.enable(0)
- start_vu()
- G.window.realize()
- #
- # Event loop
- #
- MainLoop()
-
-# XXX Disabled...
-def show_hook(self):
- savetext = self.text
- self.settext('Be patient...')
- close_sogram()
- stdwin.setdefwinsize(400, 300)
- win = stdwin.open('Sound-o-gram')
- G.sogram = Soundogram().define(win, G.data)
- win.buttons = [G.sogram]
- self.settext(savetext)
-
-def close_sogram():
- if G.sogram:
- # Break circular references
- G.sogram.win.buttons[:] = []
- del G.sogram.win
- G.sogram = 0
-
-def mute_hook(self):
- G.nomuting = (not self.selected)
- audio.setoutgain(G.nomuting * G.gain)
-
-def rate_hook(self):
- G.rate = self.rate
- audio.setrate(G.rate)
-
-def record_on_hook(self):
- stop_vu()
- close_sogram()
- audio.setrate(G.rate)
- audio.setoutgain(G.nomuting * G.gain)
- audio.start_recording(BUFSIZE)
- G.recording = 1
- G.playbtn.enable(0)
- G.window.settimer(10 * BUFSIZE / Rates[G.rate])
-
-def record_timer_hook(self):
- if G.recording:
- if audio.poll_recording():
- self.hilite(0)
- record_off_hook(self)
- else:
- self.parent.settimer(5)
-
-def record_off_hook(self):
- if not G.recording:
- return
- G.data = audio.stop_recording()
- G.recording = 0
- G.sizebtn.settext(`len(G.data)` + ' bytes')
- audio.setoutgain(G.nomuting * G.gain)
- G.playbtn.enable((len(G.data) > 0))
- G.savebtn.enable((len(G.data) > 0))
- #G.showbtn.enable((len(G.data) > 0))
- G.window.settimer(0)
- start_vu()
-
-def play_on_hook(self):
- stop_vu()
- audio.setrate(G.rate)
- audio.setoutgain(G.gain)
- audio.start_playing(G.data)
- G.playing = 1
- G.recbtn.enable(0)
- G.window.settimer(max(10 * len(G.data) / Rates[G.rate], 1))
-
-def play_timer_hook(self):
- if G.playing:
- if audio.poll_playing():
- self.hilite(0)
- play_off_hook(self)
- else:
- self.parent.settimer(5)
-
-def play_off_hook(self):
- if not G.playing:
- return
- x = audio.stop_playing()
- G.playing = 0
- audio.setoutgain(G.nomuting * G.gain)
- G.recbtn.enable(1)
- G.window.settimer(0)
- start_vu()
-
-def gain_hook(self):
- G.gain = self.val
- if G.playing or G.nomuting: audio.setoutgain(G.gain)
-
-def save_hook(self):
- if not G.data:
- stdwin.fleep()
- else:
- prompt = 'Store sampled data on file: '
- try:
- G.savefile = stdwin.askfile(prompt, G.savefile, 1)
- except KeyboardInterrupt:
- return
- try:
- fp = open(G.savefile, 'w')
- fp.write(Magics[G.rate] + G.data)
- except:
- stdwin.message('Cannot create ' + file)
-
-def stop_vu():
- G.vubtn.stop()
-
-def start_vu():
- G.vubtn.start()
-
-def quit_hook(self):
- G.window.delayed_destroy()
-
-try:
- main()
-finally:
- audio.setoutgain(0)