home *** CD-ROM | disk | FTP | other *** search
Text File | 1995-12-17 | 1.3 KB | 55 lines | [TEXT/R*ch] |
- 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()
-