11# Play CD audio on speaker or headphones.
22
3+ callbacktypes = ['audio' ,'pnum' ,'index' ,'ptime' ,'atime' ,'catalog' ,'ident' ,'control' ]
4+
35def playaudio (port , type , audio ):
46 port .writesamps (audio )
57
8+ def prtrack (cdinfo , type , pnum ):
9+ if cdinfo .track [pnum ] <> '' :
10+ print 'playing "' + cdinfo .track [pnum ] + '"'
11+ else :
12+ print callbacktypes [type ]+ ': ' + `pnum`
13+
614def callback (arg , type , data ):
7- print `type` ,`data`
15+ print callbacktypes [type ]+ ': ' + `data`
16+
17+ def tcallback (arg , type , data ):
18+ print callbacktypes [type ]+ ': ' + triple (data )
819
920def triple ((a , b , c )):
1021 return zfill (a ) + ':' + zfill (b ) + ':' + zfill (c )
@@ -39,12 +50,20 @@ def prstatus(status):
3950 print 'Future:' , dummy
4051
4152def main ():
42- import sys , readcd , al , string , AL , CD
53+ import sys , readcd , al , AL , CD , cdplayer
54+ verbose = 0
4355 r = readcd .Readcd ().init ()
4456 prstatus (r .getstatus ())
4557 prtrackinfo (r .gettrackinfo ())
46- l = []
58+ cdinfo = cdplayer .Cdplayer ().init (r .gettrackinfo ())
59+ if cdinfo .title <> '' :
60+ print 'Title: "' + cdinfo .title + '"'
61+ if cdinfo .artist <> '' :
62+ print 'Artist: ' + cdinfo .artist
4763 for arg in sys .argv [1 :]:
64+ if arg == '-v' :
65+ verbose = 1
66+ continue
4867 x = eval (arg )
4968 try :
5069 l = len (x )
@@ -64,13 +83,20 @@ def main():
6483
6584 for i in range (8 ):
6685 r .setcallback (i , callback , None )
67- r .removecallback (CD .PTIME )
68- r .removecallback (CD .ATIME )
86+ if verbose :
87+ r .setcallback (CD .PTIME , tcallback , None )
88+ r .setcallback (CD .ATIME , tcallback , None )
89+ else :
90+ r .removecallback (CD .PTIME )
91+ r .removecallback (CD .ATIME )
92+ r .setcallback (CD .PNUM , prtrack , cdinfo )
6993 r .setcallback (CD .AUDIO , playaudio , port )
7094
7195 data = r .play ()
7296 except KeyboardInterrupt :
73- pass
97+ status = r .getstatus ()
98+ print 'Interrupted at ' + triple (status [2 ])+ ' into track ' + \
99+ `status[1]` + ' (absolute time ' + triple (status [3 ])+ ')'
74100 al .setparams (AL .DEFAULT_DEVICE , oldparams )
75101
76102main ()
0 commit comments