blob: 132f94598673b23d0b27fd136b1529d0b0d4fd00 [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
4import al
5import AL
6import cd
7import CD
8
9def playaudio(port, type, audio):
10## print 'playaudio'
11 port.writesamps(audio)
12
13callbacks = ['audio', 'pnum', 'index', 'ptime', 'atime', 'catalog', 'ident', 'control']
14
15def callback(port, type, data):
16 print 'type', callbacks[type], 'data', `data`
17
18def main():
19 player = cd.open()
20 parser = cd.createparser()
21
22 state, track, min, sec, frame, abs_min, abs_sec, abs_frame, \
23 total_min, total_sec, total_frame, first, last, scsi_audio, \
24 cur_block, dum1, dum2, dum3 = player.getstatus()
25 print `state, track, min, sec, frame, abs_min, abs_sec, abs_frame, \
26 total_min, total_sec, total_frame, first, last, scsi_audio, \
27 cur_block, dum1, dum2, dum3`
28
29 if state <> CD.READY:
30 player.close()
31 raise 'playcd.Error', 'CD not ready'
32 if not scsi_audio:
33 player.close()
34 raise 'playcd.Error', 'not an audio-capable CD-ROM player'
35
36 for i in range(first, last+1):
37 trackinfo = player.gettrackinfo(i)
38 print `trackinfo`
39
40 size = player.bestreadsize()
41
Guido van Rossume55fef11992-04-14 11:07:19 +000042 oldparams = [AL.OUTPUT_RATE, 0]
43 params = oldparams[:]
44 al.getparams(AL.DEFAULT_DEVICE, oldparams)
45 params[1] = AL.RATE_44100
Guido van Rossumb9506291992-04-13 18:38:20 +000046 try:
Guido van Rossumb9506291992-04-13 18:38:20 +000047 al.setparams(AL.DEFAULT_DEVICE, params)
48 config = al.newconfig()
49 config.setwidth(AL.SAMPLE_16)
50 config.setchannels(AL.STEREO)
51 port = al.openport('CD Player', 'w', config)
52
53 parser.setcallback(CD.AUDIO, playaudio, port)
54 for i in range(1, 8):
55 parser.setcallback(i, callback, port)
56 parser.removecallback(CD.ATIME)
57 parser.removecallback(CD.PTIME)
58
59 while 1:
60 frames = player.readda(size)
61 if frames == '':
62 break
63 parser.parseframe(frames)
64 except KeyboardInterrupt:
65 pass
66
67 al.setparams(AL.DEFAULT_DEVICE, oldparams)
68 player.close()
69 parser.deleteparser()
70
71main()