annotate vixm/player.py @ 40:06b5a7db3d19 pure

Some cleanup, got to next song implemented
author Josef "Jeff" Sipek <jeffpc@josefsipek.net>
date Sat, 04 Nov 2006 23:11:49 -0500
parents 87aa31e41f4a
children bc6db55448e1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
30
860c891de6bb Remove lots of xmms-related code & get ready to make the whole program a
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
1 import time
860c891de6bb Remove lots of xmms-related code & get ready to make the whole program a
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
2 from threading import Thread
860c891de6bb Remove lots of xmms-related code & get ready to make the whole program a
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
3
35
a7d370f326df Implement song playing
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 34
diff changeset
4 import mad, ao
a7d370f326df Implement song playing
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 34
diff changeset
5
40
06b5a7db3d19 Some cleanup, got to next song implemented
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 37
diff changeset
6 import playlist
06b5a7db3d19 Some cleanup, got to next song implemented
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 37
diff changeset
7
30
860c891de6bb Remove lots of xmms-related code & get ready to make the whole program a
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
8 class playerThread(Thread):
35
a7d370f326df Implement song playing
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 34
diff changeset
9 def __init__(self):
30
860c891de6bb Remove lots of xmms-related code & get ready to make the whole program a
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
10 Thread.__init__(self)
860c891de6bb Remove lots of xmms-related code & get ready to make the whole program a
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
11
860c891de6bb Remove lots of xmms-related code & get ready to make the whole program a
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
12 self.shutdown = False
32
f97eb9f0c207 Add random song selection for default queue
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 30
diff changeset
13 self.playing = False
40
06b5a7db3d19 Some cleanup, got to next song implemented
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 37
diff changeset
14 self.end_current = False
32
f97eb9f0c207 Add random song selection for default queue
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 30
diff changeset
15
34
8028f2addb00 Destroy all traces of xmms
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 32
diff changeset
16 self.current = None
30
860c891de6bb Remove lots of xmms-related code & get ready to make the whole program a
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
17
37
87aa31e41f4a Play the files in a separate thread
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 36
diff changeset
18 self.blksize = 40960
36
c6a3a4d09a9a Small fix & change output to OSS
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 35
diff changeset
19 self.dev = ao.AudioDevice("oss")
30
860c891de6bb Remove lots of xmms-related code & get ready to make the whole program a
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
20
40
06b5a7db3d19 Some cleanup, got to next song implemented
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 37
diff changeset
21 def play_next(self, lists):
06b5a7db3d19 Some cleanup, got to next song implemented
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 37
diff changeset
22 try:
06b5a7db3d19 Some cleanup, got to next song implemented
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 37
diff changeset
23 # pop song off the PRIO queue
06b5a7db3d19 Some cleanup, got to next song implemented
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 37
diff changeset
24 s = lists[playlist.LIST_PRIO].pop()
06b5a7db3d19 Some cleanup, got to next song implemented
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 37
diff changeset
25 except IndexError:
06b5a7db3d19 Some cleanup, got to next song implemented
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 37
diff changeset
26 # no song to pop
06b5a7db3d19 Some cleanup, got to next song implemented
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 37
diff changeset
27 s = lists[playlist.LIST_DEFAULT].next()
06b5a7db3d19 Some cleanup, got to next song implemented
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 37
diff changeset
28 except ValueError:
06b5a7db3d19 Some cleanup, got to next song implemented
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 37
diff changeset
29 print "WTF is going on?!"
06b5a7db3d19 Some cleanup, got to next song implemented
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 37
diff changeset
30 raise ValueError
06b5a7db3d19 Some cleanup, got to next song implemented
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 37
diff changeset
31
06b5a7db3d19 Some cleanup, got to next song implemented
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 37
diff changeset
32 self.play(s)
06b5a7db3d19 Some cleanup, got to next song implemented
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 37
diff changeset
33
32
f97eb9f0c207 Add random song selection for default queue
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 30
diff changeset
34 def play(self, s):
40
06b5a7db3d19 Some cleanup, got to next song implemented
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 37
diff changeset
35 if self.playing:
06b5a7db3d19 Some cleanup, got to next song implemented
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 37
diff changeset
36 self.end_current = True
06b5a7db3d19 Some cleanup, got to next song implemented
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 37
diff changeset
37
35
a7d370f326df Implement song playing
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 34
diff changeset
38 self.playing = True
a7d370f326df Implement song playing
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 34
diff changeset
39 self.current = s
a7d370f326df Implement song playing
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 34
diff changeset
40
30
860c891de6bb Remove lots of xmms-related code & get ready to make the whole program a
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
41 def run(self):
860c891de6bb Remove lots of xmms-related code & get ready to make the whole program a
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
42 while not self.shutdown:
37
87aa31e41f4a Play the files in a separate thread
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 36
diff changeset
43 if self.current and self.playing:
87aa31e41f4a Play the files in a separate thread
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 36
diff changeset
44 # play the file
87aa31e41f4a Play the files in a separate thread
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 36
diff changeset
45 mf = mad.MadFile(self.current["file"])
87aa31e41f4a Play the files in a separate thread
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 36
diff changeset
46
87aa31e41f4a Play the files in a separate thread
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 36
diff changeset
47 while True:
87aa31e41f4a Play the files in a separate thread
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 36
diff changeset
48 buf = mf.read(self.blksize)
40
06b5a7db3d19 Some cleanup, got to next song implemented
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 37
diff changeset
49 if buf is None or \
06b5a7db3d19 Some cleanup, got to next song implemented
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 37
diff changeset
50 self.shutdown or \
06b5a7db3d19 Some cleanup, got to next song implemented
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 37
diff changeset
51 self.end_current:
37
87aa31e41f4a Play the files in a separate thread
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 36
diff changeset
52 break
87aa31e41f4a Play the files in a separate thread
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 36
diff changeset
53 self.dev.play(buf, len(buf))
40
06b5a7db3d19 Some cleanup, got to next song implemented
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 37
diff changeset
54
06b5a7db3d19 Some cleanup, got to next song implemented
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 37
diff changeset
55 if self.end_current:
06b5a7db3d19 Some cleanup, got to next song implemented
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 37
diff changeset
56 self.end_current = False
06b5a7db3d19 Some cleanup, got to next song implemented
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 37
diff changeset
57 else:
06b5a7db3d19 Some cleanup, got to next song implemented
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 37
diff changeset
58 self.playing = False
37
87aa31e41f4a Play the files in a separate thread
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 36
diff changeset
59 else:
87aa31e41f4a Play the files in a separate thread
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 36
diff changeset
60 # nothing to play, just sleep
87aa31e41f4a Play the files in a separate thread
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents: 36
diff changeset
61 time.sleep(0.5)
30
860c891de6bb Remove lots of xmms-related code & get ready to make the whole program a
Josef "Jeff" Sipek <jeffpc@josefsipek.net>
parents:
diff changeset
62