Mercurial > pyntnclick
diff gamelib/speech.py @ 109:66898d810247
Add hackish speech support (run regen-speech.py to generate files -- needs espeak and oggenc).
author | Simon Cross <simon@simonx> |
---|---|
date | Tue, 24 Aug 2010 14:32:52 +0200 |
parents | |
children | 545dee3bd8e9 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gamelib/speech.py Tue Aug 24 14:32:52 2010 +0200 @@ -0,0 +1,46 @@ +# speech.py +# Copyright Boomslang team, 2010 (see COPYING File) +# Speech playing and cache + +import re + +from sound import get_sound + + +# cache of string -> sound object mappings +_SPEECH_CACHE = {} + +# characters not to allow in filenames +_REPLACE_RE = re.compile(r"[^a-z0-9-]+") + + +class SpeechError(RuntimeError): + pass + + +def get_filename(key, text): + """Simplify text to filename.""" + filename = "%s-%s" % (key, text) + filename = filename.lower() + filename = _REPLACE_RE.sub("_", filename) + filename = filename[:30] + filename = "%s.ogg" % filename + return filename + + +def get_speech(thing_name, text): + """Load a sound object from the cache.""" + key = (thing_name, text) + if key in _SPEECH_CACHE: + return _SPEECH_CACHE[key] + filename = get_filename(thing_name, text) + _SPEECH_CACHE[key] = sound = get_sound("speech", filename) + print filename, sound + return sound + + +def say(thing_name, text): + """Play text as speech.""" + sound = get_speech(thing_name, text) + if sound is not None: + sound.play()