diff options
Diffstat (limited to 'Speak.activity/voice.py')
-rw-r--r-- | Speak.activity/voice.py | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/Speak.activity/voice.py b/Speak.activity/voice.py index 9727fb0..256bbf0 100644 --- a/Speak.activity/voice.py +++ b/Speak.activity/voice.py @@ -22,6 +22,7 @@ # along with Speak.activity. If not, see <http://www.gnu.org/licenses/>. +import subprocess import pygst pygst.require("0.10") import gst @@ -84,16 +85,29 @@ class Voice: def allVoices(): if len(_allVoices) == 0: - for i in gst.element_factory_make('espeak').props.voices: - name, language = i.split(':') - if name in ('en-rhotic','english_rp','english_wmids'): - # these voices don't produce sound - continue - voice = Voice(language, name) - _allVoices[voice.friendlyname] = voice - + try: + for i in gst.element_factory_make('espeak').props.voices: + name, language = i.split(':') + if name in ('en-rhotic','english_rp','english_wmids'): + # these voices don't produce sound + continue + voice = Voice(language, name) + _allVoices[voice.friendlyname] = voice + except: + result = subprocess.Popen(["espeak", "--voices"], stdout=subprocess.PIPE).communicate()[0] + for line in result.split('\n'): + m = re.match(r'\s*\d+\s+([\w-]+)\s+([MF])\s+([\w_-]+)\s+(.+)', line) + if m: + language, gender, name, stuff = m.groups() + if stuff.startswith('mb/') or name in ('en-rhotic','english_rp','english_wmids'): + # these voices don't produce sound + continue + voice = Voice(language, name) + _allVoices[voice.friendlyname] = voice return _allVoices + + def defaultVoice(): """Try to figure out the default voice, from the current locale ($LANG). Fall back to espeak's voice called Default.""" |