Re: [Sugar-devel] New and revised chapters of Make Your Own Sugar Activities! ready for review, feedback

2010-01-22 Thread Jim Simmons
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

2010-01-21 Thread Aleksey Lim
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

2010-01-21 Thread Jim Simmons
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

2010-01-21 Thread Jim Simmons
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

2010-01-21 Thread Aleksey Lim
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