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
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
598
e65d59081bdd Quieter sound.
Simon Cross <hodgestar@gmail.com>
parents: 591
diff changeset
7 from nagslang.constants import (
e65d59081bdd Quieter sound.
Simon Cross <hodgestar@gmail.com>
parents: 591
diff changeset
8 FREQ, BITSIZE, CHANNELS, BUFFER, DEFAULT_SOUND_VOLUME,
e65d59081bdd Quieter sound.
Simon Cross <hodgestar@gmail.com>
parents: 591
diff changeset
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
e65d59081bdd Quieter sound.
Simon Cross <hodgestar@gmail.com>
parents: 591
diff changeset
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
e65d59081bdd Quieter sound.
Simon Cross <hodgestar@gmail.com>
parents: 591
diff changeset
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
e65d59081bdd Quieter sound.
Simon Cross <hodgestar@gmail.com>
parents: 591
diff changeset
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
e65d59081bdd Quieter sound.
Simon Cross <hodgestar@gmail.com>
parents: 591
diff changeset
53 def play_music(self, name, volume=DEFAULT_MUSIC_VOLUME):
292
7b121ed73b95 --no-music flag.
Jeremy Thurgood <firxen@gmail.com>
parents: 269
diff changeset
54 if not options.music:
7b121ed73b95 --no-music flag.
Jeremy Thurgood <firxen@gmail.com>
parents: 269
diff changeset
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
8dcf5176ffd8 Door sound.
Jeremy Thurgood <firxen@gmail.com>
parents: 292
diff changeset
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()