annotate pyntnclick/sound.py @ 565:88cffe418201 pyntnclick

Pyflakes sound
author Neil Muller <neil@dip.sun.ac.za>
date Sat, 11 Feb 2012 15:37:59 +0200
parents 2f7aa3cad77c
children 9c3528c2cbe5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
107
5213b45fcc7e Initial event sound support
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
1 # Sound management for Suspended Sentence
5213b45fcc7e Initial event sound support
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
2
5213b45fcc7e Initial event sound support
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
3 # This re-implements some of the albow.resource code to
5213b45fcc7e Initial event sound support
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
4 # a) work around an annoying bugs
5213b45fcc7e Initial event sound support
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
5 # b) add some missing functionality (disable_sound)
5213b45fcc7e Initial event sound support
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
6
111
18ffaaaa27e7 Add explicit check for sound file existence (my pygame 1.9 returns a valid sound object even when the path does not exist).
Simon Cross <simon@simonx>
parents: 107
diff changeset
7 import os
18ffaaaa27e7 Add explicit check for sound file existence (my pygame 1.9 returns a valid sound object even when the path does not exist).
Simon Cross <simon@simonx>
parents: 107
diff changeset
8
123
3b293e3b8829 Add missing pygame import
Neil Muller <neil@dip.sun.ac.za>
parents: 111
diff changeset
9 import pygame
564
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
10
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
11 try:
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
12 from pygame.mixer import Sound as pygame_Sound
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
13 from pygame.mixer import music
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
14 pygame_import_error = None
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
15 except ImportError, e:
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
16 # 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
17 pygame_import_error = e
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
18 pygame_Sound = None
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
19 music = None
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
20
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
21 from pyntnclick.constants import FREQ, BITSIZE, CHANNELS, BUFFER
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
22 from pyntnclick.resources import ResourceNotFound
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
23
154
d2f94f42edf3 Monkey patch albow
Neil Muller <neil@dip.sun.ac.za>
parents: 123
diff changeset
24 import albow.music
107
5213b45fcc7e Initial event sound support
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
25
564
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
26
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
27 class DummySound(object):
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
28 """A dummy sound object.
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
29
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
30 This is a placeholder object with the same API as
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
31 pygame.mixer.Sound which does nothing. Used when
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
32 sounds are disabled so scense don't need to worry
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
33 about the details.
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
34
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
35 Inpsired by the same idea in Albow (by Greg Ewing)"""
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
36
565
88cffe418201 Pyflakes sound
Neil Muller <neil@dip.sun.ac.za>
parents: 564
diff changeset
37 def play(self, *args):
88cffe418201 Pyflakes sound
Neil Muller <neil@dip.sun.ac.za>
parents: 564
diff changeset
38 pass
564
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
39
565
88cffe418201 Pyflakes sound
Neil Muller <neil@dip.sun.ac.za>
parents: 564
diff changeset
40 def stop(self):
88cffe418201 Pyflakes sound
Neil Muller <neil@dip.sun.ac.za>
parents: 564
diff changeset
41 pass
564
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
42
565
88cffe418201 Pyflakes sound
Neil Muller <neil@dip.sun.ac.za>
parents: 564
diff changeset
43 def get_length(self):
88cffe418201 Pyflakes sound
Neil Muller <neil@dip.sun.ac.za>
parents: 564
diff changeset
44 return 0.0
564
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
45
565
88cffe418201 Pyflakes sound
Neil Muller <neil@dip.sun.ac.za>
parents: 564
diff changeset
46 def get_num_channel(self):
88cffe418201 Pyflakes sound
Neil Muller <neil@dip.sun.ac.za>
parents: 564
diff changeset
47 return 0
564
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
48
565
88cffe418201 Pyflakes sound
Neil Muller <neil@dip.sun.ac.za>
parents: 564
diff changeset
49 def get_volume(self):
88cffe418201 Pyflakes sound
Neil Muller <neil@dip.sun.ac.za>
parents: 564
diff changeset
50 return 0.0
564
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
51
565
88cffe418201 Pyflakes sound
Neil Muller <neil@dip.sun.ac.za>
parents: 564
diff changeset
52 def fadeout(self, *args):
88cffe418201 Pyflakes sound
Neil Muller <neil@dip.sun.ac.za>
parents: 564
diff changeset
53 pass
107
5213b45fcc7e Initial event sound support
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
54
534
6df527142e69 PEP-8 sound.py
Jeremy Thurgood <firxen@gmail.com>
parents: 315
diff changeset
55
564
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
56 class Sound(object):
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
57 """Global sound management and similiar useful things"""
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
58
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
59 def __init__(self, resource_finder):
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
60 self.sound_enabled = False
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
61 self.sound_cache = {}
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
62 self._resource_finder = resource_finder
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
63
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
64 def enable_sound(self):
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
65 """Attempt to initialise the sound system"""
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
66 if pygame_Sound is None:
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
67 self.disable_sound(pygame_import_error)
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
68 return
107
5213b45fcc7e Initial event sound support
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
69 try:
564
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
70 pygame.mixer.init(FREQ, BITSIZE, CHANNELS, BUFFER)
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
71 self.sound_enabled = True
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
72 except pygame.error, exc:
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
73 self.disable_sound(exc)
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
74
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
75 def disable_sound(self, exc=None):
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
76 """Disable the sound system"""
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
77 self.sound_enabled = False
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
78 if exc is not None:
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
79 print 'Failed to initialise sound system'
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
80 print 'Error: %s' % exc
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
81 print 'Sound disabled'
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
82
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
83 def get_sound(self, *names):
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
84 if not self.sound_enabled:
565
88cffe418201 Pyflakes sound
Neil Muller <neil@dip.sun.ac.za>
parents: 564
diff changeset
85 return DummySound()
564
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
86 soundfile = os.path.join(names)
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
87 sound = None
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
88 try:
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
89 path = self._resource_finder("sounds", soundfile)
565
88cffe418201 Pyflakes sound
Neil Muller <neil@dip.sun.ac.za>
parents: 564
diff changeset
90 sound = self.sound_cache.get(path, None)
564
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
91 except ResourceNotFound:
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
92 print "Sound file not found: %s" % soundfile
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
93 # Cache failed lookup
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
94 sound = DummySound()
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
95 self.sound_cache[path] = sound
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
96 if sound is None:
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
97 try:
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
98 sound = pygame_Sound(path)
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
99 except pygame.error, e:
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
100 print "Sound file not found: %s" % soundfile
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
101 sound = DummySound()
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
102 self.sound_cache[path] = sound
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
103 return sound
107
5213b45fcc7e Initial event sound support
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
104
564
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
105 def get_playlist(self, pieces, random=False, repeat=False):
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
106 return albow.music.PlayList(pieces, random, repeat)
534
6df527142e69 PEP-8 sound.py
Jeremy Thurgood <firxen@gmail.com>
parents: 315
diff changeset
107
564
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
108 def get_music(self, name, prefix):
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
109 return albow.music.get_music(name, prefix)
107
5213b45fcc7e Initial event sound support
Neil Muller <neil@dip.sun.ac.za>
parents:
diff changeset
110
564
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
111 def change_playlist(self, new_playlist):
2f7aa3cad77c Sound hackery
Neil Muller <neil@dip.sun.ac.za>
parents: 548
diff changeset
112 albow.music.change_playlist(new_playlist)
154
d2f94f42edf3 Monkey patch albow
Neil Muller <neil@dip.sun.ac.za>
parents: 123
diff changeset
113
565
88cffe418201 Pyflakes sound
Neil Muller <neil@dip.sun.ac.za>
parents: 564
diff changeset
114
154
d2f94f42edf3 Monkey patch albow
Neil Muller <neil@dip.sun.ac.za>
parents: 123
diff changeset
115 def start_next_music():
d2f94f42edf3 Monkey patch albow
Neil Muller <neil@dip.sun.ac.za>
parents: 123
diff changeset
116 """Start playing the next item from the current playlist immediately."""
d2f94f42edf3 Monkey patch albow
Neil Muller <neil@dip.sun.ac.za>
parents: 123
diff changeset
117 if albow.music.music_enabled and albow.music.current_playlist:
d2f94f42edf3 Monkey patch albow
Neil Muller <neil@dip.sun.ac.za>
parents: 123
diff changeset
118 next_music = albow.music.current_playlist.next()
d2f94f42edf3 Monkey patch albow
Neil Muller <neil@dip.sun.ac.za>
parents: 123
diff changeset
119 if next_music:
d2f94f42edf3 Monkey patch albow
Neil Muller <neil@dip.sun.ac.za>
parents: 123
diff changeset
120 #print "albow.music: loading", repr(next_music)
d2f94f42edf3 Monkey patch albow
Neil Muller <neil@dip.sun.ac.za>
parents: 123
diff changeset
121 music.load(next_music)
d2f94f42edf3 Monkey patch albow
Neil Muller <neil@dip.sun.ac.za>
parents: 123
diff changeset
122 music.play()
d2f94f42edf3 Monkey patch albow
Neil Muller <neil@dip.sun.ac.za>
parents: 123
diff changeset
123 albow.music.next_change_delay = albow.music.change_delay
d2f94f42edf3 Monkey patch albow
Neil Muller <neil@dip.sun.ac.za>
parents: 123
diff changeset
124 albow.music.current_music = next_music
d2f94f42edf3 Monkey patch albow
Neil Muller <neil@dip.sun.ac.za>
parents: 123
diff changeset
125
534
6df527142e69 PEP-8 sound.py
Jeremy Thurgood <firxen@gmail.com>
parents: 315
diff changeset
126
315
7b07ffc37ec0 Suspend background sound for bridge computer detail
Neil Muller <neil@dip.sun.ac.za>
parents: 188
diff changeset
127 def get_current_playlist():
7b07ffc37ec0 Suspend background sound for bridge computer detail
Neil Muller <neil@dip.sun.ac.za>
parents: 188
diff changeset
128 if albow.music.music_enabled and albow.music.current_playlist:
7b07ffc37ec0 Suspend background sound for bridge computer detail
Neil Muller <neil@dip.sun.ac.za>
parents: 188
diff changeset
129 return albow.music.current_playlist
7b07ffc37ec0 Suspend background sound for bridge computer detail
Neil Muller <neil@dip.sun.ac.za>
parents: 188
diff changeset
130
154
d2f94f42edf3 Monkey patch albow
Neil Muller <neil@dip.sun.ac.za>
parents: 123
diff changeset
131 # Monkey patch
d2f94f42edf3 Monkey patch albow
Neil Muller <neil@dip.sun.ac.za>
parents: 123
diff changeset
132 albow.music.start_next_music = start_next_music