Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/voice.py
diff options
context:
space:
mode:
Diffstat (limited to 'voice.py')
-rw-r--r--voice.py63
1 files changed, 33 insertions, 30 deletions
diff --git a/voice.py b/voice.py
index 7997354..bddca1b 100644
--- a/voice.py
+++ b/voice.py
@@ -7,12 +7,12 @@
#
# Parts of Speak.activity are based on code from Measure.activity
# Copyright (C) 2007 Arjun Sarwal - arjun@laptop.org
-#
+#
# Speak.activity is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
-#
+#
# Speak.activity is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
@@ -21,7 +21,7 @@
# You should have received a copy of the GNU General Public License
# along with Speak.activity. If not, see <http://www.gnu.org/licenses/>.
-import re
+import re
import os
from gettext import gettext as _
@@ -30,8 +30,10 @@ logger = logging.getLogger('speak')
import espeak
-# Lets trick gettext into generating entries for the voice names we expect espeak to have
-# If espeak actually has new or different names then they won't get translated, but they
+# Lets trick gettext into generating entries
+# for the voice names we expect espeak to have
+# If espeak actually has new or different names
+# then they won't get translated, but they
# should still show up in the interface.
expectedVoiceNames = [
_("Brazil"),
@@ -72,43 +74,42 @@ expectedVoiceNames = [
_allVoices = {}
_defaultVoice = None
+
class Voice:
def __init__(self, language, name):
self.language = language
self.name = name
friendlyname = name
- friendlyname = friendlyname.replace('-test','')
- friendlyname = friendlyname.replace('_test','')
- friendlyname = friendlyname.replace('en-','')
- friendlyname = friendlyname.replace('english-wisper','whisper')
+ friendlyname = friendlyname.replace('-test', '')
+ friendlyname = friendlyname.replace('_test', '')
+ friendlyname = friendlyname.replace('en-', '')
+ friendlyname = friendlyname.replace('english-wisper', 'whisper')
friendlyname = friendlyname.replace('english-us', 'us')
-
- friendlynameRP = name # friendlyname for RP
+ friendlynameRP = name # friendlyname for RP
friendlynameRP = friendlynameRP.replace('english_rp', 'rp')
friendlynameRP = friendlynameRP.replace('english_wmids', 'wmids')
parts = re.split('[ _-]', friendlyname)
- partsRP = re.split('[ _]', friendlynameRP) #RE for english_RP
+ partsRP = re.split('[ _]', friendlynameRP) # RE for english_RP
self.short_name = _(parts[0].capitalize())
self.friendlyname = ' '.join([self.short_name] + parts[1:])
-
- friendlynameRP1 = None
+
+ friendlynameRP1 = None
if friendlynameRP == 'rp':
-
+
friendlynameRP1 = 'English (Received Pronunciation)'
self.friendlyname = 'English (Received Pronunciation)'
-
+
friendlynameUS = None
if friendlyname == 'us':
friendlynameUS = 'English (USA)'
self.friendlyname = 'English (USA)'
-
+
friendlynameWMIDS = None
if friendlynameRP == 'wmids':
friendlynameWMIDS = 'English (West Midlands)'
- self.friendlyname = 'English (West Midlands)'
-
+ self.friendlyname = 'English (West Midlands)'
def __cmp__(self, other):
return cmp(self.friendlyname, other.friendlyname if other else '')
@@ -121,14 +122,14 @@ def allVoices():
for language, name in espeak.voices():
voice = Voice(language, name)
_allVoices[voice.friendlyname] = voice
-
+
return _allVoices
def by_name(name):
return allVoices().get(name, defaultVoice())
-
+
def defaultVoice():
"""Try to figure out the default voice, from the current locale ($LANG).
Fall back to espeak's voice called Default."""
@@ -140,11 +141,11 @@ def defaultVoice():
voices = allVoices()
- def fit(a,b):
+ def fit(a, b):
"Compare two language ids to see if they are similar."
- as_ = re.split(r'[^a-z]+', a.lower())
- bs = re.split(r'[^a-z]+', b.lower())
- for count in range(0, min(len(as_),len(bs))):
+ as_ = re.split(r'[^a-z]+', a.lower())
+ bs = re.split(r'[^a-z]+', b.lower())
+ for count in range(0, min(len(as_), len(bs))):
if as_[count] != bs[count]:
count -= 1
break
@@ -157,14 +158,16 @@ def defaultVoice():
best = voices[_("Default")]
for voice in voices.values():
voiceMetric = fit(voice.language, lang)
- bestMetric = fit(best.language, lang)
- if lang=='en_AU.UTF-8':
- if voice.friendlyname=='English (Received Pronunciation)':
+ bestMetric = fit(best.language, lang)
+ if lang == 'en_AU.UTF-8':
+ if voice.friendlyname == 'English (Received Pronunciation)':
best = voice
break
if voiceMetric > bestMetric:
best = voice
- print "Best voice for LANG %s seems to be %s %s" % (lang, best.language, best.friendlyname)
- _defaultVoice = best
+ print "Best voice for LANG %s seems to be %s %s" % (lang,
+ best.language,
+ best.friendlyname)
+ _defaultVoice = best
return best