annotate pyntnclick/sound.py @ 800:374d96e0b55e pyntnclick

pep8/pyflakes fixes.
author Jeremy Thurgood <firxen@gmail.com>
date Sun, 27 Jan 2013 13:42:58 +0200
parents 4206da1f742d
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
583
66c2e084b8b3 Remove unused import and fix comment.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 577
diff changeset
1 # sound management for pyntnclick
107
5213b45fcc7e Initial event sound support
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
2
629
660ef5793886 Remove albow from sound
Neil Muller <neil@dip.sun.ac.za>
parents: 583
diff changeset
3 from random import randrange
660ef5793886 Remove albow from sound
Neil Muller <neil@dip.sun.ac.za>
parents: 583
diff changeset
4
660ef5793886 Remove albow from sound
Neil Muller <neil@dip.sun.ac.za>
parents: 583
diff changeset
5
123
3b293e3b8829 Add missing pygame import
Neil Muller <neil@dip.sun.ac.za>
parents: 111
diff changeset
6 import pygame
564
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
7
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
8 try:
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
9 from pygame.mixer import Sound as pygame_Sound
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
10 from pygame.mixer import music
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
11 pygame_import_error = None
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
12 except ImportError, e:
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
13 # Save error, so we don't crash and can do the right thing later
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
14 pygame_import_error = e
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
15 pygame_Sound = None
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
16 music = None
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
17
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
18 from pyntnclick.resources import ResourceNotFound
629
660ef5793886 Remove albow from sound
Neil Muller <neil@dip.sun.ac.za>
parents: 583
diff changeset
19 from pyntnclick.engine import MUSIC_ENDED
564
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
20
629
660ef5793886 Remove albow from sound
Neil Muller <neil@dip.sun.ac.za>
parents: 583
diff changeset
21
660ef5793886 Remove albow from sound
Neil Muller <neil@dip.sun.ac.za>
parents: 583
diff changeset
22 class PlayList(object):
660ef5793886 Remove albow from sound
Neil Muller <neil@dip.sun.ac.za>
parents: 583
diff changeset
23 """Hold a playlist of music filenames"""
660ef5793886 Remove albow from sound
Neil Muller <neil@dip.sun.ac.za>
parents: 583
diff changeset
24
660ef5793886 Remove albow from sound
Neil Muller <neil@dip.sun.ac.za>
parents: 583
diff changeset
25 def __init__(self, pieces, random, repeat):
660ef5793886 Remove albow from sound
Neil Muller <neil@dip.sun.ac.za>
parents: 583
diff changeset
26 self._pieces = pieces
660ef5793886 Remove albow from sound
Neil Muller <neil@dip.sun.ac.za>
parents: 583
diff changeset
27 self._random = random
631
8b78fc07a862 Less buggy non-albow music support
Neil Muller <neil@dip.sun.ac.za>
parents: 629
diff changeset
28 self._repeat = repeat
629
660ef5793886 Remove albow from sound
Neil Muller <neil@dip.sun.ac.za>
parents: 583
diff changeset
29
660ef5793886 Remove albow from sound
Neil Muller <neil@dip.sun.ac.za>
parents: 583
diff changeset
30 def get_next(self):
660ef5793886 Remove albow from sound
Neil Muller <neil@dip.sun.ac.za>
parents: 583
diff changeset
31 # Get the next piece
631
8b78fc07a862 Less buggy non-albow music support
Neil Muller <neil@dip.sun.ac.za>
parents: 629
diff changeset
32 if self._pieces:
629
660ef5793886 Remove albow from sound
Neil Muller <neil@dip.sun.ac.za>
parents: 583
diff changeset
33 if self._random:
631
8b78fc07a862 Less buggy non-albow music support
Neil Muller <neil@dip.sun.ac.za>
parents: 629
diff changeset
34 if not self._repeat or len(self._pieces) < 3:
8b78fc07a862 Less buggy non-albow music support
Neil Muller <neil@dip.sun.ac.za>
parents: 629
diff changeset
35 i = randrange(0, len(self._pieces))
629
660ef5793886 Remove albow from sound
Neil Muller <neil@dip.sun.ac.za>
parents: 583
diff changeset
36 else:
660ef5793886 Remove albow from sound
Neil Muller <neil@dip.sun.ac.za>
parents: 583
diff changeset
37 # Ignore the last entry, since we possibly just played it
631
8b78fc07a862 Less buggy non-albow music support
Neil Muller <neil@dip.sun.ac.za>
parents: 629
diff changeset
38 i = randrange(0, len(self._pieces) - 1)
629
660ef5793886 Remove albow from sound
Neil Muller <neil@dip.sun.ac.za>
parents: 583
diff changeset
39 else:
660ef5793886 Remove albow from sound
Neil Muller <neil@dip.sun.ac.za>
parents: 583
diff changeset
40 i = 0
631
8b78fc07a862 Less buggy non-albow music support
Neil Muller <neil@dip.sun.ac.za>
parents: 629
diff changeset
41 result = self._pieces.pop(i)
629
660ef5793886 Remove albow from sound
Neil Muller <neil@dip.sun.ac.za>
parents: 583
diff changeset
42 if self._repeat:
631
8b78fc07a862 Less buggy non-albow music support
Neil Muller <neil@dip.sun.ac.za>
parents: 629
diff changeset
43 self._pieces.append(result)
629
660ef5793886 Remove albow from sound
Neil Muller <neil@dip.sun.ac.za>
parents: 583
diff changeset
44 return result
660ef5793886 Remove albow from sound
Neil Muller <neil@dip.sun.ac.za>
parents: 583
diff changeset
45 return None
107
5213b45fcc7e Initial event sound support
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
46
564
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
47
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
48 class DummySound(object):
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
49 """A dummy sound object.
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
50
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
51 This is a placeholder object with the same API as
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
52 pygame.mixer.Sound which does nothing. Used when
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
53 sounds are disabled so scense don't need to worry
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
54 about the details.
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
55
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
56 Inpsired by the same idea in Albow (by Greg Ewing)"""
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
57
565
88cffe418201 Pyflakes sound
Neil Muller <neil@dip.sun.ac.za>
parents: 564
diff changeset
58 def play(self, *args):
88cffe418201 Pyflakes sound
Neil Muller <neil@dip.sun.ac.za>
parents: 564
diff changeset
59 pass
564
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
60
565
88cffe418201 Pyflakes sound
Neil Muller <neil@dip.sun.ac.za>
parents: 564
diff changeset
61 def stop(self):
88cffe418201 Pyflakes sound
Neil Muller <neil@dip.sun.ac.za>
parents: 564
diff changeset
62 pass
564
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
63
565
88cffe418201 Pyflakes sound
Neil Muller <neil@dip.sun.ac.za>
parents: 564
diff changeset
64 def get_length(self):
88cffe418201 Pyflakes sound
Neil Muller <neil@dip.sun.ac.za>
parents: 564
diff changeset
65 return 0.0
564
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
66
565
88cffe418201 Pyflakes sound
Neil Muller <neil@dip.sun.ac.za>
parents: 564
diff changeset
67 def get_num_channel(self):
88cffe418201 Pyflakes sound
Neil Muller <neil@dip.sun.ac.za>
parents: 564
diff changeset
68 return 0
564
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
69
565
88cffe418201 Pyflakes sound
Neil Muller <neil@dip.sun.ac.za>
parents: 564
diff changeset
70 def get_volume(self):
88cffe418201 Pyflakes sound
Neil Muller <neil@dip.sun.ac.za>
parents: 564
diff changeset
71 return 0.0
564
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
72
565
88cffe418201 Pyflakes sound
Neil Muller <neil@dip.sun.ac.za>
parents: 564
diff changeset
73 def fadeout(self, *args):
88cffe418201 Pyflakes sound
Neil Muller <neil@dip.sun.ac.za>
parents: 564
diff changeset
74 pass
107
5213b45fcc7e Initial event sound support
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
75
534
6df527142e69 PEP-8 sound.py
Jeremy Thurgood <firxen@gmail.com>
parents: 315
diff changeset
76
564
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
77 class Sound(object):
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
78 """Global sound management and similiar useful things"""
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
79
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
80 def __init__(self, resource_finder):
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
81 self.sound_enabled = False
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
82 self.sound_cache = {}
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
83 self._resource_finder = resource_finder
629
660ef5793886 Remove albow from sound
Neil Muller <neil@dip.sun.ac.za>
parents: 583
diff changeset
84 self._current_playlist = None
564
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
85
576
1b1ab71535bd Classify constants, which involves a whole bunch of XXX comments
Stefano Rivera <stefano@rivera.za.net>
parents: 572
diff changeset
86 def enable_sound(self, constants):
564
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
87 """Attempt to initialise the sound system"""
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
88 if pygame_Sound is None:
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
89 self.disable_sound(pygame_import_error)
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
90 return
107
5213b45fcc7e Initial event sound support
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
91 try:
576
1b1ab71535bd Classify constants, which involves a whole bunch of XXX comments
Stefano Rivera <stefano@rivera.za.net>
parents: 572
diff changeset
92 pygame.mixer.init(constants.snd_freq,
1b1ab71535bd Classify constants, which involves a whole bunch of XXX comments
Stefano Rivera <stefano@rivera.za.net>
parents: 572
diff changeset
93 constants.snd_bitsize,
1b1ab71535bd Classify constants, which involves a whole bunch of XXX comments
Stefano Rivera <stefano@rivera.za.net>
parents: 572
diff changeset
94 constants.snd_channels,
1b1ab71535bd Classify constants, which involves a whole bunch of XXX comments
Stefano Rivera <stefano@rivera.za.net>
parents: 572
diff changeset
95 constants.snd_buffer)
564
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
96 self.sound_enabled = True
629
660ef5793886 Remove albow from sound
Neil Muller <neil@dip.sun.ac.za>
parents: 583
diff changeset
97 music.set_endevent(MUSIC_ENDED)
564
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
98 except pygame.error, exc:
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
99 self.disable_sound(exc)
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
100
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
101 def disable_sound(self, exc=None):
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
102 """Disable the sound system"""
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
103 self.sound_enabled = False
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
104 if exc is not None:
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
105 print 'Failed to initialise sound system'
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
106 print 'Error: %s' % exc
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
107 print 'Sound disabled'
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
108
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
109 def get_sound(self, *names):
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
110 if not self.sound_enabled:
565
88cffe418201 Pyflakes sound
Neil Muller <neil@dip.sun.ac.za>
parents: 564
diff changeset
111 return DummySound()
564
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
112 sound = None
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
113 try:
577
ccc26c23d2c1 Fix sound loading
Neil Muller <neil@dip.sun.ac.za>
parents: 576
diff changeset
114 path = self._resource_finder.get_resource_path("sounds", *names)
565
88cffe418201 Pyflakes sound
Neil Muller <neil@dip.sun.ac.za>
parents: 564
diff changeset
115 sound = self.sound_cache.get(path, None)
564
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
116 except ResourceNotFound:
577
ccc26c23d2c1 Fix sound loading
Neil Muller <neil@dip.sun.ac.za>
parents: 576
diff changeset
117 print "Sound file not found: %s" % names
564
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
118 # Cache failed lookup
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
119 sound = DummySound()
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
120 self.sound_cache[path] = sound
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
121 if sound is None:
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
122 try:
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
123 sound = pygame_Sound(path)
570
9c3528c2cbe5 Bug fixes for sound hook-up.
Simon Cross <hodgestar+bzr@gmail.com>
parents: 565
diff changeset
124 except pygame.error:
577
ccc26c23d2c1 Fix sound loading
Neil Muller <neil@dip.sun.ac.za>
parents: 576
diff changeset
125 print "Sound file not found: %s" % names
564
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
126 sound = DummySound()
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
127 self.sound_cache[path] = sound
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
128 return sound
107
5213b45fcc7e Initial event sound support
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
129
564
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
130 def get_playlist(self, pieces, random=False, repeat=False):
629
660ef5793886 Remove albow from sound
Neil Muller <neil@dip.sun.ac.za>
parents: 583
diff changeset
131 return PlayList(pieces, random, repeat)
534
6df527142e69 PEP-8 sound.py
Jeremy Thurgood <firxen@gmail.com>
parents: 315
diff changeset
132
629
660ef5793886 Remove albow from sound
Neil Muller <neil@dip.sun.ac.za>
parents: 583
diff changeset
133 def get_music(self, name):
577
ccc26c23d2c1 Fix sound loading
Neil Muller <neil@dip.sun.ac.za>
parents: 576
diff changeset
134 if self.sound_enabled:
629
660ef5793886 Remove albow from sound
Neil Muller <neil@dip.sun.ac.za>
parents: 583
diff changeset
135 music_file = self._resource_finder.get_resource_path("sounds",
660ef5793886 Remove albow from sound
Neil Muller <neil@dip.sun.ac.za>
parents: 583
diff changeset
136 name)
660ef5793886 Remove albow from sound
Neil Muller <neil@dip.sun.ac.za>
parents: 583
diff changeset
137 return music_file
660ef5793886 Remove albow from sound
Neil Muller <neil@dip.sun.ac.za>
parents: 583
diff changeset
138 return None
660ef5793886 Remove albow from sound
Neil Muller <neil@dip.sun.ac.za>
parents: 583
diff changeset
139
660ef5793886 Remove albow from sound
Neil Muller <neil@dip.sun.ac.za>
parents: 583
diff changeset
140 def music_ended(self):
660ef5793886 Remove albow from sound
Neil Muller <neil@dip.sun.ac.za>
parents: 583
diff changeset
141 if self._current_playlist:
660ef5793886 Remove albow from sound
Neil Muller <neil@dip.sun.ac.za>
parents: 583
diff changeset
142 # Try start the next tune
660ef5793886 Remove albow from sound
Neil Muller <neil@dip.sun.ac.za>
parents: 583
diff changeset
143 self.start_next_music()
107
5213b45fcc7e Initial event sound support
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
144
564
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
145 def change_playlist(self, new_playlist):
577
ccc26c23d2c1 Fix sound loading
Neil Muller <neil@dip.sun.ac.za>
parents: 576
diff changeset
146 if self.sound_enabled:
631
8b78fc07a862 Less buggy non-albow music support
Neil Muller <neil@dip.sun.ac.za>
parents: 629
diff changeset
147 music.stop()
629
660ef5793886 Remove albow from sound
Neil Muller <neil@dip.sun.ac.za>
parents: 583
diff changeset
148 self._current_playlist = new_playlist
660ef5793886 Remove albow from sound
Neil Muller <neil@dip.sun.ac.za>
parents: 583
diff changeset
149 self.start_next_music()
660ef5793886 Remove albow from sound
Neil Muller <neil@dip.sun.ac.za>
parents: 583
diff changeset
150
660ef5793886 Remove albow from sound
Neil Muller <neil@dip.sun.ac.za>
parents: 583
diff changeset
151 def start_next_music(self):
660ef5793886 Remove albow from sound
Neil Muller <neil@dip.sun.ac.za>
parents: 583
diff changeset
152 if self._current_playlist:
660ef5793886 Remove albow from sound
Neil Muller <neil@dip.sun.ac.za>
parents: 583
diff changeset
153 tune = self._current_playlist.get_next()
660ef5793886 Remove albow from sound
Neil Muller <neil@dip.sun.ac.za>
parents: 583
diff changeset
154 if tune:
660ef5793886 Remove albow from sound
Neil Muller <neil@dip.sun.ac.za>
parents: 583
diff changeset
155 music.load(tune)
660ef5793886 Remove albow from sound
Neil Muller <neil@dip.sun.ac.za>
parents: 583
diff changeset
156 music.play()
154
d2f94f42edf3 Monkey patch albow
Neil Muller <neil@dip.sun.ac.za>
parents: 123
diff changeset
157
577
ccc26c23d2c1 Fix sound loading
Neil Muller <neil@dip.sun.ac.za>
parents: 576
diff changeset
158 def get_current_playlist(self):
629
660ef5793886 Remove albow from sound
Neil Muller <neil@dip.sun.ac.za>
parents: 583
diff changeset
159 return self._current_playlist