76 lines
1.3 KiB
Python
76 lines
1.3 KiB
Python
|
#! /usr/local/python
|
||
|
|
||
|
import sys
|
||
|
import audio
|
||
|
|
||
|
import string
|
||
|
import getopt
|
||
|
import auds
|
||
|
|
||
|
debug = []
|
||
|
|
||
|
DEF_RATE = 3
|
||
|
|
||
|
def main():
|
||
|
#
|
||
|
gain = 100
|
||
|
rate = 0
|
||
|
starter = audio.write
|
||
|
stopper = 0
|
||
|
#
|
||
|
optlist, args = getopt.getopt(sys.argv[1:], 'adg:r:')
|
||
|
#
|
||
|
for optname, optarg in optlist:
|
||
|
if 0:
|
||
|
pass
|
||
|
elif optname == '-d':
|
||
|
debug.append(1)
|
||
|
elif optname == '-g':
|
||
|
gain = string.atoi(optarg)
|
||
|
if not (0 < gain < 256):
|
||
|
raise optarg.error, '-g gain out of range'
|
||
|
elif optname == '-r':
|
||
|
rate = string.atoi(optarg)
|
||
|
if not (1 <= rate <= 3):
|
||
|
raise optarg.error, '-r rate out of range'
|
||
|
elif optname == '-a':
|
||
|
starter = audio.start_playing
|
||
|
stopper = audio.wait_playing
|
||
|
#
|
||
|
audio.setoutgain(gain)
|
||
|
audio.setrate(rate)
|
||
|
#
|
||
|
if not args:
|
||
|
play(starter, rate, auds.loadfp(sys.stdin))
|
||
|
else:
|
||
|
real_stopper = 0
|
||
|
for file in args:
|
||
|
if real_stopper:
|
||
|
real_stopper()
|
||
|
play(starter, rate, auds.load(file))
|
||
|
real_stopper = stopper
|
||
|
|
||
|
def play(starter, rate, data):
|
||
|
magic = data[:4]
|
||
|
if magic == '0008':
|
||
|
mrate = 3
|
||
|
elif magic == '0016':
|
||
|
mrate = 2
|
||
|
elif magic == '0032':
|
||
|
mrate = 1
|
||
|
else:
|
||
|
mrate = 0
|
||
|
if mrate:
|
||
|
data = data[4:]
|
||
|
else:
|
||
|
mrate = DEF_RATE
|
||
|
if not rate: rate = mrate
|
||
|
audio.setrate(rate)
|
||
|
starter(data)
|
||
|
|
||
|
try:
|
||
|
main()
|
||
|
finally:
|
||
|
audio.setoutgain(0)
|
||
|
audio.done()
|