Guido van Rossum | 50692d6 | 1991-09-15 21:05:15 +0000 | [diff] [blame] | 1 | import aiff |
| 2 | import al |
| 3 | import sys |
| 4 | import time |
| 5 | |
| 6 | def main(): |
| 7 | v = 1 |
| 8 | c = al.newconfig() |
| 9 | nchannels = c.getchannels() |
| 10 | nsampframes = 0 # ??? |
| 11 | sampwidth = c.getwidth() |
| 12 | samprate = 0.0 # unknown |
| 13 | filename = sys.argv[1] |
| 14 | f = open(filename, 'r') |
| 15 | type, totalsize = aiff.read_chunk_header(f) |
| 16 | if type <> 'FORM': |
| 17 | raise aiff.Error, 'FORM chunk expected at start of file' |
| 18 | aiff.read_form_chunk(f) |
| 19 | while 1: |
| 20 | try: |
| 21 | type, size = aiff.read_chunk_header(f) |
| 22 | except EOFError: |
| 23 | break |
| 24 | if v: print 'header:', `type`, size |
Guido van Rossum | 14f43cf | 1992-03-30 13:30:03 +0000 | [diff] [blame^] | 25 | if type == 'COMM': |
Guido van Rossum | 50692d6 | 1991-09-15 21:05:15 +0000 | [diff] [blame] | 26 | nchannels, nsampframes, sampwidth, samprate = \ |
| 27 | aiff.read_comm_chunk(f) |
| 28 | if v: print nchannels, nsampframes, sampwidth, samprate |
Guido van Rossum | 14f43cf | 1992-03-30 13:30:03 +0000 | [diff] [blame^] | 29 | elif type == 'SSND': |
Guido van Rossum | 50692d6 | 1991-09-15 21:05:15 +0000 | [diff] [blame] | 30 | offset, blocksize = aiff.read_ssnd_chunk(f) |
| 31 | if v: print offset, blocksize |
| 32 | data = f.read(size-8) |
| 33 | if size%2: void = f.read(1) |
| 34 | p = makeport(nchannels, sampwidth, samprate) |
| 35 | play(p, data, offset, blocksize) |
| 36 | elif type in aiff.skiplist: |
| 37 | aiff.skip_chunk(f, size) |
| 38 | else: |
| 39 | raise aiff.Error, 'bad chunk type ' + type |
| 40 | |
| 41 | def makeport(nchannels, sampwidth, samprate): |
| 42 | c = al.newconfig() |
| 43 | c.setchannels(nchannels) |
| 44 | c.setwidth(sampwidth/8) |
| 45 | # can't set the rate... |
| 46 | p = al.openport('', 'w', c) |
| 47 | return p |
| 48 | |
| 49 | def play(p, data, offset, blocksize): |
| 50 | data = data[offset:] |
| 51 | p.writesamps(data) |
| 52 | while p.getfilled() > 0: time.millisleep(10) |
| 53 | |
| 54 | main() |