summaryrefslogtreecommitdiffstats
path: root/Demo/sgi/cd/playcd.py
diff options
context:
space:
mode:
Diffstat (limited to 'Demo/sgi/cd/playcd.py')
-rwxr-xr-xDemo/sgi/cd/playcd.py71
1 files changed, 71 insertions, 0 deletions
diff --git a/Demo/sgi/cd/playcd.py b/Demo/sgi/cd/playcd.py
new file mode 100755
index 0000000..8b24581
--- /dev/null
+++ b/Demo/sgi/cd/playcd.py
@@ -0,0 +1,71 @@
+# Read CD audio data from the SCSI bus and play it back over the
+# built-in speaker or audio jack.
+
+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`
+
+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 'playcd.Error', 'CD not ready'
+ if not scsi_audio:
+ player.close()
+ raise 'playcd.Error', 'not an audio-capable CD-ROM player'
+
+ for i in range(first, last+1):
+ trackinfo = player.gettrackinfo(i)
+ print `trackinfo`
+
+ size = player.bestreadsize()
+
+ 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)
+
+ while 1:
+ frames = player.readda(size)
+ if frames == '':
+ break
+ parser.parseframe(frames)
+ except KeyboardInterrupt:
+ pass
+
+ al.setparams(AL.DEFAULT_DEVICE, oldparams)
+ player.close()
+ parser.deleteparser()
+
+main()