annotate pyntnclick/speech.py @ 854:3577c51029f1 default tip

Remove Suspended Sentence. pyntnclick is the library we extracted from it
author Stefano Rivera <stefano@rivera.za.net>
date Sat, 21 Jun 2014 22:15:54 +0200
parents 38fb04728ac5
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
551
38fb04728ac5 Rearrange import.
Jeremy Thurgood <firxen@gmail.com>
parents: 548
diff changeset
7 from pyntnclick.sound import get_sound
109
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()