blob: 349de7c3e25734403f48e94d4fdb8d7d17382447 [file] [log] [blame]
Guido van Rossumb9506291992-04-13 18:38:20 +00001# Read CD audio data from the SCSI bus and play it back over the
2# built-in speaker or audio jack.
3
Guido van Rossum67aad281992-04-15 17:49:14 +00004import sys
Guido van Rossumb9506291992-04-13 18:38:20 +00005import al
6import AL
7import cd
8import CD
9
10def playaudio(port, type, audio):
11## print 'playaudio'
12 port.writesamps(audio)
13
14callbacks = ['audio', 'pnum', 'index', 'ptime', 'atime', 'catalog', 'ident', 'control']
15
16def callback(port, type, data):
17 print 'type', callbacks[type], 'data', `data`
18
Guido van Rossum67aad281992-04-15 17:49:14 +000019Error = 'playcd.error'
20
Guido van Rossumb9506291992-04-13 18:38:20 +000021def main():
22 player = cd.open()
23 parser = cd.createparser()
24
Guido van Rossum67aad281992-04-15 17:49:14 +000025 state, track, (min, sec, frame), (abs_min, abs_sec, abs_frame), \
26 (total_min, total_sec, total_frame), \
27 first, last, scsi_audio, \
28 cur_block, (dum1, dum2, dum3) = player.getstatus()
29 print state, track, (min, sec, frame), \
30 (abs_min, abs_sec, abs_frame), \
31 (total_min, total_sec, total_frame), \
32 first, last, scsi_audio, \
33 cur_block, (dum1, dum2, dum3)
Guido van Rossumb9506291992-04-13 18:38:20 +000034
35 if state <> CD.READY:
36 player.close()
Guido van Rossum67aad281992-04-15 17:49:14 +000037 raise Error, 'CD not ready'
Guido van Rossumb9506291992-04-13 18:38:20 +000038 if not scsi_audio:
39 player.close()
Guido van Rossum67aad281992-04-15 17:49:14 +000040 raise Error, 'not an audio-capable CD-ROM player'
Guido van Rossumb9506291992-04-13 18:38:20 +000041
42 for i in range(first, last+1):
43 trackinfo = player.gettrackinfo(i)
Guido van Rossum67aad281992-04-15 17:49:14 +000044 print 'Track', i, trackinfo
45
46 if sys.argv[1:]:
47 print 'Start at track', sys.argv[1]
48 player.seektrack(eval(sys.argv[1]))
Guido van Rossumb9506291992-04-13 18:38:20 +000049
50 size = player.bestreadsize()
51
Guido van Rossume55fef11992-04-14 11:07:19 +000052 oldparams = [AL.OUTPUT_RATE, 0]
53 params = oldparams[:]
54 al.getparams(AL.DEFAULT_DEVICE, oldparams)
55 params[1] = AL.RATE_44100
Guido van Rossumb9506291992-04-13 18:38:20 +000056 try:
Guido van Rossumb9506291992-04-13 18:38:20 +000057 al.setparams(AL.DEFAULT_DEVICE, params)
58 config = al.newconfig()
59 config.setwidth(AL.SAMPLE_16)
60 config.setchannels(AL.STEREO)
61 port = al.openport('CD Player', 'w', config)
62
63 parser.setcallback(CD.AUDIO, playaudio, port)
64 for i in range(1, 8):
65 parser.setcallback(i, callback, port)
66 parser.removecallback(CD.ATIME)
67 parser.removecallback(CD.PTIME)
68
69 while 1:
70 frames = player.readda(size)
71 if frames == '':
72 break
73 parser.parseframe(frames)
74 except KeyboardInterrupt:
75 pass
76
77 al.setparams(AL.DEFAULT_DEVICE, oldparams)
78 player.close()
79 parser.deleteparser()
80
81main()