diff options
Diffstat (limited to 'Speak.activity/activity.py')
-rwxr-xr-x | Speak.activity/activity.py | 61 |
1 files changed, 30 insertions, 31 deletions
diff --git a/Speak.activity/activity.py b/Speak.activity/activity.py index 7eaf401..44925bf 100755 --- a/Speak.activity/activity.py +++ b/Speak.activity/activity.py @@ -22,6 +22,7 @@ # along with Speak.activity. If not, see <http://www.gnu.org/licenses/>. +import aiml import sys import os from urllib import (quote, unquote) @@ -36,6 +37,9 @@ import gobject import pango from gettext import gettext as _ +k=aiml.Kernel() +k.loadBrain("cerebro.brn") + # try: # sys.path.append('/usr/lib/python2.4/site-packages') # for speechd # import speechd.client @@ -58,7 +62,7 @@ import fft_mouth import waveform_mouth import voice -class SpeakActivity(activity.Activity): +class HablarConSaraActivity(activity.Activity): def __init__(self, handle): activity.Activity.__init__(self, handle) @@ -84,6 +88,7 @@ class SpeakActivity(activity.Activity): self.voice = voice.defaultVoice() # make an audio device for playing back and rendering audio + self.active = False self.connect( "notify::active", self._activeCb ) self.audio = audio.AudioGrab(datastore, self._jobject) @@ -164,28 +169,15 @@ class SpeakActivity(activity.Activity): # return True # gobject.timeout_add(100, poll_mouse) + # start with the eyes straight ahead + map(lambda e: e.look_ahead(), self.eyes) + # say hello to the user + self.active = True presenceService = presenceservice.get_instance() xoOwner = presenceService.get_owner() self.say(_("Hello %s. Type something.") % xoOwner.props.nick) - # XXX do it after(possible) read_file() invoking - # have to rely on calling read_file() from map_cb in sugar-toolkit - self.connect_after('map', self.connect_to) - - def connect_to(self, widget): - self.voice_combo.connect('changed', self.voice_changed_cb) - self.pitchadj.connect("value_changed", self.pitch_adjusted_cb, self.pitchadj) - self.rateadj.connect("value_changed", self.rate_adjusted_cb, self.rateadj) - self.mouth_shape_combo.connect('changed', self.mouth_changed_cb, False) - self.mouth_changed_cb(self.mouth_shape_combo, True) - self.numeyesadj.connect("value_changed", self.eyes_changed_cb, False) - self.eye_shape_combo.connect('changed', self.eyes_changed_cb, False) - self.eyes_changed_cb(None, True) - - # start with the eyes straight ahead - map(lambda e: e.look_ahead(), self.eyes) - def write_file(self, file_path): f = open(file_path, "w") f.write("speak file format v1\n") @@ -291,6 +283,7 @@ class SpeakActivity(activity.Activity): # button.show() self.voice_combo = ComboBox() + self.voice_combo.connect('changed', self.voice_changed_cb) voicenames = self.voices.keys() voicenames.sort() for name in voicenames: @@ -305,7 +298,8 @@ class SpeakActivity(activity.Activity): self.pitchadj = gtk.Adjustment(0, -100, 100, 1, 10, 0) else: # espeak uses 0 to 99 - self.pitchadj = gtk.Adjustment(50, 0, 99, 1, 10, 0) + self.pitchadj = gtk.Adjustment(97, 0, 99, 1, 10, 0) + self.pitchadj.connect("value_changed", self.pitch_adjusted_cb, self.pitchadj) pitchbar = gtk.HScale(self.pitchadj) pitchbar.set_draw_value(False) #pitchbar.set_inverted(True) @@ -322,7 +316,8 @@ class SpeakActivity(activity.Activity): self.rateadj = gtk.Adjustment(0, -100, 100, 1, 10, 0) else: # espeak uses 80 to 370 - self.rateadj = gtk.Adjustment(100, 80, 370, 1, 10, 0) + self.rateadj = gtk.Adjustment(120, 80, 370, 1, 10, 0) + self.rateadj.connect("value_changed", self.rate_adjusted_cb, self.rateadj) ratebar = gtk.HScale(self.rateadj) ratebar.set_draw_value(False) #ratebar.set_inverted(True) @@ -341,9 +336,11 @@ class SpeakActivity(activity.Activity): self.say(self.voice.friendlyname) def pitch_adjusted_cb(self, get, data=None): + print "pitch %f" % self.pitchadj.value self.say(_("pitch adjusted")) def rate_adjusted_cb(self, get, data=None): + print "rate %f" % self.rateadj.value self.say(_("rate adjusted")) def make_face_bar(self): @@ -352,15 +349,17 @@ class SpeakActivity(activity.Activity): self.numeyesadj = None self.mouth_shape_combo = ComboBox() + self.mouth_shape_combo.connect('changed', self.mouth_changed_cb) self.mouth_shape_combo.append_item(mouth.Mouth, _("Simple")) self.mouth_shape_combo.append_item(waveform_mouth.WaveformMouth, _("Waveform")) self.mouth_shape_combo.append_item(fft_mouth.FFTMouth, _("Frequency")) - self.mouth_shape_combo.set_active(0) + self.mouth_shape_combo.set_active(2) combotool = ToolComboBox(self.mouth_shape_combo) facebar.insert(combotool, -1) combotool.show() self.eye_shape_combo = ComboBox() + self.eye_shape_combo.connect('changed', self.eyes_changed_cb) self.eye_shape_combo.append_item(eye.Eye, _("Round")) self.eye_shape_combo.append_item(glasses.Glasses, _("Glasses")) combotool = ToolComboBox(self.eye_shape_combo) @@ -368,6 +367,7 @@ class SpeakActivity(activity.Activity): combotool.show() self.numeyesadj = gtk.Adjustment(2, 1, 5, 1, 1, 0) + self.numeyesadj.connect("value_changed", self.eyes_changed_cb, self.numeyesadj) numeyesbar = gtk.HScale(self.numeyesadj) numeyesbar.set_draw_value(False) numeyesbar.set_update_policy(gtk.UPDATE_DISCONTINUOUS) @@ -382,7 +382,7 @@ class SpeakActivity(activity.Activity): return facebar - def mouth_changed_cb(self, combo, quiet): + def mouth_changed_cb(self, combo): mouth_class = combo.props.value if self.mouth: self.mouthbox.remove(self.mouth) @@ -392,10 +392,9 @@ class SpeakActivity(activity.Activity): # enable mouse move events so we can track the eyes while the mouse is over the mouth self.mouth.add_events(gtk.gdk.POINTER_MOTION_MASK) # this SegFaults: self.say(combo.get_active_text()) - if not quiet: - self.say(_("mouth changed")) + self.say(_("mouth changed")) - def eyes_changed_cb(self, ignored, quiet): + def eyes_changed_cb(self, ignored, ignored2=None): if self.numeyesadj is None: return @@ -414,8 +413,7 @@ class SpeakActivity(activity.Activity): eye.show() # this SegFaults: self.say(self.eye_shape_combo.get_active_text()) - if not quiet: - self.say(_("eyes changed")) + self.say(_("eyes changed")) def _combo_changed_cb(self, combo): # when a new item is chosen, make sure the text is selected @@ -450,7 +448,7 @@ class SpeakActivity(activity.Activity): map(lambda e: e.look_ahead(), self.eyes) # speak the text - self.say(text) + self.say(k.respond(text)) # add this text to our history unless it is the same as the last item history = self.entrycombo.get_model() @@ -468,7 +466,7 @@ class SpeakActivity(activity.Activity): print "synth callback:", callback_type, index_mark def say(self, something): - if self.audio is None: + if self.audio is None or not self.active: return print self.voice.name, ":", something @@ -486,10 +484,11 @@ class SpeakActivity(activity.Activity): def _activeCb( self, widget, pspec ): # only generate sound when this activity is active - if not self.props.active: + if (not self.props.active and self.active): self.audio.stop_sound_device() - else: + elif (self.props.active and not self.active): self.audio.restart_sound_device() + self.active = self.props.active def on_quit(self, data=None): self.audio.on_quit() |