Mercurial > boomslang
annotate gamelib/speech.py @ 370:8936c043d7a1
Fix bliken lights description
author | Neil Muller <neil@dip.sun.ac.za> |
---|---|
date | Sat, 28 Aug 2010 17:39:00 +0200 |
parents | a2c09200a433 |
children |
rev | line source |
---|---|
109
66898d810247
Add hackish speech support (run regen-speech.py to generate files -- needs espeak and oggenc).
Simon Cross <simon@simonx>
parents:
diff
changeset
|
1 # speech.py |
66898d810247
Add hackish speech support (run regen-speech.py to generate files -- needs espeak and oggenc).
Simon Cross <simon@simonx>
parents:
diff
changeset
|
2 # Copyright Boomslang team, 2010 (see COPYING File) |
66898d810247
Add hackish speech support (run regen-speech.py to generate files -- needs espeak and oggenc).
Simon Cross <simon@simonx>
parents:
diff
changeset
|
3 # Speech playing and cache |
66898d810247
Add hackish speech support (run regen-speech.py to generate files -- needs espeak and oggenc).
Simon Cross <simon@simonx>
parents:
diff
changeset
|
4 |
66898d810247
Add hackish speech support (run regen-speech.py to generate files -- needs espeak and oggenc).
Simon Cross <simon@simonx>
parents:
diff
changeset
|
5 import re |
66898d810247
Add hackish speech support (run regen-speech.py to generate files -- needs espeak and oggenc).
Simon Cross <simon@simonx>
parents:
diff
changeset
|
6 |
66898d810247
Add hackish speech support (run regen-speech.py to generate files -- needs espeak and oggenc).
Simon Cross <simon@simonx>
parents:
diff
changeset
|
7 from sound import get_sound |
66898d810247
Add hackish speech support (run regen-speech.py to generate files -- needs espeak and oggenc).
Simon Cross <simon@simonx>
parents:
diff
changeset
|
8 |
66898d810247
Add hackish speech support (run regen-speech.py to generate files -- needs espeak and oggenc).
Simon Cross <simon@simonx>
parents:
diff
changeset
|
9 |
66898d810247
Add hackish speech support (run regen-speech.py to generate files -- needs espeak and oggenc).
Simon Cross <simon@simonx>
parents:
diff
changeset
|
10 # cache of string -> sound object mappings |
66898d810247
Add hackish speech support (run regen-speech.py to generate files -- needs espeak and oggenc).
Simon Cross <simon@simonx>
parents:
diff
changeset
|
11 _SPEECH_CACHE = {} |
66898d810247
Add hackish speech support (run regen-speech.py to generate files -- needs espeak and oggenc).
Simon Cross <simon@simonx>
parents:
diff
changeset
|
12 |
66898d810247
Add hackish speech support (run regen-speech.py to generate files -- needs espeak and oggenc).
Simon Cross <simon@simonx>
parents:
diff
changeset
|
13 # characters not to allow in filenames |
66898d810247
Add hackish speech support (run regen-speech.py to generate files -- needs espeak and oggenc).
Simon Cross <simon@simonx>
parents:
diff
changeset
|
14 _REPLACE_RE = re.compile(r"[^a-z0-9-]+") |
66898d810247
Add hackish speech support (run regen-speech.py to generate files -- needs espeak and oggenc).
Simon Cross <simon@simonx>
parents:
diff
changeset
|
15 |
66898d810247
Add hackish speech support (run regen-speech.py to generate files -- needs espeak and oggenc).
Simon Cross <simon@simonx>
parents:
diff
changeset
|
16 |
66898d810247
Add hackish speech support (run regen-speech.py to generate files -- needs espeak and oggenc).
Simon Cross <simon@simonx>
parents:
diff
changeset
|
17 class SpeechError(RuntimeError): |
66898d810247
Add hackish speech support (run regen-speech.py to generate files -- needs espeak and oggenc).
Simon Cross <simon@simonx>
parents:
diff
changeset
|
18 pass |
66898d810247
Add hackish speech support (run regen-speech.py to generate files -- needs espeak and oggenc).
Simon Cross <simon@simonx>
parents:
diff
changeset
|
19 |
66898d810247
Add hackish speech support (run regen-speech.py to generate files -- needs espeak and oggenc).
Simon Cross <simon@simonx>
parents:
diff
changeset
|
20 |
66898d810247
Add hackish speech support (run regen-speech.py to generate files -- needs espeak and oggenc).
Simon Cross <simon@simonx>
parents:
diff
changeset
|
21 def get_filename(key, text): |
66898d810247
Add hackish speech support (run regen-speech.py to generate files -- needs espeak and oggenc).
Simon Cross <simon@simonx>
parents:
diff
changeset
|
22 """Simplify text to filename.""" |
66898d810247
Add hackish speech support (run regen-speech.py to generate files -- needs espeak and oggenc).
Simon Cross <simon@simonx>
parents:
diff
changeset
|
23 filename = "%s-%s" % (key, text) |
66898d810247
Add hackish speech support (run regen-speech.py to generate files -- needs espeak and oggenc).
Simon Cross <simon@simonx>
parents:
diff
changeset
|
24 filename = filename.lower() |
66898d810247
Add hackish speech support (run regen-speech.py to generate files -- needs espeak and oggenc).
Simon Cross <simon@simonx>
parents:
diff
changeset
|
25 filename = _REPLACE_RE.sub("_", filename) |
66898d810247
Add hackish speech support (run regen-speech.py to generate files -- needs espeak and oggenc).
Simon Cross <simon@simonx>
parents:
diff
changeset
|
26 filename = filename[:30] |
66898d810247
Add hackish speech support (run regen-speech.py to generate files -- needs espeak and oggenc).
Simon Cross <simon@simonx>
parents:
diff
changeset
|
27 filename = "%s.ogg" % filename |
66898d810247
Add hackish speech support (run regen-speech.py to generate files -- needs espeak and oggenc).
Simon Cross <simon@simonx>
parents:
diff
changeset
|
28 return filename |
66898d810247
Add hackish speech support (run regen-speech.py to generate files -- needs espeak and oggenc).
Simon Cross <simon@simonx>
parents:
diff
changeset
|
29 |
66898d810247
Add hackish speech support (run regen-speech.py to generate files -- needs espeak and oggenc).
Simon Cross <simon@simonx>
parents:
diff
changeset
|
30 |
66898d810247
Add hackish speech support (run regen-speech.py to generate files -- needs espeak and oggenc).
Simon Cross <simon@simonx>
parents:
diff
changeset
|
31 def get_speech(thing_name, text): |
66898d810247
Add hackish speech support (run regen-speech.py to generate files -- needs espeak and oggenc).
Simon Cross <simon@simonx>
parents:
diff
changeset
|
32 """Load a sound object from the cache.""" |
66898d810247
Add hackish speech support (run regen-speech.py to generate files -- needs espeak and oggenc).
Simon Cross <simon@simonx>
parents:
diff
changeset
|
33 key = (thing_name, text) |
66898d810247
Add hackish speech support (run regen-speech.py to generate files -- needs espeak and oggenc).
Simon Cross <simon@simonx>
parents:
diff
changeset
|
34 if key in _SPEECH_CACHE: |
66898d810247
Add hackish speech support (run regen-speech.py to generate files -- needs espeak and oggenc).
Simon Cross <simon@simonx>
parents:
diff
changeset
|
35 return _SPEECH_CACHE[key] |
66898d810247
Add hackish speech support (run regen-speech.py to generate files -- needs espeak and oggenc).
Simon Cross <simon@simonx>
parents:
diff
changeset
|
36 filename = get_filename(thing_name, text) |
66898d810247
Add hackish speech support (run regen-speech.py to generate files -- needs espeak and oggenc).
Simon Cross <simon@simonx>
parents:
diff
changeset
|
37 _SPEECH_CACHE[key] = sound = get_sound("speech", filename) |
66898d810247
Add hackish speech support (run regen-speech.py to generate files -- needs espeak and oggenc).
Simon Cross <simon@simonx>
parents:
diff
changeset
|
38 return sound |
66898d810247
Add hackish speech support (run regen-speech.py to generate files -- needs espeak and oggenc).
Simon Cross <simon@simonx>
parents:
diff
changeset
|
39 |
66898d810247
Add hackish speech support (run regen-speech.py to generate files -- needs espeak and oggenc).
Simon Cross <simon@simonx>
parents:
diff
changeset
|
40 |
66898d810247
Add hackish speech support (run regen-speech.py to generate files -- needs espeak and oggenc).
Simon Cross <simon@simonx>
parents:
diff
changeset
|
41 def say(thing_name, text): |
66898d810247
Add hackish speech support (run regen-speech.py to generate files -- needs espeak and oggenc).
Simon Cross <simon@simonx>
parents:
diff
changeset
|
42 """Play text as speech.""" |
66898d810247
Add hackish speech support (run regen-speech.py to generate files -- needs espeak and oggenc).
Simon Cross <simon@simonx>
parents:
diff
changeset
|
43 sound = get_speech(thing_name, text) |
112
a2c09200a433
Remove check for None sound -- sound is never None.
Simon Cross <simon@simonx>
parents:
110
diff
changeset
|
44 sound.play() |