Re: [Sugar-devel] New and revised chapters of Make Your Own Sugar Activities! ready for review, feedback
Aleksey, I tried out your new speech.py last night and it checked out OK. I've put this code in the book and in Git. I will probably add an example of how to use espeak word splitting before the book is published. Right now I need to work on learning collaboration so I can teach it to others, but I'll come back to this chapter soon. I don't know if I'm going to mention GroupThink in this book or not. I want to create some simple collaboration examples, explain them, then see how I feel about adding more content. GroupThink doesn't look like something for a beginner's book. Maybe when this book is out the door some more qualified person will do an advanced book covering all the stuff I could not. James Simmons On Thu, Jan 21, 2010 at 4:41 PM, Aleksey Lim alsr...@member.fsf.org wrote: On Thu, Jan 21, 2010 at 10:24:50AM -0600, Jim Simmons wrote: I just finished writing another chapter of the book, this one on adding Text to Speech to your Activities. I've also made various additions and corrections to the rest of it. If you want to check out what I have a PDF created with OBJAVI! is available here: http://objavi.flossmanuals.net/books/ActivitiesGuideSugar-en-2010.01.21-18.33.56.pdf Thanks for your efforts! just minor cleanups you can consider to make code less verbose and easily understandable(perhaps), see attached speech.py ___ Sugar-devel mailing list Sugar-devel@lists.sugarlabs.org http://lists.sugarlabs.org/listinfo/sugar-devel
Re: [Sugar-devel] New and revised chapters of Make Your Own Sugar Activities! ready for review, feedback
On Thu, Jan 21, 2010 at 10:41:59PM +, Aleksey Lim wrote: On Thu, Jan 21, 2010 at 10:24:50AM -0600, Jim Simmons wrote: I just finished writing another chapter of the book, this one on adding Text to Speech to your Activities. I've also made various additions and corrections to the rest of it. If you want to check out what I have a PDF created with OBJAVI! is available here: http://objavi.flossmanuals.net/books/ActivitiesGuideSugar-en-2010.01.21-18.33.56.pdf Thanks for your efforts! just minor cleanups you can consider to make code less verbose and easily understandable(perhaps), see attached speech.py and also, could be useful to mention words tracking feature of espeak, like http://wiki.sugarlabs.org/go/Activity_Team/gst-plugins-espeak#Simple_TTS_example Yes, some espeak versions(at least old ones) could miss some words but its getting better(I didn't check last espeak version but at least espeak developers are working on track improvements) and in case of simple tts usage, just reusing espeak native feature would be more useful than coding marking stuff. I'm going to start working on code samples for a Collaboration chapter next, and I want to do a chapter on debugging Sugar Activities after that. I think Walter had developed some code to let you run Sugar Activities outside of the Sugar environment and that would be a good fit for the debugging chapter. For collaboration I'm going to try to put together a sort of half-finished game called Battle Royale Tic Tac Toe. I'll also write about file sharing as used by Read Etexts. Once I have this material added I think I'll have enough to make it worth putting on the front page of the site. That won't mean it's finished, but enough of it will be that the book could be considered complete. I welcome collaborators as well as editors on this. There are many topics you could put in a book like this that I'm not qualified to write. I'm up to 87 pages now. James Simmons -- Aleksey import gst voice = 'default' pitch = 0 rate = -20 highlight_cb = None def _create_pipe(): pipeline = 'espeak name=source ! autoaudiosink' pipe = gst.parse_launch(pipeline) def stop_cb(bus, message): pipe.set_state(gst.STATE_NULL) def mark_cb(bus, message): if message.structure.get_name() == 'espeak-mark': mark = message.structure['mark'] highlight_cb(int(mark)) bus = pipe.get_bus() bus.add_signal_watch() bus.connect('message::eos', stop_cb) bus.connect('message::error', stop_cb) bus.connect('message::element', mark_cb) return (pipe.get_by_name('source'), pipe) def _speech(source, pipe, words): source.props.pitch = pitch source.props.rate = rate source.props.voice = voice source.props.text = words; pipe.set_state(gst.STATE_PLAYING) info_source, info_pipe = _create_pipe() play_source, play_pipe = _create_pipe() # track for marks play_source.props.track = 2 def voices(): return info_source.props.voices def say(words): _speech(info_source, info_pipe, words) print words def play(words): _speech(play_source, play_pipe, words) def is_stopped(): for i in play_pipe.get_state(): if isinstance(i, gst.State) and i == gst.STATE_NULL: return True return False def stop(): play_pipe.set_state(gst.STATE_NULL) def is_paused(): for i in play_pipe.get_state(): if isinstance(i, gst.State) and i == gst.STATE_PAUSED: return True return False def pause(): play_pipe.set_state(gst.STATE_PAUSED) def rate_up(): global rate rate = min(99, rate + 10) def rate_down(): global rate rate = max(-99, rate - 10) def pitch_up(): global pitch pitch = min(99, pitch + 10) def pitch_down(): global pitch pitch = max(-99, pitch - 10) def prepare_highlighting(label_text): i = 0 j = 0 word_begin = 0 word_end = 0 current_word = 0 word_tuples = [] omitted = [' ', '\n', u'\r', '_', '[', '{', ']', '}', '|', '',\ '', '*', '+', '/', '\\' ] omitted_chars = set(omitted) while i len(label_text): if label_text[i] not in omitted_chars: word_begin = i j = i while j len(label_text) and label_text[j] not in omitted_chars: j = j + 1 word_end = j i = j word_t = (word_begin, word_end, label_text[word_begin: word_end].strip()) if word_t[2] != u'\r': word_tuples.append(word_t) i = i + 1 return word_tuples def add_word_marks(word_tuples): Adds a mark between each word of text. i = 0 marked_up_text = 'speak ' while i len(word_tuples): word_t = word_tuples[i] marked_up_text = marked_up_text +
Re: [Sugar-devel] New and revised chapters of Make Your Own Sugar Activities! ready for review, feedback
Aleksey, Thanks for your feedback. I'll check out your new code when I get home. Offhand I can't tell what you changed, but I'll make sure to test everything before I update the chapter. I was hoping that speech.py could be a file that new developers could drop into their Activities without fully understanding it. Your work has made speech easy to add to an Activity, so maybe after the book is out we'll start seeing more Activities that use it. James Simmons On Thu, Jan 21, 2010 at 4:41 PM, Aleksey Lim alsr...@member.fsf.org wrote: On Thu, Jan 21, 2010 at 10:24:50AM -0600, Jim Simmons wrote: I just finished writing another chapter of the book, this one on adding Text to Speech to your Activities. I've also made various additions and corrections to the rest of it. If you want to check out what I have a PDF created with OBJAVI! is available here: http://objavi.flossmanuals.net/books/ActivitiesGuideSugar-en-2010.01.21-18.33.56.pdf Thanks for your efforts! just minor cleanups you can consider to make code less verbose and easily understandable(perhaps), see attached speech.py Aleksey ___ Sugar-devel mailing list Sugar-devel@lists.sugarlabs.org http://lists.sugarlabs.org/listinfo/sugar-devel
Re: [Sugar-devel] New and revised chapters of Make Your Own Sugar Activities! ready for review, feedback
Aleksey, I did consider mentioning the word tracking feature you put in your example. However, when I tried your example with actual book text rather than letting it speak the source code of the program it seemed to actually skip speaking some of the words. The markup version was more robust. The machine I used for that test was running Fedora 10, and it may be that in 11 or 12 it would work better. I have another box running 11 and I could try it there. I do have your examples in the Git project for the book so readers could discover them on their own. I could see word tracking being useful in the core Read Activity. Actually highlighting text in place in PDF documents and scanned page images is not as simple as what I'm doing with plain text, but perhaps in Read you could have the spoken words appear in a text crawl at the top of the screen. Right now I want to work on collaboration examples but I may revisit this chapter and add something on word tracking. James Simmons On Thu, Jan 21, 2010 at 4:53 PM, Aleksey Lim alsr...@member.fsf.org wrote: On Thu, Jan 21, 2010 at 10:41:59PM +, Aleksey Lim wrote: Thanks for your efforts! just minor cleanups you can consider to make code less verbose and easily understandable(perhaps), see attached speech.py and also, could be useful to mention words tracking feature of espeak, like http://wiki.sugarlabs.org/go/Activity_Team/gst-plugins-espeak#Simple_TTS_example Yes, some espeak versions(at least old ones) could miss some words but its getting better(I didn't check last espeak version but at least espeak developers are working on track improvements) and in case of simple tts usage, just reusing espeak native feature would be more useful than coding marking stuff. ___ Sugar-devel mailing list Sugar-devel@lists.sugarlabs.org http://lists.sugarlabs.org/listinfo/sugar-devel
Re: [Sugar-devel] New and revised chapters of Make Your Own Sugar Activities! ready for review, feedback
On Thu, Jan 21, 2010 at 10:24:50AM -0600, Jim Simmons wrote: I just finished writing another chapter of the book, this one on adding Text to Speech to your Activities. I've also made various additions and corrections to the rest of it. If you want to check out what I have a PDF created with OBJAVI! is available here: http://objavi.flossmanuals.net/books/ActivitiesGuideSugar-en-2010.01.21-18.33.56.pdf I'm going to start working on code samples for a Collaboration chapter next, and I want to do a chapter on debugging Sugar Activities after that. Could be useful to mention groupthink library in collaboration part http://wiki.sugarlabs.org/go/Summer_of_Code/2009/Groupthink I think Walter had developed some code to let you run Sugar Activities outside of the Sugar environment and that would be a good fit for the debugging chapter. For collaboration I'm going to try to put together a sort of half-finished game called Battle Royale Tic Tac Toe. I'll also write about file sharing as used by Read Etexts. Once I have this material added I think I'll have enough to make it worth putting on the front page of the site. That won't mean it's finished, but enough of it will be that the book could be considered complete. I welcome collaborators as well as editors on this. There are many topics you could put in a book like this that I'm not qualified to write. I'm up to 87 pages now. James Simmons -- Aleksey ___ Sugar-devel mailing list Sugar-devel@lists.sugarlabs.org http://lists.sugarlabs.org/listinfo/sugar-devel