Guido van Rossum | 9ac9063 | 1992-04-22 13:47:50 +0000 | [diff] [blame] | 1 | # Play CD audio on speaker or headphones. |
| 2 | |
Guido van Rossum | b950629 | 1992-04-13 18:38:20 +0000 | [diff] [blame] | 3 | def playaudio(port, type, audio): |
Guido van Rossum | b950629 | 1992-04-13 18:38:20 +0000 | [diff] [blame] | 4 | port.writesamps(audio) |
| 5 | |
Guido van Rossum | 60c225c | 1992-04-22 13:39:48 +0000 | [diff] [blame] | 6 | def callback(arg, type, data): |
| 7 | print `type`,`data` |
Guido van Rossum | b950629 | 1992-04-13 18:38:20 +0000 | [diff] [blame] | 8 | |
Guido van Rossum | 60c225c | 1992-04-22 13:39:48 +0000 | [diff] [blame] | 9 | def triple((a, b, c)): |
| 10 | return zfill(a) + ':' + zfill(b) + ':' + zfill(c) |
Guido van Rossum | b950629 | 1992-04-13 18:38:20 +0000 | [diff] [blame] | 11 | |
Guido van Rossum | 60c225c | 1992-04-22 13:39:48 +0000 | [diff] [blame] | 12 | def zfill(n): |
| 13 | s = `n` |
| 14 | return '0' * (2 - len(s)) + s |
| 15 | |
| 16 | def prtrackinfo(info): |
| 17 | for i in range(len(info)): |
| 18 | start, total = info[i] |
| 19 | print 'Track', zfill(i+1), triple(start), triple(total) |
| 20 | |
| 21 | statedict = ['ERROR', 'NODISK', 'READY', 'PLAYING', 'PAUSED', 'STILL'] |
| 22 | |
| 23 | def prstatus(status): |
| 24 | state, track, curtime, abstime, totaltime, first, last, \ |
| 25 | scsi_audio, cur_block, dummy = status |
| 26 | print 'Status:', |
| 27 | if 0 <= state < len(statedict): |
| 28 | print statedict[state] |
| 29 | else: |
| 30 | print state |
| 31 | print 'Track: ', track |
| 32 | print 'Time: ', triple(curtime) |
| 33 | print 'Abs: ', triple(abstime) |
| 34 | print 'Total: ', triple(totaltime) |
| 35 | print 'First: ', first |
| 36 | print 'Last: ', last |
| 37 | print 'SCSI: ', scsi_audio |
| 38 | print 'Block: ', cur_block |
| 39 | print 'Future:', dummy |
Guido van Rossum | 67aad28 | 1992-04-15 17:49:14 +0000 | [diff] [blame] | 40 | |
Guido van Rossum | b950629 | 1992-04-13 18:38:20 +0000 | [diff] [blame] | 41 | def main(): |
Guido van Rossum | 60c225c | 1992-04-22 13:39:48 +0000 | [diff] [blame] | 42 | import sys, readcd, al, string, AL, CD |
| 43 | r = readcd.Readcd().init() |
| 44 | prstatus(r.getstatus()) |
| 45 | prtrackinfo(r.gettrackinfo()) |
| 46 | l = [] |
| 47 | for arg in sys.argv[1:]: |
| 48 | x = eval(arg) |
| 49 | try: |
| 50 | l = len(x) |
| 51 | r.appendstretch(x[0], x[1]) |
| 52 | except TypeError: |
| 53 | r.appendtrack(x) |
Guido van Rossum | b950629 | 1992-04-13 18:38:20 +0000 | [diff] [blame] | 54 | try: |
Guido van Rossum | 60c225c | 1992-04-22 13:39:48 +0000 | [diff] [blame] | 55 | oldparams = [AL.OUTPUT_RATE, 0] |
| 56 | params = oldparams[:] |
| 57 | al.getparams(AL.DEFAULT_DEVICE, oldparams) |
| 58 | params[1] = AL.RATE_44100 |
Guido van Rossum | b950629 | 1992-04-13 18:38:20 +0000 | [diff] [blame] | 59 | al.setparams(AL.DEFAULT_DEVICE, params) |
| 60 | config = al.newconfig() |
| 61 | config.setwidth(AL.SAMPLE_16) |
| 62 | config.setchannels(AL.STEREO) |
| 63 | port = al.openport('CD Player', 'w', config) |
| 64 | |
Guido van Rossum | 60c225c | 1992-04-22 13:39:48 +0000 | [diff] [blame] | 65 | for i in range(8): |
| 66 | r.setcallback(i, callback, None) |
| 67 | r.removecallback(CD.PTIME) |
| 68 | r.removecallback(CD.ATIME) |
| 69 | r.setcallback(CD.AUDIO, playaudio, port) |
Guido van Rossum | b950629 | 1992-04-13 18:38:20 +0000 | [diff] [blame] | 70 | |
Guido van Rossum | 60c225c | 1992-04-22 13:39:48 +0000 | [diff] [blame] | 71 | data = r.play() |
Guido van Rossum | b950629 | 1992-04-13 18:38:20 +0000 | [diff] [blame] | 72 | except KeyboardInterrupt: |
| 73 | pass |
Guido van Rossum | b950629 | 1992-04-13 18:38:20 +0000 | [diff] [blame] | 74 | al.setparams(AL.DEFAULT_DEVICE, oldparams) |
Guido van Rossum | b950629 | 1992-04-13 18:38:20 +0000 | [diff] [blame] | 75 | |
| 76 | main() |