home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 10 Tools
/
10-Tools.zip
/
pyth_os2.zip
/
python-1.0.2
/
Demo
/
sgi
/
al
/
playaiff.py
< prev
next >
Wrap
Text File
|
1994-02-17
|
1KB
|
55 lines
import aiff
import al
import sys
import time
def main():
v = 1
c = al.newconfig()
nchannels = c.getchannels()
nsampframes = 0 # ???
sampwidth = c.getwidth()
samprate = 0.0 # unknown
filename = sys.argv[1]
f = open(filename, 'r')
type, totalsize = aiff.read_chunk_header(f)
if type <> 'FORM':
raise aiff.Error, 'FORM chunk expected at start of file'
aiff.read_form_chunk(f)
while 1:
try:
type, size = aiff.read_chunk_header(f)
except EOFError:
break
if v: print 'header:', `type`, size
if type == 'COMM':
nchannels, nsampframes, sampwidth, samprate = \
aiff.read_comm_chunk(f)
if v: print nchannels, nsampframes, sampwidth, samprate
elif type == 'SSND':
offset, blocksize = aiff.read_ssnd_chunk(f)
if v: print offset, blocksize
data = f.read(size-8)
if size%2: void = f.read(1)
p = makeport(nchannels, sampwidth, samprate)
play(p, data, offset, blocksize)
elif type in aiff.skiplist:
aiff.skip_chunk(f, size)
else:
raise aiff.Error, 'bad chunk type ' + type
def makeport(nchannels, sampwidth, samprate):
c = al.newconfig()
c.setchannels(nchannels)
c.setwidth(sampwidth/8)
# can't set the rate...
p = al.openport('', 'w', c)
return p
def play(p, data, offset, blocksize):
data = data[offset:]
p.writesamps(data)
while p.getfilled() > 0: time.sleep(0.01)
main()