Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAssim <assim@localhost.localdomain>2009-03-30 05:47:13 (GMT)
committer Assim <assim@localhost.localdomain>2009-03-30 05:47:13 (GMT)
commitf10e907e90b7555110d96c74c2d3341d60fd69a0 (patch)
treebbbc48836f3da39453bb8148d4896bd385ac4314
parentbae7e68f664f99d520fda046eea6ca489ea2863f (diff)
speech dispatcher dependency removed
-rwxr-xr-xListenSpell.py67
-rwxr-xr-xMANIFEST2
-rwxr-xr-xactivity/activity.info2
-rw-r--r--dict.dbbin14102528 -> 14102528 bytes
-rwxr-xr-xdist/listen-spell-1.xobin6326808 -> 0 bytes
-rw-r--r--espeak.py70
-rwxr-xr-xlas.py131
-rw-r--r--ls-espeak-config1
-rw-r--r--ls-speechd-config1
9 files changed, 175 insertions, 99 deletions
diff --git a/ListenSpell.py b/ListenSpell.py
index cd94bf0..20dffe3 100755
--- a/ListenSpell.py
+++ b/ListenSpell.py
@@ -29,7 +29,7 @@ class ListenSpell(activity.Activity):
DBname = "dict.db"
self.las.load_db(DBname)
- self.las.load_speechd_config()
+ self.las.load_espeak_config()
self.use_phoneme = False
@@ -131,15 +131,15 @@ class ListenSpell(activity.Activity):
self.change_skill_level_button = gtk.Button("Change Skill Level")
self.change_skill_level_button.connect("clicked", self.change_skill_level_button_clicked, None)
- self.change_speechd_config_button = gtk.Button("Speech Configuration")
- self.change_speechd_config_button.connect("clicked", self.speech_configuration_button_clicked, None)
+ self.change_espeak_config_button = gtk.Button("Speech Configuration")
+ self.change_espeak_config_button.connect("clicked", self.speech_configuration_button_clicked, None)
self.v_buttonbox.add(self.repeat_word_button)
self.v_buttonbox.add(self.get_def_button)
self.v_buttonbox.add(self.get_usage_button)
self.v_buttonbox.add(self.get_word_length_button)
self.v_buttonbox.add(self.change_skill_level_button)
- self.v_buttonbox.add(self.change_speechd_config_button)
+ self.v_buttonbox.add(self.change_espeak_config_button)
self.v_buttonbox.show_all()
@@ -200,11 +200,11 @@ class ListenSpell(activity.Activity):
def _update_configuration(self, widget, attribute ):
if attribute == "voice":
- self.las.speechd_config(attribute, widget.get_active_text())
+ self.las.espeak_config(attribute, widget.get_active_text())
elif(attribute == "skill_level"):
self.las.set_skill_level(int(widget.skill_level))
else:
- self.las.speechd_config(attribute, widget.get_value())
+ self.las.espeak_config(attribute, widget.get_value())
def _speech_test(self, widget, speech_text):
@@ -225,13 +225,17 @@ class ListenSpell(activity.Activity):
self.config_dialog.vbox.pack_start(speech_frame, False, False, 0)
- speech_config = self.las.get_speechd_config().copy()
+ speech_config = self.las.get_espeak_config().copy()
#print "getting config"
- volume_adj = gtk.Adjustment(float(speech_config['volume']), -100, 101, 1, 1, 1)
- rate_adj = gtk.Adjustment(float(speech_config['rate']), -100, 101, 1, 1, 1)
- pitch_adj = gtk.Adjustment(float(speech_config['pitch']), -100, 101, 1, 1, 1)
-
+ #volume_adj = gtk.Adjustment(float(speech_config['volume']), -100, 101, 1, 1, 1)
+ #rate_adj = gtk.Adjustment(float(speech_config['rate']), -100, 101, 1, 1, 1)
+ #pitch_adj = gtk.Adjustment(float(speech_config['pitch']), -100, 101, 1, 1, 1)
+
+ volume_adj = gtk.Adjustment(float(speech_config['volume']), 0, 201, 1, 1, 1)
+ rate_adj = gtk.Adjustment(float(speech_config['rate']), 80, 371, 1, 1, 1)
+ pitch_adj = gtk.Adjustment(float(speech_config['pitch']), 0, 100, 1, 1, 1)
+
volume_hscale = gtk.HScale(volume_adj)
rate_hscale = gtk.HScale(rate_adj)
@@ -246,39 +250,39 @@ class ListenSpell(activity.Activity):
rate_hscale.set_update_policy(gtk.UPDATE_DISCONTINUOUS)
pitch_hscale.set_update_policy(gtk.UPDATE_DISCONTINUOUS)
- voice_box = gtk.combo_box_new_text()
- voice_list = ["MALE1", "MALE2", "MALE3", "FEMALE1", "FEMALE2", "FEMALE3", "CHILD_MALE", "CHILD_FEMALE"]
- #hscale4 = gtk.HScale(adj4)
- for voice in voice_list:
- voice_box.append_text(voice)
+ #voice_box = gtk.combo_box_new_text()
+ #voice_list = ["MALE1", "MALE2", "MALE3", "FEMALE1", "FEMALE2", "FEMALE3", "CHILD_MALE", "CHILD_FEMALE"]
+ ##hscale4 = gtk.HScale(adj4)
+ #for voice in voice_list:
+ #voice_box.append_text(voice)
- try:
- voice_index = voice_list.index(speech_config['voice'])
- except ValueError:
- voice_box.set_active(0)
- else:
- voice_box.set_active(voice_index)
+ #try:
+ #voice_index = voice_list.index(speech_config['voice'])
+ #except ValueError:
+ #voice_box.set_active(0)
+ #else:
+ #voice_box.set_active(voice_index)
volume_label = gtk.Label("Volume")
rate_label = gtk.Label("Rate")
pitch_label = gtk.Label("pitch")
- voice_label = gtk.Label("Voice")
+ #voice_label = gtk.Label("Voice")
volume_adj.connect('value_changed',self._update_configuration, "volume")
rate_adj.connect('value_changed',self._update_configuration, "rate")
pitch_adj.connect('value_changed',self._update_configuration, "pitch")
- voice_box.connect('changed', self._update_configuration, "voice")
+ #voice_box.connect('changed', self._update_configuration, "voice")
config_table.attach(volume_label, 0,1,0,1)
config_table.attach(rate_label, 0,1,1,2)
config_table.attach(pitch_label, 0,1,2,3)
- config_table.attach(voice_label, 0,1,3,4)
+ #config_table.attach(voice_label, 0,1,3,4)
config_table.attach(volume_hscale, 1,2,0,1)
config_table.attach(rate_hscale, 1,2,1,2)
config_table.attach(pitch_hscale, 1,2,2,3)
- config_table.attach(voice_box, 1,2,3,4)
+ #config_table.attach(voice_box, 1,2,3,4)
speech_test_frame = gtk.Frame("Test Speech Setting")
@@ -314,16 +318,11 @@ class ListenSpell(activity.Activity):
elif response == gtk.RESPONSE_CANCEL:
#print "going back"
for k in speech_config:
- #print k + " " + str(previous_speechd_config[k])
- self.las.speechd_config(k, speech_config[k])
+ #print k + " " + str(previous_espeak_config[k])
+ self.las.espeak_config(k, speech_config[k])
self.config_dialog.destroy()
self.text_input.grab_focus()
-
-
-
- def get_speechd_config(self):
- pass
def submit_button_clicked(self, widget, data = None):
answer = self.text_input.get_text()
@@ -409,7 +408,7 @@ class ListenSpell(activity.Activity):
#label.set_use_underline(True)
table.attach(label, 0, 1, 0, 1)
- skill_level_adj = gtk.Adjustment(float(self.las.get_skill_level()), 0,16,1,1,1)
+ skill_level_adj = gtk.Adjustment(float(self.las.get_skill_level()), 1,16,1,1,1)
skill_level_scale = gtk.HScale(skill_level_adj)
skill_level_scale.set_digits(0)
skill_level_scale.set_update_policy(gtk.UPDATE_DISCONTINUOUS)
diff --git a/MANIFEST b/MANIFEST
index f1a29c8..c0a0557 100755
--- a/MANIFEST
+++ b/MANIFEST
@@ -5,7 +5,7 @@ correct.wav
ls.py
setup.py
dict.py
-conv.sh
+espeak.py
incorrect.wav
begin.wav
las.py
diff --git a/activity/activity.info b/activity/activity.info
index b108201..d69d2f5 100755
--- a/activity/activity.info
+++ b/activity/activity.info
@@ -3,5 +3,5 @@ name = listen-spell
service_name = org.laptop.listen-spell
class = ListenSpell.ListenSpell
icon = activity-listen-spell
-activity_version = 1
+activity_version = 2
show_launcher = yes
diff --git a/dict.db b/dict.db
index 99b761c..099a779 100644
--- a/dict.db
+++ b/dict.db
Binary files differ
diff --git a/dist/listen-spell-1.xo b/dist/listen-spell-1.xo
deleted file mode 100755
index a2cbd8f..0000000
--- a/dist/listen-spell-1.xo
+++ /dev/null
Binary files differ
diff --git a/espeak.py b/espeak.py
new file mode 100644
index 0000000..2431602
--- /dev/null
+++ b/espeak.py
@@ -0,0 +1,70 @@
+#!/bin/env python
+import sys
+import os
+import subprocess
+
+#-a <integer>
+#Amplitude, 0 to 200, default is 100
+#-g <integer>
+#Word gap. Pause between words, units of 10mS at the default speed
+#-p <integer>
+#Pitch adjustment, 0 to 99, default is 50
+#-s <integer>
+#Speed in words per minute, 80 to 370, default is 170
+#-v <voice name>
+#Use voice file of this name from espeak-data/voices
+
+class espeak:
+
+ def __init__(self):
+ self.cmd = {}
+ self.cmd['-a'] = 100
+ self.cmd['-g'] = 10
+ self.cmd['-p'] = 50
+ self.cmd['-s'] = 170
+ #cmd['-v'] = ''
+ #call(['cmd', 'arg1', 'arg2'])
+
+
+ def set_amplitude(self,amp):
+ self.cmd['-a'] = int(amp)
+ def set_word_gap(self,gap):
+ self.cmd['-g'] = int(gap)
+ def set_pitch(self,pitch):
+ self.cmd['-p'] = int(pitch)
+ def set_speed(self,speed):
+ self.cmd['-s'] = int(speed)
+ def set_voice(self,voice):
+ self.cmd['-v'] = str(voice)
+
+ def get_amplitude(self):
+ return self.cmd['-a']
+ def get_word_gap(self):
+ return self.cmd['-g']
+ def get_pitch(self):
+ return self.cmd['-p']
+ def get_speed(self):
+ return self.cmd['-s']
+ def get_voice(self):
+ return self.cmd['-v']
+
+ def speak(self,word):
+ #cmd = "espeak"
+ args = ['espeak']
+ i = 0
+ #cmd3 = "espeak "
+ for k in self.cmd.keys():
+ #cmd3 = cmd3 + str(k) + ' ' + str(self.cmd[k]) + ' '
+ args.append(str(k) + ' ' + str(self.cmd[k]))
+ #cmd3 = cmd3 + "'" + word + "'"
+ args.append(word)
+ #args[i] = word
+ #print cmd3
+ #os.execlp(cmd3)
+ subprocess.call(args)
+
+if __name__ == "__main__":
+
+ k = espeak()
+ k.speak("hello")
+ k.speak("world") \ No newline at end of file
diff --git a/las.py b/las.py
index 04bf17e..1eece34 100755
--- a/las.py
+++ b/las.py
@@ -4,7 +4,8 @@ import os
import dbus
import random
import time
-import speechd
+import espeak
+from espeak import espeak
import commands
import simplejson
#import csnd
@@ -52,12 +53,14 @@ class Listenspell():
self.points = 0
self.words_played = 0
self.words_correct = 0
- self.config_file = 'ls-speechd-config'
+ self.config_file = 'ls-espeak-config'
self.path = "."
- self.speechd_init = False
- self.__speechd_default_config = {'pitch':0, 'rate':0, 'language':'en', 'volume':100, 'voice':'MALE1',
- 'spelling':False, 'punctuation':speechd.PunctuationMode.SOME }
- self.__speechd_config = self.__speechd_default_config
+ self.espeak_init = False
+ self.espeak_obj = espeak()
+ #self.__espeak_default_config = {'pitch':0, 'rate':0, 'language':'en', 'volume':100, 'voice':'MALE1',
+ #'spelling':False, 'punctuation':espeak.PunctuationMode.SOME }
+ self.__espeak_default_config = {'pitch':0, 'rate':0, 'language':'en', 'volume':100}
+ self.__espeak_config = self.__espeak_default_config
def load_db(self, SQLiteDB):
if self.path == ".":
@@ -160,116 +163,120 @@ class Listenspell():
return phnm
- def get_speechd_config(self, default =0):
+ def get_espeak_config(self, default =0):
if default == 1:
- return self.__speechd_default_config
+ return self.__espeak_default_config
else:
- return self.__speechd_config
+ return self.__espeak_config
- def load_speechd_config(self):
+ def load_espeak_config(self):
try:
fp = open(self.path + self.config_file)
except IOError:
#File doesn't exist, create it and write default config
fp = open(self.path + self.config_file, 'w', 0)
- speech_config = self.get_speechd_config(1)
+ speech_config = self.get_espeak_config(1)
simplejson.dump(speech_config, fp)
else:
speech_config = simplejson.load(fp)
for attr in speech_config:
- self.speechd_config(attr, speech_config[attr])
+ self.espeak_config(attr, speech_config[attr])
fp.close()
return speech_config
- def __start_speechd(self):
- try:
- self.client = speechd.SSIPClient('spd-test')
- self.client.set_output_module('espeak')
- self.client.set_language('en')
- self.client.set_punctuation(speechd.PunctuationMode.SOME)
- self.speech_state = None
- except dbus.exceptions.DBusException:
- print "Speech Dispatcher is not turned on."
- return False
- self.speechd_init = True
+ #def __start_espeak(self):
+ #try:
+ #self.client = espeak.SSIPClient('spd-test')
+ #self.client.set_output_module('espeak')
+ #self.client.set_language('en')
+ #self.client.set_punctuation(espeak.PunctuationMode.SOME)
+ #self.speech_state = None
+ #except dbus.exceptions.DBusException:
+ #print "Speech Dispatcher is not turned on."
+ #return False
+ #self.espeak_init = True
- def __set_speechd_config(self, attribute = None, value = None, mode = 'one', config_obj = None):
+ def __set_espeak_config(self, attribute = None, value = None, mode = 'one', config_obj = None):
if mode == 'one':
if attribute == None or value == None:
return False
#print attribute + ":" + str(value)
- self.__speechd_config[attribute] = value
+ self.__espeak_config[attribute] = value
fp = open(self.path + self.config_file, 'w', 0)
- simplejson.dump(self.__speechd_config, fp)
+ simplejson.dump(self.__espeak_config, fp)
fp.close()
elif mode == 'all':
if config_obj == None:
return False
fp = open(self.path + self.config_file, 'w', 0)
- self.__speechd_config = config_obj
- simplejson.dump(self.__speechd_config, fp)
+ self.__espeak_config = config_obj
+ simplejson.dump(self.__espeak_config, fp)
fp.close()
- def speechd_config(self, attribute = None, data = None):
+ def espeak_config(self, attribute = None, data = None):
if attribute == None or data == None:
return False
- if self.speechd_init == False:
- if self.__start_speechd() == False:
- return False
+ #if self.espeakinit == False:
+ #if self.__start_espeak() == False:
+ #return False
attribute_list = ['pitch', 'rate', 'volume', 'voice', 'output_module',
'language', 'punctuation', 'spelling', 'synthesis_voice']
if attribute in attribute_list:
try:
- self.__set_speechd_config(attribute, data)
+ self.__set_espeak_config(attribute, data)
if attribute == "pitch":
- self.client.set_pitch(int(data)) #-100 to 100
+ self.espeak_obj.set_pitch(int(data)) # 0 to 99
+ #self.client.set_pitch(int(data)) #-100 to 100
elif attribute == "rate":
- self.client.set_rate(int(data)) # -100 to 100
+ self.espeak_obj.set_speed(int(data)) # 80 to 370
+ #self.client.set_rate(int(data)) # -100 to 100
elif attribute == "volume":
- self.client.set_volume(int(data))#-100 to 100
- elif attribute == "voice":
- self.client.set_voice(str(data))#(FE)MALE(1,2,3), CHILD_(FE)MALE
- elif attribute == "output_module":
- self.client.set_output_module(str(data))
- elif attribute == "language":
- self.client.set_language(str(data))
- elif attribute == "punctuation":
- self.client.set_punctuation(data)
- elif attribute == "spelling":
- self.client.set_spelling(bool(data)) # True or False
- elif attribute == "synthesis_voice":
- self.client.set_synthesis_voice(str(data))#self.client.list_synthesis_voices()
+ self.espeak_obj.set_amplitude(int(data)) # 0 to 200
+ #self.client.set_volume(int(data)) #-100 to 100
+ #elif attribute == "voice":
+ #self.client.set_voice(str(data))#(FE)MALE(1,2,3), CHILD_(FE)MALE
+ #elif attribute == "output_module":
+ #self.client.set_output_module(str(data))
+ #elif attribute == "language":
+ #self.client.set_language(str(data))
+ #elif attribute == "punctuation":
+ #self.client.set_punctuation(data)
+ #elif attribute == "spelling":
+ #self.client.set_spelling(bool(data)) # True or False
+ #elif attribute == "synthesis_voice":
+ #self.client.set_synthesis_voice(str(data))#self.client.list_synthesis_voices()
except AssertionError, e:
print "Assertion Error: " + str(e) + ":" + str(attribute) + ":" + str(data)
return False
else: return False
- def __speechd_callback(self,callback_type):
- self.speech_state = callback_type
+ #def __espeak_callback(self,callback_type):
+ #self.speech_state = callback_type
def say_text(self, text, wait= True):
#wait: to wait for the text to be spoken or not
#os.popen("espeak " + text)
- if self.speechd_init == False:
- if self.__start_speechd() == False:
- return False
+ #if self.espeak_init == False:
+ #if self.__start_espeak() == False:
+ #return False
text = str(text)
- self.speech_state = None
-
- self.client.speak(text, callback=self.__speechd_callback,event_types=(speechd.CallbackType.BEGIN,
- speechd.CallbackType.CANCEL,
- speechd.CallbackType.END))
- if wait == True:
- while(self.speech_state != "end"):
- time.sleep(1)
+ #self.speech_state = None
+ self.espeak_obj.speak(text)
+ #self.client.speak(text, callback=self.__espeak_callback,event_types=(espeak.CallbackType.BEGIN,
+ #espeak.CallbackType.CANCEL,
+ #espeakCallbackType.END))
+ #if wait == True:
+ #i = len(text)
+ ##while(self.speech_state != "end"):
+ #time.sleep(i)
@@ -286,5 +293,5 @@ class Listenspell():
self.word_obj.exit_game()
self.dict_obj.exit_game()
self.say_text("goodbye")
- self.client.close()
+ #self.client.close()
sys.exit()
diff --git a/ls-espeak-config b/ls-espeak-config
new file mode 100644
index 0000000..52fb6be
--- /dev/null
+++ b/ls-espeak-config
@@ -0,0 +1 @@
+{"volume": 100, "rate": 170.0, "language": "en", "pitch": 50.0} \ No newline at end of file
diff --git a/ls-speechd-config b/ls-speechd-config
deleted file mode 100644
index 079b966..0000000
--- a/ls-speechd-config
+++ /dev/null
@@ -1 +0,0 @@
-{"language": "en", "punctuation": "some", "volume": 100.0, "rate": 3.0, "pitch": -25.0, "spelling": false, "voice": "MALE1"} \ No newline at end of file