Mercurial > nagslang
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 |
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 | 52 if not options.music: |
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() |