From d299bc942bf3a702e72bda567a7b98ce3dbe861f Mon Sep 17 00:00:00 2001 From: Ajay Garg Date: Wed, 22 May 2013 05:40:34 +0000 Subject: sdxo#2438: Now, "Read" activity has its own dedicated "pitch" and "rate". --- diff --git a/patches/0002-sdxo-2438-Now-Read-activity-have-their-own-dedicated.patch b/patches/0002-sdxo-2438-Now-Read-activity-have-their-own-dedicated.patch new file mode 100644 index 0000000..aec2dc0 --- /dev/null +++ b/patches/0002-sdxo-2438-Now-Read-activity-have-their-own-dedicated.patch @@ -0,0 +1,155 @@ +From e6805512b9699542a46746f64d8f91db021d42db Mon Sep 17 00:00:00 2001 +From: Ajay Garg +Date: Wed, 22 May 2013 11:09:03 +0530 +Subject: [PATCH] sdxo#2438: Now, "Read" activity have their own dedicated + "pitch" and "rate". +Organization: Sugar Labs Foundation + + +Signed-off-by: Ajay Garg +--- + activity/activity.info | 2 +- + speechtoolbar.py | 87 ++++++++++++++++++++++++++++++++++++++++---------- + 2 files changed, 71 insertions(+), 18 deletions(-) + +diff --git a/activity/activity.info b/activity/activity.info +index e184681..378b489 100644 +--- a/activity/activity.info ++++ b/activity/activity.info +@@ -4,7 +4,7 @@ bundle_id = org.laptop.sugar.ReadActivity + icon = activity-read + exec = sugar-activity readactivity.ReadActivity + show_launcher = no +-activity_version = 108.1 ++activity_version = 108.2 + mime_types = application/pdf;image/vnd.djvu;image/x.djvu;image/tiff;application/epub+zip;text/plain;application/zip + license = GPLv2+ + summary = Use this activity when you are ready to read! Remember to flip your computer around to feel like you are really holding a book! +diff --git a/speechtoolbar.py b/speechtoolbar.py +index 3ac3cb8..d8fbbbd 100644 +--- a/speechtoolbar.py ++++ b/speechtoolbar.py +@@ -28,6 +28,12 @@ from sugar3.graphics.toolcombobox import ToolComboBox + + import speech + ++MIN_PITCH = -100 ++MAX_PITCH = 100 ++ ++MIN_RATE = -100 ++MAX_RATE = 100 ++ + + class SpeechToolbar(Gtk.Toolbar): + +@@ -75,6 +81,58 @@ class SpeechToolbar(Gtk.Toolbar): + combotool.show() + speech.reset_buttons_cb = self.reset_buttons_cb + ++ box = Gtk.VBox() ++ pitch_label = Gtk.Label(_('Pitch')) ++ box.pack_start(pitch_label, False, False, 0) ++ box.pack_start(Gtk.Label(' '), False, False, 0) ++ pitch_label.show() ++ ++ self._adj_pitch = Gtk.Adjustment(value=speech.pitch, ++ lower=MIN_PITCH, ++ upper=MAX_PITCH) ++ ++ hscale_pitch = Gtk.HScale() ++ hscale_pitch.set_adjustment(self._adj_pitch) ++ hscale_pitch.set_draw_value(False) ++ ++ box.pack_start(hscale_pitch, False, False, 0) ++ hscale_pitch.show() ++ ++ toolitem = ToolComboBox(box) ++ self.insert(toolitem, -1) ++ toolitem.show_all() ++ ++ box = Gtk.VBox() ++ rate_label = Gtk.Label(_('Rate')) ++ box.pack_start(rate_label, False, False, 0) ++ box.pack_start(Gtk.Label(' '), False, False, 0) ++ rate_label.show() ++ ++ self._adj_rate = Gtk.Adjustment(value=speech.rate, ++ lower=MIN_RATE, ++ upper=MAX_RATE) ++ ++ hscale_rate = Gtk.HScale() ++ hscale_rate.set_adjustment(self._adj_rate) ++ hscale_rate.set_draw_value(False) ++ ++ box.pack_start(hscale_rate, False, False, 0) ++ hscale_rate.show() ++ toolitem = ToolComboBox(box) ++ self.insert(toolitem, -1) ++ toolitem.show_all() ++ ++ self._adj_pitch.connect('value_changed', self.__adj_pitch_changed_cb) ++ self._adj_rate.connect('value_changed', self.__adj_rate_changed_cb) ++ ++ def __adj_pitch_changed_cb(self, adjustment): ++ speech.pitch = int(adjustment.get_value()) ++ self.save_speech_parameters() ++ ++ def __adj_rate_changed_cb(self, adjustment): ++ speech.rate = int(adjustment.get_value()) ++ self.save_speech_parameters() ++ + def compare_voices(self, a, b): + if a[0].lower() == b[0].lower(): + return 0 +@@ -97,26 +155,11 @@ class SpeechToolbar(Gtk.Toolbar): + try: + speech_parameters = simplejson.load(f) + speech.voice = speech_parameters['voice'] ++ speech.pitch = self._cnf_client.get_int('/desktop/sugar/read/pitch') ++ speech.rate = self._cnf_client.get_int('/desktop/sugar/read/rate') + finally: + f.close() + +- self._cnf_client.add_dir('/desktop/sugar/speech', +- GConf.ClientPreloadType.PRELOAD_NONE) +- speech.pitch = self._cnf_client.get_int('/desktop/sugar/speech/pitch') +- speech.rate = self._cnf_client.get_int('/desktop/sugar/speech/rate') +- self._cnf_client.notify_add('/desktop/sugar/speech/pitch', \ +- self.__conf_changed_cb, None) +- self._cnf_client.notify_add('/desktop/sugar/speech/rate', \ +- self.__conf_changed_cb, None) +- +- def __conf_changed_cb(self, client, connection_id, entry, args): +- key = entry.get_key() +- value = client.get_int(key) +- if key == '/desktop/sugar/speech/pitch': +- speech.pitch = value +- if key == '/desktop/sugar/speech/rate': +- speech.rate = value +- + def save_speech_parameters(self): + speech_parameters = {} + speech_parameters['voice'] = speech.voice +@@ -125,9 +168,19 @@ class SpeechToolbar(Gtk.Toolbar): + f = open(data_file_name, 'w') + try: + simplejson.dump(speech_parameters, f) ++ self._cnf_client.set_int('/desktop/sugar/read/pitch', speech.pitch) ++ self._cnf_client.set_int('/desktop/sugar/read/rate', speech.rate) + finally: + f.close() + ++ # Finally, reload the parameters, so that the effects are ++ # updated in real-time. ++ self.load_speech_parameters() ++ ++ # Also the current speech need to restarted, for the ++ # effects to be updated. ++ self.stop_cb(None) ++ + def reset_buttons_cb(self): + logging.error('reset buttons') + self.play_btn.set_icon_name('media-playback-start') +-- +1.7.11.7 + -- cgit v0.9.1