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()