annotate nagslang/sound.py @ 547:39fa88b48531

Please wear goggles at all times while swimming.
author Simon Cross <hodgestar@gmail.com>
date Sat, 07 Sep 2013 21:46:48 +0200
parents 7b121ed73b95
children 8dcf5176ffd8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
269
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
1 """Sound utilities."""
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
2
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
3 from pygame import mixer
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
4
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
5 from nagslang.options import options
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
6 from nagslang.resources import resources
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
7 from nagslang.constants import FREQ, BITSIZE, CHANNELS, BUFFER
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
8
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
9
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
10 class DummySound(object):
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
11 def init(self):
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
12 pass
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
13
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
14 def play_sound(self, name, volume=None):
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
15 pass
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
16
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
17 def play_music(self, name, volume=None):
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
18 pass
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
19
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
20 def pause_music(self):
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
21 pass
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
22
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
23 def resume_music(self):
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
24 pass
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
25
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
26 def stop(self):
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
27 pass
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
28
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
29
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
30 class PygameSound(object):
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
31 def __init__(self):
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
32 self._sounds = {}
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
33
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
34 def init(self):
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
35 mixer.init(FREQ, BITSIZE, CHANNELS, BUFFER)
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
36 self.play_sound("silence.ogg")
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
37
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
38 def load_sound(self, name):
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
39 track_name = resources.get_resource_path("sounds", name)
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
40 sound = self._sounds.get(track_name)
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
41 if sound is None:
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
42 sound = self._sounds[track_name] = mixer.Sound(track_name)
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
43 return sound
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
44
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
45 def play_sound(self, name, volume=1.0):
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
46 sound = self.load_sound(name)
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
47 if sound is not None:
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
48 sound.set_volume(volume)
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
49 sound.play()
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
50
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
51 def play_music(self, name, volume=1.0):
292
7b121ed73b95 --no-music flag.
Jeremy Thurgood <firxen@gmail.com>
parents: 269
diff changeset
52 if not options.music:
7b121ed73b95 --no-music flag.
Jeremy Thurgood <firxen@gmail.com>
parents: 269
diff changeset
53 return
269
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
54 track_name = resources.get_resource_path("music", name)
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
55 mixer.music.load(track_name)
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
56 mixer.music.set_volume(volume)
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
57 mixer.music.play(-1) # loop sound
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
58
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
59 def pause_music(self):
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
60 mixer.music.pause()
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
61
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
62 def unpause_music(self):
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
63 mixer.music.unpause()
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
64
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
65 def stop(self):
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
66 mixer.stop()
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
67 mixer.music.stop()
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
68
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
69
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
70 class SoundProxy(object):
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
71 def __init__(self):
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
72 self._sound = DummySound()
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
73
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
74 def init(self):
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
75 """Attempt to initialize the sound system."""
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
76 if options.sound:
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
77 try:
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
78 pyg_sound = PygameSound()
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
79 pyg_sound.init()
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
80 self._sound = pyg_sound
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
81 except Exception, err:
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
82 print "Failed to enable sound: %r" % (err,)
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
83
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
84 def __getattr__(self, name):
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
85 return getattr(self._sound, name)
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
86
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
87
9fcdb106424a Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
88 sound = SoundProxy()