diff --git a/Demo/sgi/cd/playcd.py b/Demo/sgi/cd/playcd.py index 349de7c3e25..dc38ed91587 100755 --- a/Demo/sgi/cd/playcd.py +++ b/Demo/sgi/cd/playcd.py @@ -1,81 +1,76 @@ -# Read CD audio data from the SCSI bus and play it back over the -# built-in speaker or audio jack. - -import sys -import al -import AL -import cd -import CD - def playaudio(port, type, audio): -## print 'playaudio' port.writesamps(audio) -callbacks = ['audio', 'pnum', 'index', 'ptime', 'atime', 'catalog', 'ident', 'control'] +def callback(arg, type, data): + print `type`,`data` -def callback(port, type, data): - print 'type', callbacks[type], 'data', `data` +def triple((a, b, c)): + return zfill(a) + ':' + zfill(b) + ':' + zfill(c) -Error = 'playcd.error' +def zfill(n): + s = `n` + return '0' * (2 - len(s)) + s + +def prtrackinfo(info): + for i in range(len(info)): + start, total = info[i] + print 'Track', zfill(i+1), triple(start), triple(total) + +statedict = ['ERROR', 'NODISK', 'READY', 'PLAYING', 'PAUSED', 'STILL'] + +def prstatus(status): + state, track, curtime, abstime, totaltime, first, last, \ + scsi_audio, cur_block, dummy = status + print 'Status:', + if 0 <= state < len(statedict): + print statedict[state] + else: + print state + print 'Track: ', track + print 'Time: ', triple(curtime) + print 'Abs: ', triple(abstime) + print 'Total: ', triple(totaltime) + print 'First: ', first + print 'Last: ', last + print 'SCSI: ', scsi_audio + print 'Block: ', cur_block + print 'Future:', dummy def main(): - player = cd.open() - parser = cd.createparser() - - state, track, (min, sec, frame), (abs_min, abs_sec, abs_frame), \ - (total_min, total_sec, total_frame), \ - first, last, scsi_audio, \ - cur_block, (dum1, dum2, dum3) = player.getstatus() - print state, track, (min, sec, frame), \ - (abs_min, abs_sec, abs_frame), \ - (total_min, total_sec, total_frame), \ - first, last, scsi_audio, \ - cur_block, (dum1, dum2, dum3) - - if state <> CD.READY: - player.close() - raise Error, 'CD not ready' - if not scsi_audio: - player.close() - raise Error, 'not an audio-capable CD-ROM player' - - for i in range(first, last+1): - trackinfo = player.gettrackinfo(i) - print 'Track', i, trackinfo - - if sys.argv[1:]: - print 'Start at track', sys.argv[1] - player.seektrack(eval(sys.argv[1])) - - size = player.bestreadsize() - - oldparams = [AL.OUTPUT_RATE, 0] - params = oldparams[:] - al.getparams(AL.DEFAULT_DEVICE, oldparams) - params[1] = AL.RATE_44100 + import sys, readcd, al, string, AL, CD + r = readcd.Readcd().init() + prstatus(r.getstatus()) + prtrackinfo(r.gettrackinfo()) + l = [] + for arg in sys.argv[1:]: + x = eval(arg) + try: + l = len(x) + r.appendstretch(x[0], x[1]) + except TypeError: + r.appendtrack(x) try: + oldparams = [AL.OUTPUT_RATE, 0] + params = oldparams[:] + al.getparams(AL.DEFAULT_DEVICE, oldparams) + params[1] = AL.RATE_44100 al.setparams(AL.DEFAULT_DEVICE, params) config = al.newconfig() config.setwidth(AL.SAMPLE_16) config.setchannels(AL.STEREO) port = al.openport('CD Player', 'w', config) - parser.setcallback(CD.AUDIO, playaudio, port) - for i in range(1, 8): - parser.setcallback(i, callback, port) - parser.removecallback(CD.ATIME) - parser.removecallback(CD.PTIME) + for i in range(8): + r.setcallback(i, callback, None) + r.removecallback(CD.PTIME) + r.removecallback(CD.ATIME) + r.setcallback(CD.AUDIO, playaudio, port) - while 1: - frames = player.readda(size) - if frames == '': - break - parser.parseframe(frames) + data = r.play() except KeyboardInterrupt: pass - al.setparams(AL.DEFAULT_DEVICE, oldparams) - player.close() - parser.deleteparser() + r.player.close() + r.parser.deleteparser() main()