1992-04-22 10:47:50 -03:00
|
|
|
# Play CD audio on speaker or headphones.
|
|
|
|
|
1992-04-13 15:38:20 -03:00
|
|
|
def playaudio(port, type, audio):
|
|
|
|
port.writesamps(audio)
|
|
|
|
|
1992-04-22 10:39:48 -03:00
|
|
|
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
|
1992-04-15 14:49:14 -03:00
|
|
|
|
1992-04-13 15:38:20 -03:00
|
|
|
def main():
|
1992-04-22 10:39:48 -03:00
|
|
|
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)
|
1992-04-13 15:38:20 -03:00
|
|
|
try:
|
1992-04-22 10:39:48 -03:00
|
|
|
oldparams = [AL.OUTPUT_RATE, 0]
|
|
|
|
params = oldparams[:]
|
|
|
|
al.getparams(AL.DEFAULT_DEVICE, oldparams)
|
|
|
|
params[1] = AL.RATE_44100
|
1992-04-13 15:38:20 -03:00
|
|
|
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)
|
|
|
|
|
1992-04-22 10:39:48 -03:00
|
|
|
for i in range(8):
|
|
|
|
r.setcallback(i, callback, None)
|
|
|
|
r.removecallback(CD.PTIME)
|
|
|
|
r.removecallback(CD.ATIME)
|
|
|
|
r.setcallback(CD.AUDIO, playaudio, port)
|
1992-04-13 15:38:20 -03:00
|
|
|
|
1992-04-22 10:39:48 -03:00
|
|
|
data = r.play()
|
1992-04-13 15:38:20 -03:00
|
|
|
except KeyboardInterrupt:
|
|
|
|
pass
|
|
|
|
al.setparams(AL.DEFAULT_DEVICE, oldparams)
|
|
|
|
|
|
|
|
main()
|