]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Rewritten (by Sjoerd again) to use module readcd
authorGuido van Rossum <guido@python.org>
Wed, 22 Apr 1992 13:39:48 +0000 (13:39 +0000)
committerGuido van Rossum <guido@python.org>
Wed, 22 Apr 1992 13:39:48 +0000 (13:39 +0000)
Demo/sgi/cd/playcd.py

index 349de7c3e25734403f48e94d4fdb8d7d17382447..dc38ed91587acffdb9c62a2b339b0189b22edd88 100755 (executable)
@@ -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(port, type, data):
-       print 'type', callbacks[type], 'data', `data`
-
-Error = 'playcd.error'
+def callback(arg, type, data):
+       print `type`,`data`
+
+def triple((a, b, c)):
+       return zfill(a) + ':' + zfill(b) + ':' + zfill(c)
+
+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()