Mercurial > nagslang
annotate nagslang/sound.py @ 667:1ffd49c34f4a v0.1.x
Backed out changeset a538d791ff9c - should have been on default, not v0.1.x
author | Neil Muller <drnlmuller@gmail.com> |
---|---|
date | Sun, 08 Sep 2013 12:56:56 +0200 |
parents | a538d791ff9c |
children |
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 |
598 | 7 from nagslang.constants import ( |
8 FREQ, BITSIZE, CHANNELS, BUFFER, DEFAULT_SOUND_VOLUME, | |
9 DEFAULT_MUSIC_VOLUME) | |
269
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
10 |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
11 |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
12 class DummySound(object): |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
13 def init(self): |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
14 pass |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
15 |
598 | 16 def play_sound(self, name, volume=DEFAULT_SOUND_VOLUME): |
269
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
17 pass |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
18 |
598 | 19 def play_music(self, name, volume=DEFAULT_MUSIC_VOLUME): |
269
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
20 pass |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
21 |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
22 def pause_music(self): |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
23 pass |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
24 |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
25 def resume_music(self): |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
26 pass |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
27 |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
28 def stop(self): |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
29 pass |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
30 |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
31 |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
32 class PygameSound(object): |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
33 def __init__(self): |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
34 self._sounds = {} |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
35 |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
36 def init(self): |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
37 mixer.init(FREQ, BITSIZE, CHANNELS, BUFFER) |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
38 self.play_sound("silence.ogg") |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
39 |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
40 def load_sound(self, name): |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
41 track_name = resources.get_resource_path("sounds", name) |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
42 sound = self._sounds.get(track_name) |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
43 if sound is None: |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
44 sound = self._sounds[track_name] = mixer.Sound(track_name) |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
45 return sound |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
46 |
598 | 47 def play_sound(self, name, volume=DEFAULT_SOUND_VOLUME): |
269
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
48 sound = self.load_sound(name) |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
49 if sound is not None: |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
50 sound.set_volume(volume) |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
51 sound.play() |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
52 |
598 | 53 def play_music(self, name, volume=DEFAULT_MUSIC_VOLUME): |
292 | 54 if not options.music: |
55 return | |
269
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
56 track_name = resources.get_resource_path("music", name) |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
57 mixer.music.load(track_name) |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
58 mixer.music.set_volume(volume) |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
59 mixer.music.play(-1) # loop sound |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
60 |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
61 def pause_music(self): |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
62 mixer.music.pause() |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
63 |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
64 def unpause_music(self): |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
65 mixer.music.unpause() |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
66 |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
67 def stop(self): |
591 | 68 mixer.fadeout(1000) |
269
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
69 mixer.music.stop() |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
70 |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
71 |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
72 class SoundProxy(object): |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
73 def __init__(self): |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
74 self._sound = DummySound() |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
75 |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
76 def init(self): |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
77 """Attempt to initialize the sound system.""" |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
78 if options.sound: |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
79 try: |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
80 pyg_sound = PygameSound() |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
81 pyg_sound.init() |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
82 self._sound = pyg_sound |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
83 except Exception, err: |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
84 print "Failed to enable sound: %r" % (err,) |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
85 |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
86 def __getattr__(self, name): |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
87 return getattr(self._sound, name) |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
88 |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
89 |
9fcdb106424a
Add first draft of sound support.
Simon Cross <hodgestar@gmail.com>
parents:
diff
changeset
|
90 sound = SoundProxy() |